我正在使用从本文中获得的logstash配置文件.
http://logz.io/blog/sysdig-elk-stack/
/etc/logstash/sysdigg-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获取无效配置
处理系统数据的正确配置文件是什么?
更新:
在修正了=>后,我可以将文本记录为弹性文本。但有一个问题。整个日志行被保存为消息字段,忽略了配置文件中提到的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等单独的字段。
发布于 2016-11-02 06:55:21
指定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}$" }
}
}发布于 2016-11-02 08:38:18
尝试使用grok调试器调试grok。上面的代码示例肯定有一些问题。
https://stackoverflow.com/questions/40359132
复制相似问题