这是我在服务器中的感知日志:
{"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
现在我要添加一个名为&#34的字段;错误&#34;它只包含关键&#34; http://link.com&#34;的信息。这意味着,如果过滤器在&#34; payload.check.output&#34;中匹配CheckHTTP CRITICAL;字段,它会将错误链接添加到新的&#34;错误&#34;字段
这是我在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 :(得分: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
过滤器自行编码。所以,下次你可以自己尝试一下。好好享受。
希望这可以帮到你。