【问题标题】:Analyze sensu log with logstash使用 logstash 分析 sensu 日志
【发布时间】:2015-01-21 03:22:11
【问题描述】:

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

{"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 parse来查看。

并且在通过logstash过滤器之后,它会在像这个图像这样的字段中解析:

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

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

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

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

但是什么都没有发生

【问题讨论】:

    标签: filter logstash sensu


    【解决方案1】:

    您可以尝试使用此配置访问嵌套的 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
        }
    }
    

    上面的配置可以解析出错误链接并插入到error字段。

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

    希望对你有帮助。

    【讨论】:

    • 谢谢 Ben Lim,但它会在错误字段中显示所有 3 个链接(我已经尝试过这个配置),我的目标是拆分它,错误字段只包含一个错误链接。因为它只是在 1 个链接中发生错误,并且在某些时候还可以保留 2 个链接 i.imgur.com/uFnzxb0.jpg 显示 3 个链接
    • 你好,金。我已经更新了答案。请再试一次。我想它可以回答你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多