json处理器只输出一个字段名,而不输出其他字段名

gdx19jrr  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(2)|浏览(503)

我正在使用一个摄取管道将一些日志注入elasticsearch,我已经使用grok解析了它。我已经设法提取了几乎所有我需要的数据,包括一个字符串( json_data )我需要使用es的json处理器将其转换为json对象。
这就是我要处理的日志:

[2020-09-08T15:00:48.231213+02:00] security.INFO: Description {"ip_address":"123.45.0.1","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0","mobile":false,"base_reference":"demo_referentiel","base":"demo","user_id":"5","login":"admin_abc","type":"security"} []

下面是我的管道的处理器配置:

[
  {
    "grok": {
      "field": "message",
      "patterns": [
        "%{TIMESTAMP_ISO8601:timestamp}]%{SPACE}%{WORD:logger}.%{WORD:log_level}:%{SPACE}%{DATA:description}%{SPACE}{%{GREEDYDATA:json_data}}%{SPACE}%{GREEDYDATA:additional_data}"
      ]
    }
  },
  {
    "json": {
      "field": "json_data",
      "target_field": "json_data_parsed"
    }
  }
]

最后 "json_data" 字段如下所示:

"ip_adress":"123.45.0.1","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0","mobile":false,"base_reference":"demo_referentiel","base":"demo","user_id":"5","login":"admin_abc","type":"security"

这就是问题所在;这个 "json_data_parsed" 字段仅包含第一个字段名。在这个例子中,它只是 ip_address 什么都没有。编辑: Definition 是一个占位符,它通常包含几个单词,用空格隔开
为什么处理器似乎没有正确读取json,我能做些什么来修复它?事先谢谢你的帮助。

qoefvg9y

qoefvg9y1#

我设法找到了解决办法:
在本例中,使用给定的格式,我需要专门为json对象创建一个自定义模式。
我是用电脑做的 pattern_definitions (doc)grok的属性,它允许我防止括号从字符串中排除。
以下是 JSON 模式,基本上是 GREEDYDATA 添加括号的图案:

"pattern_definitions": {
    "JSON": "{.*}"
   }

现在,我完整的grok模式看起来是这样的(由于@val,也简化了):

"%{TIMESTAMP_ISO8601:timestamp}] %{WORD:logger}.%{WORD:log_level}: %{GREEDYDATA:description} %{JSON:json_data} %{GREEDYDATA:additional_data}"

希望这能帮助其他人。

pdkcd3nj

pdkcd3nj2#

好的开始!!我建议做两个改变以使它起作用
一是全部撤除 %{SPACE} 事件和简单地有正常的逐字空间
另一种是两个去掉周围的花括号 %{GREEDYDATA:json_data} 它看起来是这样的:

"processors": [
  {
    "grok": {
      "field": "message",
      "patterns": [
        "%{TIMESTAMP_ISO8601:timestamp}]%{SPACE}%{WORD:logger}.%{WORD:log_level}: %{DATA:description} %{GREEDYDATA:json_data} %{GREEDYDATA:additional_data}"
      ]
    }
  },
  ...
]

你会得到这样的结果:

"_source" : {
      "additional_data" : "[]",
      "logger" : "security",
      "log_level" : "INFO",
      "description" : "Description",
      "message" : """[2020-09-08T15:00:48.231213+02:00] security.INFO: Description {"ip_address":"123.45.0.1","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0","mobile":false,"base_reference":"demo_referentiel","base":"demo","user_id":"5","login":"admin_abc","type":"security"} []""",
      "json_data_parsed" : {
        "user_id" : "5",
        "mobile" : false,
        "ip_address" : "123.45.0.1",
        "login" : "admin_abc",
        "type" : "security",
        "base_reference" : "demo_referentiel",
        "http_user_agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0",
        "base" : "demo"
      },
      "json_data" : """{"ip_address":"123.45.0.1","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0","mobile":false,"base_reference":"demo_referentiel","base":"demo","user_id":"5","login":"admin_abc","type":"security"}""",
      "timestamp" : "2020-09-08T15:00:48.231213+02:00"
    },

相关问题