我开始使用logstash收集日志.当前设置包括一台Java服务器,该服务器使用logback作为日志记录机制和logstash-logback-encoder,以纯净的JSON表示形式输出数据.基础工作正常.
我想将JSON格式的其他数据分隔在单独的字段中(因此JSON的每个键最终都位于其自己的字段中). logstash-logback-encoder提供了一种在json_mesage字段中输出此类数据的机制.但是,此JSON字符串放置在JSON数组中.请参阅此处的格式化示例,以更好地阅读.
{
"@timestamp":"2014-03-25T19:34:11.586+01:00",
"@version":1,
"message":"Message{\"activeSessions\":0}",
"logger_name":"metric.SessionMetrics",
"thread_name":"scheduler-2",
"level":"INFO",
"level_value":20000,
"HOSTNAME":"stage-01",
"json_message":["{\"activeSessions\":0}"],
"tags":[]
}
我尝试使用简单的JSON过滤器解析传入的JSON.在这里查看我的配置:
input {
lumberjack {
codec => "json"
}
}
filter {
json {
source => "json_message"
}
}
output {
elasticsearch {
}
}
但是,这导致logstash日志中出现以下错误.数组中的JSON字符串根本无法处理.
{:timestamp=>"2014-03-25T19:43:13.232000+0100",
:message=>"Trouble parsing json",
:source=>"json_message",
:raw=>["{\"activeSessions\":0}"],
:exception=>#,
:level=>:warn}
有没有一种方法可以在解析之前从数组中提取JSON字符串?任何帮助是极大的赞赏.谢谢.