【发布时间】:2018-02-09 16:41:33
【问题描述】:
我正在尝试在 Logstash 中解析 XML 文件。我想使用 XPath 来解析 XML 中的文档。所以当我运行我的配置文件时,数据会加载到elasticsearch,但这不是我想要加载数据的方式。 elasticsearch中加载的数据是xml文档中的每一行
我的 XML 文件的结构
我想要达到的目标:
在 elasticsearch 中创建字段来存储以下内容
ID =1
Name = "Finch"
我的配置文件:
input{
file{
path => "C:\Users\186181152\Downloads\stations.xml"
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
type => "xml"
}
}
filter{
xml{
source => "message"
store_xml => false
target => "stations"
xpath => [
"/stations/station/id/text()", "station_id",
"/stations/station/name/text()", "station_name"
]
}
}
output{
elasticsearch{
codec => json
hosts => "localhost"
index => "xmlns"
}
stdout{
codec => rubydebug
}
}
Logstash 中的输出:
{
"station_name" => "%{station_name}",
"path" => "C:\Users\186181152\Downloads\stations.xml",
"@timestamp" => 2018-02-09T04:03:12.908Z,
"station_id" => "%{station_id}",
"@version" => "1",
"host" => "BW",
"message" => "\t\r",
"type" => "xml"
}
【问题讨论】:
-
我认为 Windows 不支持
dev/null。 -
整个 xml 文件是否在同一行,即没有换行符?因为如果不是这种情况,文件将被逐行处理(如文档中所示),从而导致空的
station_id和station_name。 -
@baudsp Dev/null 工作正常。我尝试了一个 csv 文件,它正确加载了数据
-
@baudsp 整个 xml 文件不在同一行。该文件遵循标准 xml 文件约定。一行一个标签
-
文件输入逐行读取,每行创建一条消息,解释您的结果。您必须在输入中使用多行编解码器。看到这个stackoverflow.com/questions/34800559/…
标签: elasticsearch logstash logstash-configuration