【发布时间】:2023-03-18 16:40:01
【问题描述】:
我的问题: 我有 XML 文件,其中包含我想使用 Logstash 解析的事件,以便在之后使用 Kibana 请求它。我想在每个事件中保留 ROOT 标签中的所有信息。
输入看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT number="34">
<EVENTLIST>
<EVENT name="hey"/>
<EVENT name="you"/>
</EVENTLIST>
</ROOT>
我想要的,两个这样的文件:
{
"number":"34"
"name": "Hey"
}
{
"number":"34"
"name": "you"
}
Logstash 配置:
input {
stdin { }
}
filter {
xml {
store_xml => "false"
source => "message"
target => "EVENT"
xpath => [
"/ROOT/@number","number",
"/ROOT/EVENTLIST/EVENT/@name","name"
]
}
}
output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
没用。我得到了什么:
{
"number" : ["34"]
"name":["hey,"you""]
}
我按照这个帖子的解决方案:https://serverfault.com/questions/615196/logstash-parsing-xml-document-containing-multiple-log-entries
但我的问题仍然存在,我丢失了根标签中的信息。
解决方案之一可能是使用一些 ruby 过滤器来处理它,但我不知道 ruby。 另一种是在发送到elasticsearch之前使用一些java编程将XML转换为JSON...
有什么想法可以解决这个问题,还是我必须学习 ruby?
【问题讨论】:
标签: xml elasticsearch logstash