我正在使用我从本文中获得的logstash配置文件...
http://logz.io/blog/sysdig-elk-stack/
/etc/logstash/sysdig-logstash.conf
的内容input {
stdin { }
}
filter {
grok {
pattern => "^%{NUMBER:num:int} %{NUMBER:time:float} %{INT:cpu:int} %{NOTSPACE:procname} %{NOTSPACE:tid} (?<direction>[<>]) %{WORD:event} %{DATA:args}$"
}
date {
match => [ "time", "UNIX" ]
}
if [args] {
kv {
source => "args"
remove_field => "args"
}
}
}
output {
#stdout { codec => rubydebug }
elasticsearch {
}
}
当我尝试使用logstash将数据转储为弹性时,我收到错误...
# sysdig -t a "not(proc.name = sysdig)" | bin/logstash -f /etc/logstash/sysdig-logstash.conf
获取了无效的配置
处理sysdig数据的正确配置文件是什么?
更新
纠正=&gt;我可以将文本记录为弹性。但有一个问题。整个日志行被保存为消息字段,忽略配置文件中提到的grok模式。对于例如当我启用stdout到rubydebug时,这是输出。
{
"message" => "1894246 1478069107.694757379 1 sysdig (16910) > switch next=0 pgft_maj=0 pgft_min=1658 vm_size=97364 vm_rss=7816 vm_swap=0 ",
"@version" => "1",
"@timestamp" => "2016-11-02T06:45:07.725Z",
"host" => "ip-172-31-0-192",
"tags" => [
[0] "_grokparsefailure"
]
}
文章提到了cpu,procname等的单独字段。
答案 0 :(得分:1)
指定grok过滤器的正确方法是这样的,即使用match
而不是pattern
filter {
grok {
match => {"message" => "^%{NUMBER:num:int} %{NUMBER:time:float} %{INT:cpu:int} %{NOTSPACE:procname} %{NOTSPACE:tid} (?<direction>[<>]) %{WORD:event} %{DATA:args}$" }
}
}
答案 1 :(得分:0)
尝试使用grok debugger调试grok。绝对是上面的代码示例的一些问题。