Данные Filebeat и LogStash в нескольких различных форматах

У меня есть Filebeat, Logstash, ElasticSearch и Kibana. Filebeat находится на отдельном сервере и должен получать данные в разных форматах: syslog, json, из базы данных и т. Д. И отправлять их в Logstash.

Я знаю, как настроить Logstash, чтобы он обрабатывал один формат, но, поскольку существует несколько форматов данных, как мне настроить Logstash для правильной обработки каждого формата данных?

Фактически, как я могу настроить их оба, Logstash и Filebeat, чтобы все данные в разных форматах отправлялись из Filebeat и правильно отправлялись в Logstash? Я имею в виду настройку конфигурации, которая обрабатывает отправку и получение данных.


person Community    schedule 07.06.2016    source источник


Ответы (3)


Чтобы разделить различные типы входных данных в конвейере Logstash, используйте поле type и tags для большей идентификации.

В вашей конфигурации Filebeat вы должны использовать разных изыскателей для каждого формата данных, после этого для каждого изыскателя можно настроить свое поле document_type:.

Справочная информация

Например:

filebeat:
  # List of prospectors to fetch data.
  prospectors:
    # Each - is a prospector. Below are the prospector specific configurations
    -
      # Paths that should be crawled and fetched. Glob based paths.
      # For each file found under this path, a harvester is started.
      paths:
        - "/var/log/apache/httpd-*.log"
      # Type to be published in the 'type' field. For Elasticsearch output,
      # the type defines the document type these entries should be stored
      # in. Default: log
      document_type: apache
    -
      paths:
        - /var/log/messages
        - "/var/log/*.log"
      document_type: log_message

В приведенном выше примере в журналах от /var/log/apache/httpd-*.log будет document_type: apache, а от другого изыскателя - document_type: log_message.

Это поле document-type становится полем type, когда Logstash обрабатывает событие. Затем вы можете использовать операторы if в Logstash для различной обработки разных типов.

Справочник

Например:

filter {
  if [type] == "apache" {
    # apache specific processing
  }
  else if [type] == "log_message" {
    # log_message processing
  }
}
person Will Barnwell    schedule 07.06.2016
comment
хорошо, но что, если одни сообщения в формате системного журнала, а другие в формате json? какой кодек я должен указать в выводе в logstash? - person ; 08.06.2016
comment
кодек не является обязательной настройкой в ​​выводе logstash elasticsearch - person Will Barnwell; 08.06.2016
comment
затем попробуйте использовать простой или json - person Will Barnwell; 08.06.2016
comment
Я не понимаю. - person ; 09.06.2016

Если «форматы данных» в вашем вопросе являются кодеками, это необходимо настроить на входе logstash. Далее идет речь о filebeat 1.x и logstash 2.x, а не о стеке elastic 5. В нашей настройке у нас есть два входа битов - первый по умолчанию = "plain":

beats {
    port                => 5043
}
beats {
    port                => 5044
    codec               => "json"
}

На стороне filebeat нам нужны два экземпляра filebeat, отправляющие свой вывод на соответствующие порты. Невозможно указать filebeat «направить этого изыскателя к этому выходу».

Журнал документации: https://www.elastic.co/guide/en/logstash/2.4/plugins-inputs-beats.html

Примечание: если вы поставляете с разными протоколами, например устаревший logstash-forwarder / lumberjack, вам нужно больше портов.

person ynux    schedule 27.11.2016

Поддерживается версией 7.5.1

filebeat-multifile.yml // файл бит установлен на машине

filebeat.inputs:
- type: log
  tags: ["gunicorn"]
  paths:
    - "/home/hduser/Data/gunicorn-100.log"

- type: log
  tags: ["apache"]
  paths:
    - "/home/hduser/Data/apache-access-100.log"

output.logstash:
  hosts: ["0.0.0.0:5044"] // target logstash IP

gunicorn-apache-log.conf // архив журнала установлен на другой машине

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

filter {
    if "gunicorn" in [tags] {
        grok {
            match => { "message" => "%{USERNAME:u1} %{USERNAME:u2} \[%{HTTPDATE:http_date}\] \"%{DATA:http_verb} %{URIPATHPARAM:api} %{DATA:http_version}\" %{NUMBER:status_code} %{NUMBER:byte} \"%{DATA:external_api}\" \"%{GREEDYDATA:android_client}\"" }
            remove_field => "message"
        }
    }
    else if "apache" in [tags] {
        grok {
            match => { "message" => "%{IPORHOST:client_ip} %{DATA:u1} %{DATA:u2} \[%{HTTPDATE:http_date}\] \"%{WORD:http_method} %{URIPATHPARAM:api} %{DATA:http_version}\" %{NUMBER:status_code} %{NUMBER:byte} \"%{DATA:external_api}\" \"%{GREEDYDATA:gd}\" \"%{DATA:u3}\""}
            remove_field => "message"
        }

    }
}

output {
    if "gunicorn" in [tags]{
        stdout { codec => rubydebug }

        elasticsearch {
        hosts => [...]
        index => "gunicorn-index"
        }

    }
    else if "apache" in [tags]{
        stdout { codec => rubydebug }

        elasticsearch {
             hosts => [...]
             index => "apache-index"
        }
    }
}

Запустить filebeat из двоичного файла Дать правильное разрешение файлу

sudo chown root:root filebeat-multifile.yml
sudo chmod go-w filebeat-multifile.yml
sudo ./filebeat -e -c filebeat-multifile-1.yml -d "publish"

Запустить logstash из двоичного файла

./bin/logstash -f gunicorn-apache-log.conf
person Siddharth Kumar    schedule 07.01.2020