Как настроить FileBeat и Logstash для добавления файлов XML в Elasticsearch?

Я здесь новичок. Моя собственная проблема - настроить FileBeat и Logstash для добавления XML-файлов в Elasticsearch на CentOS 7. Я уже установил последнюю версию filebeat, logstash, elasticsearch и Kibana с автономным плагином «elasticsearch-head», чтобы заглянуть внутрь elasticsearch. И чтобы проверить свою установку, я успешно добавил простой файл журнала из системы CentOS (/ var / log / messages) и вижу его внутри плагина elasticsearch-head (6 индексов и 26 сегментов): Это обзор моего подключаемого модуля elasticsearch-head

А теперь следующий шаг - добавить журнал из XML-файла. После прочтения документации я настроил filebeat и logstash. Все службы запущены, и я пробую команду «touch /mes/AddOf.xml», чтобы попытаться активировать событие filebeat и переслать журнал в logstash (AddOf.xml - мой файл журнала).

Моя структура данных XML для одного события журнала выглядит следующим образом:

<log4j:event logger="ServiceLogger" timestamp="1494973209812" level="INFO" thread="QueueWorker_1_38a0fec5-7c7f-46f5-a87a-9134fff1b493">
    <log4j:message>Traitement du fichier \\ifs-app-01\Interfaces_MES\AddOf\ITF_MES_01_01_d2bef200-3a85-11e7-1ab5-9a50967946c3.xml</log4j:message>
    <log4j:properties>
        <log4j:data name="log4net:HostName" value="MES-01" />
        <log4j:data name="log4jmachinename" value="MES-01" />
        <log4j:data name="log4net:Identity" value="" />
        <log4j:data name="log4net:UserName" value="SOFRADIR\svc_mes_sf" />
        <log4j:data name="LogName" value="UpdateOperationOf" />
        <log4j:data name="log4japp" value="MES_SynchroService.exe" />
    </log4j:properties>
    <log4j:locationInfo class="MES_SynchroService.Core.FileManager" method="TraiteFichier" file="C:\src\MES_PROD\MES_SynchroService\Core\FileManager.cs" line="47" />
</log4j:event>

Моя конфигурация filebeat выглядит так (/etc/filebeat/filebeat.yml):

filebeat.prospectors:

# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.
- input_type: log

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /mes/*.xml

  document_type: message

  ### Multiline options

  # Mutiline can be used for log messages spanning multiple lines. This is common
  # for Java Stack Traces or C-Line Continuation

  # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [
  multiline.pattern: ^<log4j:event

  # Defines if the pattern set under pattern should be negated or not. Default is false.
  multiline.negate: true

  # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern
  # that was (not) matched before or after or as long as a pattern is not matched based on negate.
  # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash
  multiline.match: after

#================================ Outputs =====================================

# Configure what outputs to use when sending the data collected by the beat.
# Multiple outputs may be used.

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"

Моя входная конфигурация logstash (/etc/logstash/conf.d/01-beats-input.conf):

input {
 beats {
 port => 5044
 ssl => true
 ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
 ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
 }
}

Моя конфигурация журнала фильтров (/etc/logstash/conf.d/01-beats-filter.conf):

filter 
{
    xml 
    {
        source => "message"
        xpath => 
        [
            "/log4j:event/log4j:message/text()", "messageMES"
        ]
        store_xml => true
        target => "doc"
    }
}

Моя конфигурация вывода журнала (/etc/logstash/conf.d/01-beats-output.conf):

output {
 elasticsearch {
 hosts => ["localhost:9200"]
 sniffing => true
 manage_template => false
 index => "mes_log"
 document_type => "%{[@metadata][type]}"
 }
}

Но когда я пробую команду «touch /mes/AddOf.xml» или вручную добавляю журнал событий в AddOf.xml, я не вижу нового индекса с журналом событий из файла XML в elasticsearch.

У меня есть документация для подключаемого модуля XML для logstash (здесь), а сейчас нет, если мне нужно что-то установить? Или, может быть, я не правильно делаю для filebeat отправку логов в logstash?

Я очень заинтересован и мотивирован изучать стек ELK. Заранее благодарим вас за ваш опыт и помощь. Буду признателен ! :)


person benjamin38600    schedule 18.05.2017    source источник
comment
Проверяли ли вы журнал каждой системы в процессе? Если вы ничего не видите на ES, возможно, проблема связана с привязкой logstash к ES. Вам нужна аутентификация? Попробуйте проверить параметры user, password, ssl и cacert, если они вам понадобятся (в последнем фрагменте). Вы можете проверить, поступают ли ваши данные в logstash, распечатывая результаты непосредственно в оболочке: если они появляются, проблема связана с привязкой. просто использовать как результат output{ stdout { codec => rubydebug } }   -  person Andrea    schedule 19.05.2017
comment
Привет. У меня нет сертификата ssl, он мне не нужен. Я не использую пользователя или пароль для ES. Это была проблема с фильтром пространства имен xml. Но это не решено полностью (см. Сообщения под этим).   -  person benjamin38600    schedule 30.05.2017


Ответы (1)


В вашей конфигурации filebeat регулярное выражение для multiline.pattern, вероятно, должно быть в одинарных кавычках:

multiline.pattern: '^<log4j:event'
person sysadmin1138    schedule 18.05.2017
comment
Танки за помощь, правда для одинарных кавычек! Но я всегда в одном и том же. Идея для тестирования, чтобы выяснить, связана ли проблема с filebeat или logstash? - person benjamin38600; 19.05.2017
comment
Вы можете запускать как filebeat, так и logstash в режиме отладки. ./filebeat -c filebeat.yml -e -d * и bin / logstash -f путь / к / logstash.conf --log.level отладка. - person berrytchaks; 19.05.2017
comment
Танки, с командой отладки logstash я обнаружил ошибку фильтра с пространством имен xml (log4j). Теперь фильтр работает с: 'remove_namespaces = ›true' и xpath '/ event / message / text (). Но выходные теги показывают ошибку синтаксического анализа: '_xmlparsefailure'. Я уверен, что эта тихая ошибка снова связана с пространством имен, но анализ работает, в моем поле xpath_message я получаю сообщение. Что ты об этом думаешь ? Странно, проблема здесь и работает: github.com/logstash- plugins / logstash-filter-xml / issues / 10, но тег ошибки остается. - person benjamin38600; 30.05.2017
comment
Есть очень хороший инструмент для отладки событий: https://github.com/ugosan/docker-logstash-http-debug - person ugosan; 03.08.2020