Я настраиваю logstash, чтобы можно было получать логи xml из filebeat. Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу печатать весь файл журнала, я просто заинтересован в определенных полях. Для этого я использую плагин фильтра xml и плагин фильтра Prune.
Например, я работаю с оповещениями IDMEF-Message и меня интересует поле Классификация.
Конфигурация, которую я сделал:
input {
beats {
port => "5044"
}
}
#I'm just interested in the log alert.
filter {
prune {
whitelist_names => [ "^message$"]
}
}
#Get de classification text from the alert
filter {
xml {
source => "message"
store_xml => false
target => "clasifications"
xpath => ["/IDMEF-Message/Alert/Classification/text()", "clasificacion"]
remove_field => "message"
}
}
#Add a new field class with the clasifications value
filter {
mutate{add_field=>{"class"=>"%{clasifications}"}}
}
#remove message and just let the class field
filter {
prune {
whitelist_names => [ "clas"]
}
}
output {
file {
path => "~/xml_logstash.txt"
}
}
И вывод, который я получаю, это просто {"class": "% {clasification}"}. Я также попытался изменить mutate {add_field => {"class" => "% {clasification}"}} для mutate {add_field => {"class" => "% {clasificacion}"}}, но результат тот же .
Я сомневаюсь, как получить доступ к полю "clasificacion", где я сохранил результат фильтра xml.
Пример журналов, над которыми я работаю:
<IDMEF-Message>
<Alert messageid="...">
<Analyzer ...
</Analyzer>
<CreateTime ... </CreateTime>
<DetectTime ... </DetectTime>
<AnalyzerTime ... </AnalyzerTime>
<Source>
...
</Source>
<Target>
...
</Target>
<Classification text="Text_Class" />
<IDMEF-Message>
Спасибо
Rubi