Как разобрать xml-файл с фильтрами logstash
Я пытаюсь проиндексировать несколько простых XML-файлов с помощью asticsearch и logstash. Пока что у меня есть настроенный ELK-стек и logstash-экспедитор. Я пытаюсь использовать документацию для настройки фильтра XML, но я просто не могу понять, как это правильно.
Мой формат XML довольно прямолинеен;
<Recording>
<DataFile description="desc" fileName="test.wav" Source="mic" startTime="2014-12-12_121212" stopTime="2014-12-12_131313"/>
</Recording>
Я просто хочу, чтобы каждый файл был записью в asticsearch, а каждый параметр в теге DataFile - это значение ключа, которое я могу искать. Поскольку документация меня ни к чему не привела, как бы выглядел такой фильтр? Я также попытался использовать ответы в этом и этом без какой-либо удачи.
1 ответ
Добавьте нижеприведенную конфигурацию logstash-forwarder и измените IP-адрес сервера logstash, путь к сертификату и путь к журналу соответственно.
{
"network": {
"servers": [ "x.x.x.x:5043" ],
"ssl ca": " / cert/server.crt",
"timeout": 15
},
"files": [
{
"paths": [
"D:/ELK/*.log"
],
"fields": { "type": "log" }
}
]
}
Добавьте плагин ввода ниже в конфигурацию вашего сервера logstash. Измените сертификат, путь к ключу и имя соответственно.
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
}
}
Теперь добавьте приведенный ниже фильтр grok в разделе фильтра 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-сообщения в ваш лог-файл. Каждая запись будет обработана и сохранена на вашем сервере эластичного поиска.
Спасибо,