正在使用 Logstash 解析 XML 文件
Parsing XML file using Logstash
我正在尝试在 Logstash 中解析一个 XML 文件。我想使用 XPath 来解析 XML 中的文档。因此,当我 运行 我的配置文件时,数据加载到 elasticsearch
但它不是我想要加载数据的方式。 elasticsearch
中加载的数据是xml文档中的每一行
我的 XML 文件的结构
我想达到的目标:
在存储以下内容的 elasticsearch 中创建字段
ID =1
Name = "Finch"
我的配置文件:
input{
file{
path => "C:\Users6181152\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:\Users6181152\Downloads\stations.xml",
"@timestamp" => 2018-02-09T04:03:12.908Z,
"station_id" => "%{station_id}",
"@version" => "1",
"host" => "BW",
"message" => "\t\r",
"type" => "xml"
}
多行过滤器允许创建 xml 文件作为单个事件,我们可以使用 xml-过滤器或 xpath 解析 xml 以在 elasticsearch 中摄取数据。
在多行过滤器中,我们提到了一个模式(在下面的例子中),logstash 使用它来扫描你的 xml 文件。一旦模式与之后的所有条目匹配,将被视为单个事件。
以下是我的数据的工作配置文件示例
input {
file {
path => "C:\Users6181152\Downloads\stations3.xml"
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
type => "xml"
codec => multiline {
pattern => "<stations>"
negate => "true"
what => "previous"
}
}
}
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 => "xmlns24"
}
stdout {
codec => rubydebug
}
}
我正在尝试在 Logstash 中解析一个 XML 文件。我想使用 XPath 来解析 XML 中的文档。因此,当我 运行 我的配置文件时,数据加载到 elasticsearch
但它不是我想要加载数据的方式。 elasticsearch
中加载的数据是xml文档中的每一行
我的 XML 文件的结构
我想达到的目标:
在存储以下内容的 elasticsearch 中创建字段
ID =1
Name = "Finch"
我的配置文件:
input{
file{
path => "C:\Users6181152\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:\Users6181152\Downloads\stations.xml",
"@timestamp" => 2018-02-09T04:03:12.908Z,
"station_id" => "%{station_id}",
"@version" => "1",
"host" => "BW",
"message" => "\t\r",
"type" => "xml"
}
多行过滤器允许创建 xml 文件作为单个事件,我们可以使用 xml-过滤器或 xpath 解析 xml 以在 elasticsearch 中摄取数据。 在多行过滤器中,我们提到了一个模式(在下面的例子中),logstash 使用它来扫描你的 xml 文件。一旦模式与之后的所有条目匹配,将被视为单个事件。
以下是我的数据的工作配置文件示例
input {
file {
path => "C:\Users6181152\Downloads\stations3.xml"
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
type => "xml"
codec => multiline {
pattern => "<stations>"
negate => "true"
what => "previous"
}
}
}
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 => "xmlns24"
}
stdout {
codec => rubydebug
}
}