2015-01-21 44 views
0

这是我意义上的日志服务器:分析意义上的记录与logstash

{"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

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

这是我在logstash过滤器配置:

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

但没有任何事情发生

回答

0

您可以尝试使用此配置来访问嵌套的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筛选器自行编码。所以,下次你可以自己尝试一下。好好享受。

希望这可以帮助你。

+0

谢谢,本林,但它显示错误字段中的所有3链接(我试试这个配置),我的目标是分裂它,错误字段只包含单个错误链接。因为它只是发生在1链接错误和2链接保持在某种程度上确定 http://i.imgur.com/uFnzxb0.jpg 3链接显示 – Jin 2015-01-21 08:02:29

+0

嗨,金。我已经更新了答案。请再试一次。我认为它可以回答你的问题。 – 2015-01-21 09:23:43