使用logstash分析sensu日志

Analyze sensu log with logstash

这是我在服务器上的 sensu 日志:

{"timestamp":"2015-01-21T09:43:21.387501+0700","level":"info","message":"publishing check result","payload":{"client":"local.com","check":{"name":"instance_xxx_check","issued":1421808200,"command":"xargs -I{} sh -c '/opt/sensu/embedded/bin/ruby /etc/sensu/plugins/check-http.rb -u {}' < /etc/sensu/conf.d/live/list/xxx.txt","handlers":["default","mailer"],"interval":60,"subscribers":["live"],"executed":1421808200,"duration":1.317,"output":"CheckHTTP OK: 200, http://link1.com\nCheckHTTP CRITICAL: Request error: http://link2.com\nCheckHTTP OK: 200, http://link3.com\n","status":123}}}

此为json格式,可使用json解析查看

并且在通过 logstash 过滤器之后,它将解析为如下图所示的字段:

http://i.stack.imgur.com/4KA0i.jpg

现在我想添加一个名为 "error" 的字段,它只包含关键“http://link.com”的信息。这意味着,如果过滤器在 "payload.check.output" 字段中匹配 CheckHTTP CRITICAL,它会将错误 [​​=33=] 添加到新的 "error" 字段

这是我在 logstash 过滤器中的配置:

if [type] == "sensu" {
            grok {
                match => [ "payload.check.output", "%{CISCO_REASON}: Request error: %{URI}" ]
            }
            mutate {
                add_field => { "error" => "%{payload.check.output}" }
                remove_field => [ "timestamp" ]
            }
        }

但什么也没发生

您可以尝试使用此配置访问嵌套的 json 消息。

input {
    stdin{}
}

filter {
    json {
            source => "message"
    }
    if [payload][check][output] =~ /CheckHTTP CRITICAL/
    {
        ruby
        {
            code => "
                errormsg = '';
                msg = event['payload']['check']['output'];
                splitmsg = msg.split(/\n/)
                for splitlog in splitmsg
                     if splitlog.include? 'CheckHTTP CRITICAL'
                         errormsg = errormsg + splitlog.split('error: ')[1];
                     end
                end
                event['error'] = errormsg
            "
        }
    }
}


output {
    stdout {
            codec => rubydebug
    }
}

以上配置可以解析出错误link并插入到error字段。

如果您发现您的需求难以通过logstash插件实现,您可以尝试使用ruby过滤器自己编码。所以,下次你可以自己尝试一下。好好享受。

希望对您有所帮助。