Как я могу использовать несколько фильтров XML для одного сообщения XML
Мне нужно проанализировать XML-документ (полученный как сообщение rabbitmq), но я хочу получить больше информации по некоторым фильтрам. Здесь XML часть моего logstash
if ([message] =~ /^</) {
xml {
...
xpath => [
"/APIOS_MOM_EVENT/IDENT/NO_EMIARTE/text()", "NO_EMIARTE",
"name(/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/*[not(self::METADATA)])","MESSAGE_TYPE",
"name(/APIOS_MOM_EVENT/DATA/*)","RECOMMENDATIONS",
"/APIOS_MOM_EVENT/DATA/APIOS_EXPORT/METADATA/CODE_OFFRE_WEB/text()","OFFRE_WEB"
]
target => "xml"
}
alter {
condrewrite => [
"MESSAGE_TYPE","","EDITO"
]
condrewriteother => [
"RECOMMENDATIONS","RECOMMENDATIONS","MESSAGE_TYPE","RECOMMENDATIONS"
]
condrewriteother => [
"RECOMMENDATIONS","SCHEDULE","MESSAGE_TYPE","SCHEDULE"
]
remove_field => [ "RECOMMENDATIONS" ]
}
if [MESSAGE_TYPE]=="SCHEDULE" {
xml{
source => "message"
store_xml => false
xpath => [
"/APIOS_MOM_EVENT/DATA/SCHEDULE/DAY/@DATE","DAY"
]
target => "xml"
}
}
}
Поэтому здесь, если у меня есть SCHEDULE MESSAGE_TYPE, я бы хотел добавить фильтр, чтобы получить ДЕНЬ, но это кажется довольно сложным. У меня такое ощущение, что MESSAGE_TYPE недоступно в моем заявлении if
Пока все хорошо if [MESSAGE_TYPE]=="SCHEDULE" {
1 ответ
Решение
Хорошо, я не знаю, почему это не работает, но код ниже работает хорошо
...
remove_field => [ "RECOMMENDATIONS" ]
}
if [MESSAGE_TYPE]=="SCHEDULE" {
xml{
source => "message"
store_xml => false
xpath => [
"/APIOS_MOM_EVENT/DATA/SCHEDULE/DAY/@DATE","DAY",
"/APIOS_MOM_EVENT/DATA/SCHEDULE/DAY/ELEMENT/NO_EMIARTE/text()","NO_EMIARTE",
"/APIOS_MOM_EVENT/DATA/SCHEDULE/DAY/ELEMENT/ID_PROG/text()","ID_PROG"
]
target => "xml"
}
}
Новые поля теперь хорошо отработаны в ES.