json - 将 JSON 与 LogStash 一起使用

我在这里疯了。我有一个将日志写入文件的应用程序。每个日志条目都是一个 JSON 对象。我的 .json 文件示例如下所示:

{"Property 1":"value A","Property 2":"value B"}
{"Property 1":"value x","Property 2":"value y"}

我正在拼命地将日志条目放入 LogStash。为此,我创建了以下 LogStash 配置文件:

input {
  file {
    type => "json"
    path => "/logs/mylogs.log"
    codec => "json"
  }
}
output {
  file {
    path => "/logs/out.log"
  }
}

现在,我正在手动将记录添加到 mylogs.log 以尝试使其正常工作。但是,它们在标准输出中显得很奇怪。当我查看 open out.log 时,我看到如下内容:

{"message":"\"Property 1\":\"value A\", \"Property 2\":\"value B\"}","@version":"1","@timestamp":"2014-04-08T15:33:07.519Z","type":"json","host":"ip-[myAddress]","path":"/logs/mylogs.log"}

因此,如果我将消息发送到 ElasticSearch,我不会收到这些字段。相反,我得到了一个困惑的困惑。我需要我的属性(property)仍然是属性(property)。我不希望它们塞进消息部分或输出中。我有一种预感,这与编解码器有关。然而,我不确定。我不确定是否应该更改 logstash 输入配置上的编解码器。或者,如果我应该更改输出配置的输入。

最佳答案

尝试删除 json codec并添加 json filter :

input {
  file {
    type => "json"
    path => "/logs/mylogs.log"
  }
}
filter{
    json{
        source => "message"
    }
}
output {
  file {
    path => "/logs/out.log"
  }
}

您不需要 json 编解码器,因为您不想解码源 JSON,但您想过滤输入以仅在 @message 字段中获取 JSON 数据。

https://stackoverflow.com/questions/22941739/

相关文章:

json - Jackson Scala 模块的小例子?

json - Jackson:有没有办法将 POJO 直接序列化为 treemodel?

javascript - 如何向(JSON)对象的原型(prototype)添加方法?

python - 无法解析 JSON 文件中的 TAB

java - 在spring-mvc中将json解析为java对象

java - Jackson JSON序列化,通过级别定义避免递归

c# - 将 .NET Dictionary 序列化为 JSON 键

php - 无法安装 Composer - 缺少 json 扩展名

xml - Chrome 开发者工具响应/预览选项卡 "Pretty Print"或 "Format

c# - 返回 HttpResponseMessage 的 Web API 最佳方法