当前位置: 首页 > 知识库问答 >
问题:

在Logstash中解析JSON事件

公良琛
2023-03-14

我的登录格式如下,它是一个带有嵌套字段的普通json。

{
    "level": "info",
    "message": {
        "req": {
            "headers": {
                "host": "localhost:8080",
                "connection": "keep-alive",
                "x-forwarded-for": "192.168.1.1, 1.1.1.1",
                "x-forwarded-proto": "http"
            },
            "url": "/products?userId=493d0aec-a9a7-42a3",
            "method": "GET",
            "originalUrl": "/products?userId=493d0aec-a9a7-42a3",
            "params": {
                "0": "/products"
            },
            "query": {
                "userId": "493d0aec-a9a7-42a3"
            },
            "body": ""
        },
        "res": {
            "headers": {
                "traceid": "ac586e4e924048",
                "x-correlation-id": "57d7920d-b623-48f8",
                "content-type": "application/json;charset=UTF-8",
                "content-length": "2",
                "date": "Fri, 08 Mar 2019 09:55:45 GMT",
                "connection": "close"
            },
            "statusCode": 200,
            "body": "[]"
        },
        "gateway": "internal"
    },
    "correlationId": "57d7920d-b623-48f8",
    "timestamp": "2019-03-08T09:55:45.833Z"
}

如何使用Filebeat和Logstash正确地解析它,以将Kibana中的所有json字段视为单独的(已解析的)字段?我在“message”字段中遇到了一个问题,它嵌套了json字段。我解析一个在“message”中有字符串的事件没有问题,但不是JSON。

我的尝试:

filebeat.inputs:
- type: stdin
  json.keys_under_root: true
  json.add_error_key: true
{
    "req" => {
        "originalUrl" => "/offers", "params" => {
            "0" => "/offers"
        }, "query" => {}, "body" => "", "headers" => {
            "accept-encoding" => "gzip", "user-agent" => "okhttp/3.8.1", "x-consumer-id" => "f2a6e4cd-2224-4535
json {   
    source => "message"    
    target => "message_json"    
} 

[2019-03-08T09:55:47,084][WARN][logstash.outputs.ElasticSearch]无法将事件索引到ElasticSearch。{:status=>400,:action=>[“index”,{:_id=>nil,:_index=>“filebeat-6.5.0-2019.03.08-sdx”,:_type=>“doc”,:routing=>nil},#],:response=>{“index”=>{“_index”=>“filebeat-6.5.0-2019.03.08-sdx”,“_type”=>“doc”,“id”=>“ERS6xGKBGE-US7A6MVT”,“status”=>400,“error”=>{“type”=>“[json.message]类型[keyword]”,“caused_by”=>{“type”=>“illegal_state_exception”,“reason”=>“无法在1:461获取START_OBJECT上的文本”}}}}[2019-03-08t09:55:47,085][WARN][logstash.outputs.elasticsearch]无法将事件索引到elasticsearch。{:status=>400,:action=>[“index”,{:_id=>nil,:_index=>“filebeat-6.5.0-2019.03.08-sdx”,:_type=>“doc”,:routing=>nil},#],:response=>{“index”=>{“_index”=>“filebeat-6.5.0-2019.03.08-sdx”,“_type”=>“doc”,“id”=>“ehs6xgkbge-us7a6mvt”,“status”=>400,“error”=>{“type”=>“[json.message]类型[keyword]”,“caused_by”=>{“type”=>“illegal_state_exception”,“reason”=>“无法在1:461获取START_OBJECT上的文本”}}}}

如果“message”字段是字符串(不是json),这个过滤器对我来说很好。

你知道如何解析“消息域”中的嵌套json吗?

共有1个答案

祁奇略
2023-03-14

我有问题要通过logstash来解析json。

我在这个问题上挣扎了一段时间。并未能解入logstash。

但幸运的是,我们已经在elasticsearch中吸收了node。

{
    "description": "Parse JSON log",
    "processors": [
      {
        "json": {
          "field": "message",
          "target_field": "message-json"
        }
      },
      {
        "remove": {
          "field": "message"
        }
      },
      {
        "append": {
          "field": "tags",
          "value": [
            "isjsonlog"
          ]
        }
      }
    ],
    "on_failure": [
      {
        "append": {
          "field": "tags",
          "value": [
            "nonjsonlog"
          ]
        }
      }
    ]
  }
elasticsearch {
    hosts => [ localhost ]
    index => "filebeat-%{+YYYY.MM.dd}"
    manage_template => false
    pipeline => "your_pipeline_name"
  }
 output.elasticsearch:
    ....
    pipelines:
       - pipeline: "your pipeline name"
          when:
            contains:
               message: "{"
 类似资料:
  • 问题内容: 当我在Kibana中看到结果时,我发现JSON中没有字段,而且,该字段仅包含。 是否可以解析json中的字段并将其显示在Kibana中?我有以下配置: 以及以下JSON文件: 问题答案: 是。您需要在配置中添加一个过滤器,如下所示。 在这里的文档中对此进行了很好的描述 编辑 json编解码器似乎不喜欢传入数组。单个元素与此配置一起工作: 输入: Logstash结果: } 现在有了一个

  • 问题内容: 我有一个格式的JSON: 我正在尝试使用logstash解析此JSON。基本上,我希望Logstash输出是可以使用kibana进行分析的key:value对的列表。我认为可以开箱即用。从大量的阅读中,我了解到我必须使用grok插件(我仍然不确定json插件的用途)。但是我无法获得所有领域的事件。我收到多个事件(甚至对于JSON的每个属性都一个)。像这样: 我应该使用多行编解码器还是j

  • 问题内容: 我已经来了一段时间,感觉好像logstash中的JSON过滤器正在为我删除数据。我最初是从https://www.digitalocean.com/community/tutorials/how- to-install-elasticsearch-logstash-and-kibana-elk-stack-on- ubuntu-14-04 跟随该教程的 我进行了一些更改,但基本相同。我

  • Logstash 和过去很多日志收集系统比,优势就在于其源码是用 Ruby 写的,所以插件开发相当容易。现在已经有两百多个插件可供选择。但是,随之而来的问题就是:大多数框架都用 Java 写,毕竟做大规模系统 Java 有天生优势。而另一个新生代 fluentd 则是标准的 Ruby 产品(即 Matz’s Ruby Interpreter)。logstash 为什么选用 JRuby 来实现,似乎

  • 问题内容: 我的s3存储桶中有多行XML文件(约800行),我想在Elasticsearch中对其进行索引,但无法在logstash中对其进行解析。字段有时为空,因此无法手动分析文件。 我的xml看起来像: 在我的输入中,我有配置: 在我的过滤器中,以下配置: 问题答案: 好的,看起来好像是问题所在,您对多行编解码器和XML过滤器感到困惑。 我可以建议您设置多行: 这将采用 不 包含此标记的任何行

  • 问题内容: 我有一个看起来像这样的日志文件(简化) Logline样本 我想提取 数据中 包含的json 并创建两个字段,一个用于名字,一个用于姓氏。但是,我得到的输出是这样的: 如你看到的 那不是我所需要的,我需要在kibana中为firstname和lastname创建字段,但是logstash不会使用json过滤器提取字段。 LogStash配置 非常感谢任何帮助,我敢肯定我错过了一些简单的