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

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

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

  1. [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"} []

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

  1. [
  2. {
  3. "grok": {
  4. "field": "message",
  5. "patterns": [
  6. "%{TIMESTAMP_ISO8601:timestamp}]%{SPACE}%{WORD:logger}.%{WORD:log_level}:%{SPACE}%{DATA:description}%{SPACE}{%{GREEDYDATA:json_data}}%{SPACE}%{GREEDYDATA:additional_data}"
  7. ]
  8. }
  9. },
  10. {
  11. "json": {
  12. "field": "json_data",
  13. "target_field": "json_data_parsed"
  14. }
  15. }
  16. ]

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

  1. "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 添加括号的图案:

  1. "pattern_definitions": {
  2. "JSON": "{.*}"
  3. }

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

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

希望这能帮助其他人。

pdkcd3nj

pdkcd3nj2#

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

  1. "processors": [
  2. {
  3. "grok": {
  4. "field": "message",
  5. "patterns": [
  6. "%{TIMESTAMP_ISO8601:timestamp}]%{SPACE}%{WORD:logger}.%{WORD:log_level}: %{DATA:description} %{GREEDYDATA:json_data} %{GREEDYDATA:additional_data}"
  7. ]
  8. }
  9. },
  10. ...
  11. ]

你会得到这样的结果:

  1. "_source" : {
  2. "additional_data" : "[]",
  3. "logger" : "security",
  4. "log_level" : "INFO",
  5. "description" : "Description",
  6. "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"} []""",
  7. "json_data_parsed" : {
  8. "user_id" : "5",
  9. "mobile" : false,
  10. "ip_address" : "123.45.0.1",
  11. "login" : "admin_abc",
  12. "type" : "security",
  13. "base_reference" : "demo_referentiel",
  14. "http_user_agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0",
  15. "base" : "demo"
  16. },
  17. "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"}""",
  18. "timestamp" : "2020-09-08T15:00:48.231213+02:00"
  19. },
展开查看全部

相关问题