java - 在 logstash 中使用数组作为 JSON 过滤字段

标签 java filter logback logstash logstash-logback-encoder

我开始使用 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 字符串?任何帮助是极大的赞赏。谢谢。

最佳答案

实际上,它非常简单,并且按照常见的编程语言进行操作。不过,我没有在文档中找到答案。

只需为过滤器中的字段添加索引:

filter {
  json {
    source => "json_message[0]"
  }
}

关于java - 在 logstash 中使用数组作为 JSON 过滤字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643932/

相关文章:

scala - SLF4J 初始化 - 替代记录器

java - 在fxml中初始化Spinner控件

Java:定义与类相关的方法的最佳实践

java - 字符串和内存管理

R:如何匹配或过滤字符串相同但顺序不同的变量?

wpf - 使用LINQ vs CollectionView过滤集合

linux - 无法找到错误的位置

java - 在从MATLAB运行的Java代码中使用eclipselink

javascript - 在过滤器内部使用时,Split 没有做任何事情

java - Logback 滚动文件附加器不起作用