1

Я пытаюсь индексировать некоторые простые XML-файлы с помощью elasticsearch и logstash. Пока у меня установлен ELK-стек и logstash-forwarder. Я пытаюсь использовать documentation, чтобы настроить xml-фильтр, но я просто не могу его правильно понять.Как анализировать xml-файл с помощью фильтров logstash

Мой XML-формат довольно сложный;

<Recording> 

    <DataFile description="desc" fileName="test.wav" Source="mic" startTime="2014-12-12_121212" stopTime="2014-12-12_131313"/> 

</Recording> 

Я просто хочу, чтобы каждый файл, который будет запись в elasticsearch, и каждый параметр в DataFile теге быть ключ-значение, что я могу найти. Поскольку документация никуда не денется, как бы выглядел такой фильтр? Я также попытался использовать ответы в this и this без везения.

+0

Можете ли вы показать текущий конфигурационный файл Logstash, который у вас есть? – Val

+0

Logstash читает файлы по строкам, поэтому вы первый заказ бизнеса - использовать многострочный фильтр для объединения физических строк файла в одну логическую строку (сообщение). Но Logstash не предназначен для чтения целых файлов, поэтому я бы посмотрел на другой вариант. –

ответ

1

Добавьте нижеприведенную конфигурацию logstash-forwarder и измените IP-адрес сервера журнала, путь к сертификату и путь к журналу.

{ 
"network": { 
"servers": [ "x.x.x.x:5043" ], 
"ssl ca": "/cert/server.crt", 
"timeout": 15 
}, 
"files": [ 
{ 
"paths": [ 
"D:/ELK/*.log" 
], 
"fields": { "type": "log" } 
} 
] 
} 

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

lumberjack { 
    port => 5043 
    type => "lumberjack" 
    ssl_certificate => " /cert/server.crt" 
    ssl_key => "D:/ELK/logstash/cert/server.key" 
    codec => multiline { 
      pattern => "(\/Recording>)" 
      what => "previous" 
      negate => true 
      } 
} 

Теперь добавьте ниже ГРОК фильтр под секцией фильтра logstash

grok { 
     match => ["message", "(?<content>(< Recording(.)*?</Recording>))"] 
     tag_on_failure => [ ] 

     } 

Наконец в выходном logstash сессии добавить

elasticsearch { 
        host => "127.0.0.1" 
        port => "9200" 
        protocol => "http" 
        index => "Recording-%{+YYYY.MM.dd}" 
        index_type => "log" 
       } 

Теперь, когда вы добавляете ваши XML-сообщения в файл журнала , Каждая запись будет обрабатываться и храниться на вашем эластичном поисковом сервере.

Спасибо,

Смежные вопросы