Grok анализирует данные в квадратных скобках

#logging #logstash #logstash-grok

#ведение журнала #logstash #logstash-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:

Основная идея вашего шаблона Grok должна заключаться в том, чтобы пропустить квадратные скобки с обратной косой чертой, как, например [ . После того, как вы пропустили их, вы можете использовать обычный шаблон для сопоставления ваших элементов. Что-то вроде этого будет работать так, как вы хотите:

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

Кроме того, поймите, что у вас есть два пробела между level и [SID , и это может привести к несоответствию вашего шаблона в зависимости от вашей конструкции.

Комментарии:

1. Большое спасибо, я не понял, что это за 2 пробела. Еще раз спасибо

2. Я не знал этого обозначения SID:%{DATA:SID} , я всегда использую %{SYNTAX:SEMANTIC} . Не могли бы вы дать мне больше информации об этом? Спасибо

3. Это просто точно соответствует SID слову в вашем журнале. Это базовое сопоставление символа с символом, поэтому вы можете избежать использования этой части и получить только то, что соответствует %{DATA:SID} . Это также можно пропустить с помощью некоторого регулярного выражения, которое соответствует только тому, что появляется после двоеточия.