当前位置:  开发笔记 > 前端 > 正文

在Logstash中解析JSON

如何解决《在Logstash中解析JSON》经验,为你挑选了1个好方法。

我有一些Log4J2生成的日志文件.我正在使用log4j2.xml配置文件中的JSONLayout将日志输出到.json文件中.我的JSONLayout定义如下:


当日志输入到我的机器上的日志文件中时,它们会一个接一个地附加,并在logs.log中看起来像这样:

  {
    "logger":"com.mycompany.myLogger",
    "timestamp":"1396792374326",
    "level":"ERROR",
    "thread":"pool-2-thread-2",
    "message":"System: unable to perform action",
    "throwable":"java.lang.NullPointerException\\n\tat com.myCompany.MyClass $.java:432)\\n\tat java.lang.Thread.run(Thread.java:744)\\n"
  },

我正在尝试构造此JSON,以便我可以从ElasticSearch查询它.在此过程中,我正在尝试向所有记录添加自定义字段.为此,我使用以下内容:

input {
  file {
    type => "json"
    path => "/var/logs/myApp/logs.log"
  }
}
filter {
  json {
    add_tag => [ "HardcodedTagName"]
    source => "message"
  }
}
output {
  elasticsearch {
    protocol => "http"
    codec => "json"
    host => "[myServerAddress]"
    port => "9200"
  }
}

奇怪的是,我的自定义标签似乎没有被添加.与此同时,我真的想将我的JSON分解为我可以在ElasticSearch中查询的字段.我想查询的内容清晰可见.他们是:

水平

信息

时间戳

然而,我似乎无法获得这些信息.当我在Kibana中看到JSON记录时,我只看到如下内容:

{
  "_index": "logstash-2014.04.07",
  "_type": "json",
  "_id": "tG-s6-5pSnq5HZwLhM6Dxg",
  "_score": null,
  "_source": {
    "message": "    \"message\":\"System: unable to perform action\"\r",
    "@version": "1",
    "@timestamp": "2014-04-07T18:01:38.739Z",
    "type": "json",
    "host": "ip-MyipAddress",
    "path": "/var/logs/myApp/logs.log"
  },
  "sort": [
    1396893698739,
    1396893698739
  ]
}

最令我惊讶的是,日志级别甚至都没有.线程信息也不是.我很惊讶我找不到使用过滤器的Log4J示例的博客文章.任何帮助都是真诚的感谢!



1> Ben Lim..:

您不需要使用json过滤器.您可以在输入中指定编解码器格式.

input {
    file {
       type => "json"
       path => "/var/logs/myApp/logs.log"
       codec => json
    }
}

Logstash会自动将您的日志解析为json格式并添加相应的字段.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有