将sysdig数据导入弹性

时间:2016-11-01 11:27:32

标签: logstash

我正在使用我从本文中获得的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数据的正确配置文件是什么?

更新

纠正=>我可以将文本记录为弹性。但有一个问题。整个日志行被保存为消息字段,忽略配置文件中提到的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等的单独字段。

2 个答案:

答案 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。绝对是上面的代码示例的一些问题。