Выход Logstash из другого входа

У меня проблема, из-за которой моя метрика перехватывается моим http-конвейером.

И Logstash, и Elastic, и Metricbeat работают в Kubernetes.

Мой beatmetric настроен на отправку в Logstash через порт 5044 и запись в файл в /tmp. Это прекрасно работает. Но всякий раз, когда я создаю конвейер с входом http, кажется, что он также перехватывает входные данные beatmetric и отправляет их в index2 в Elastic, как определено в конвейере http.

Почему оно так себя ведет?

/usr/share/logstash/pipeline/http.conf

input {
  http {
    port => "8080"
  }
}

output {

  #stdout { codec => rubydebug }

  elasticsearch {

    hosts => ["http://my-host.com:9200"]
    index => "test2"
  }
}

/usr/share/logstash/pipeline/beats.conf

input {
    beats {
        port => "5044"
    }
}

output {
    file {
        path => '/tmp/beats.log'
        codec => "json"
    }
}

/usr/share/logstash/config/logstash.yml

pipeline.id: main
pipeline.workers: 1
pipeline.batch.size: 125
pipeline.batch.delay: 50
http.host: "0.0.0.0"
http.port: 9600
config.reload.automatic: true
config.reload.interval: 3s

/usr/share/logstash/config/pipeline.yml

- pipeline.id: main
  path.config: "/usr/share/logstash/pipeline"

person d00dle    schedule 18.04.2019    source источник
comment
как вы запускаете logstash? вы используете несколько конвейеров с конфигурацией Pipelines.yml?   -  person leandrojmp    schedule 18.04.2019
comment
Обновил мой вопрос. По сути, pipe.yml указывает на каталог конвейера с обоими файлами conf. Все работает в Kubernetes (и поэтому запускается автоматически через образ докера).   -  person d00dle    schedule 18.04.2019


Ответы (1)


Даже если у вас есть несколько файлов конфигурации, они считываются logstash как один конвейер, объединяя входы, фильтры и выходы, если вам нужно запустить их как отдельные конвейеры, у вас есть два варианта.

Измените свой pipelines.yml и создайте разные pipeline.id, каждый из которых указывает на один из файлов конфигурации.

- pipeline.id: beats
  path.config: "/usr/share/logstash/pipeline/beats.conf"
- pipeline.id: http
  path.config: "/usr/share/logstash/pipeline/http.conf"

Или вы можете использовать tags в своих input, filter и output, например:

input {
  http {
    port => "8080"
    tags => ["http"]
  }
  beats {
    port => "5044"
    tags => ["beats"]
  }
}
output {
 if "http" in [tags] {
      elasticsearch {
        hosts => ["http://my-host.com:9200"]
        index => "test2"
      }
  }
 if "beats" in [tags] {
      file {
        path => '/tmp/beats.log'
        codec => "json"
      }
  }
}

Рекомендуем использовать файл pipelines.yml для запуска нескольких конвейеров

person leandrojmp    schedule 18.04.2019
comment
Имеет смысл. Это был недостающий элемент для меня. Спасибо! - person d00dle; 18.04.2019