Grok解析方括号内的数据

时间:2019-03-15 16:32:27

标签: logging logstash-grok grok

用grok解析此类日志的最佳方法是什么?

2019-03-15 14:42:38,910 INFO  [SID:6cd1c3cc-7fb0-4a06-8d4d-e125382568ca] [CID:60c24e3e-c8f9-43e4-bedf-59e861bfabf9] [http-bio-8080-exec-3] [TariffRuleServiceImpl.java:569] no approach by ShouldAddApproachToFixedPrice checkbox : false

我想得到这样的结果:

{
  "date": [
    "19-03-15"
  ],
  "time": [
    "14:42:38,910"
  ],
  "level": [
    "INFO"
  ],
 "SID": [
    "6cd1c3cc-7fb0-4a06-8d4d-e125382568ca"
  ],
 "CID": [
    "60c24e3e-c8f9-43e4-bedf-59e861bfabf9"
  ],
 "thread": [
    "http-bio-8080-exec-3"
  ],
 "class": [
    "TariffRuleServiceImpl.java:569"
  ],
 "message": [
    "no approach by ShouldAddApproachToFixedPrice checkbox : false"
  ]
}

但是我被困在这里:%{DATE:date} %{TIME:time} %{WORD:level} ...?如何在[...]内部获取数据?非常感谢

1 个答案:

答案 0 :(得分:0)

Grok模式的主要思想应该是跳过带有反斜杠的方括号,例如\[。跳过它们后,您可以使用常规模式来匹配您的元素。像这样的东西会随心所欲地工作:

%{DATE:date} %{TIME:time} %{WORD:level}  \[SID:%{DATA:SID}\] \[CID:%{DATA:CID}\] \[%{DATA:thread}] \[%{DATA:class}] %{GREEDYDATA:message}

还要认识到level[SID之间有两个空格,这可能会使您的模式不匹配,具体取决于您的构造。