我开始用logstash
. 当前设置包括一个使用logback
日志机制的 Java 服务器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 {
<snipped>
codec => "json"
}
}
filter {
json {
source => "json_message"
}
}
output {
elasticsearch {
<snipped>
}
}
但是,这会导致 logstash 日志中出现以下错误。数组中的 JSON 字符串根本无法处理。
{:timestamp=>"2014-03-25T19:43:13.232000+0100",
:message=>"Trouble parsing json",
:source=>"json_message",
:raw=>["{\"activeSessions\":0}"],
:exception=>#<TypeError: can't convert Array into String>,
:level=>:warn}
有没有办法在解析之前从数组中提取 JSON 字符串?任何帮助是极大的赞赏。谢谢。