解析XML文件LogStash
我有以下logstash的conf文件:解析XML文件LogStash
input {
file
{
path => "C:\Dashboard\Elmah\*.xml"
start_position => "beginning"
type => "error"
codec => multiline
{
pattern => "^<\?error .*\>"
negate => true
what => "previous"
}
sincedb_path => "C:\Dashboard\Elmah"
}
}
filter
{
xml
{
source => "error"
xpath =>
[
"/error/@errorId", "ErrorId",
"/error/@type", "Type",
"/error/@message", "Message",
"/error/@time", "Time",
"/error/@user", "User"
]
store_xml => true
}
}
output
{
elasticsearch
{
action => "index"
host => "localhost"
index => "stock"
workers => 1
}
stdout
{
codec => rubydebug
}
}
当我运行斌/ logstash -f agent.conf我没有得到一个错误,但没有数据被插入到Elasticsearch。该文件的一个示例是: https://www.dropbox.com/s/6oni2zhorsdtz6p/error-2015-06-26203423Z-3026bd43-07d6-44d6-a6cf-6d27b28a607e.xml?dl=0
如何让Logstash读取外部xml文件的集合?
LogStash调试输出:
Please see here: https://www.dropbox.com/s/g7g1154uvf9fr1f/outputlog2.txt?dl=0
我不知道,你可以在这里使用的文件输入 - 我只看到它用于监视文件的变化,而不是监视新文件。除非你的XML文件被更新,否则我不认为它会做任何事情。请记住,logstash通常会监视新的日志行。
大多数人写的工具,如下面的处理在批处理整个文件:
https://github.com/elastic/elasticsearch-river-wikipedia
https://github.com/andrewvc/wikiparse
https://github.com/elastic/stream2es
这些工具,特别是最后一个,似乎更接近你用例。
如果您尝试运行(重复)进行测试,请删除sincedb文件或将路径设置为/ dev/null。 –
@Martin:Stream2es似乎不支持解析xml文件。 –
@AlainCollins:在C:\ Dashboard \ Elmah文件夹中未创建任何文件。我将“sincedb_path”更改为/ dev/null,并再次运行LogStash和ElasticSearch,但得到了相同的结果。 –
我已经成功地使用以下logstash配置来处理每行上包含一个xml文档的文件。希望这个帮助!
input {
file {
path => "/tmp/logstash/test.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
xml {
source => "message"
force_array => false
xpath => [
"/Event/@timestamp", "time",
"/Event/user[1]/id[1]/text()", "user",
"/Event/user[1]/ip[1]/text()[1]", "ip",
"/Event/@eventType", "eventType",
"/Event/transactionDuration/text()", "trxDuration",
]
store_xml => true
}
}
output
{
stdout{
codec => line {
format => "%{[time]} %{[user]} %{[eventType]} %{[trxDuration]}"
}
}
}
你从stdout {}的输出中得到了什么? –
@AlainCollins:我添加了你请求的信息 –
我的意思是你的logstash stdout(你有一个输出节引用它)。 –