Подбирайте двойные кавычки и получайте содержимое используя grok

У меня есть журнал с моего сервера в следующем формате, я начал вставлять журналы на мой сервер ELK и застрял в соответствии шаблону журнала.

2018-04-20T21:51:13.677291071-0400 level=7 [Common] [Common] [ID=22] [0001232700011fde] [00943 01248] [Thread1] "[key1:N/A key2:0 key3:N/A]: Completed flow"

Я был в состоянии соответствовать до Thread1как я могу получить значения key1 который находится внутри двойных кавычек.

В настоящее время я использую шаблон ниже и храню все сообщение в одной строке.

%{TIMESTAMP_ISO8601:logTimestamp} level=%{NUMBER:severity} \[Common\] \[Common] \[ID=%{BASE10NUM:logId}] \[%{WORD:taskId1}] \[%{DATA:taskId2}] \[%{DATA:taskName}]%{GREEDYDATA:logString}

Я использую http://grokdebug.herokuapp.com/ для проверки синтаксиса, есть ли какая-либо другая бесплатная утилита, которая предоставляет шаблоны grok на основе входной строки?

1 ответ

Вы можете просто указать двойные кавычки вне grok шаблон, как это,"\[key1:%{DATA:key1}

Это будет соответствовать key1 также,

%{TIMESTAMP_ISO8601:logTimestamp} level=%{NUMBER:severity} \[Common\] \[Common] \[ID=%{BASE10NUM:logId}] \[%{WORD:taskId1}] \[%{DATA:taskId2}] \[%{DATA:taskName}] "\[key1:%{DATA:key1}

Проблема с вышеуказанным подходом состоит в том, что он не будет соответствовать N/A из-за косой черты. Лучше всего написать собственный шаблон, чтобы избежать / из вашего key1 значение, если key является N/A а также принять другой символ для этого поля,

"\[key1:(?<key1>(N\/A|\w+))

Полная картина с key1 будет тогда,

%{TIMESTAMP_ISO8601:logTimestamp} level=%{NUMBER:severity} \[Common\] \[Common] \[ID=%{BASE10NUM:logId}] \[%{WORD:taskId1}] \[%{DATA:taskId2}] \[%{DATA:taskName}] "\[key1:(?<key1>(N\/A|\w+))

и он будет производить следующий вывод,

{
  "logTimestamp": [
    [
      "2018-04-20T21:51:13.677291071-0400"
    ]
  ],
  "YEAR": [
    [
      "2018"
    ]
  ],
  "MONTHNUM": [
    [
      "04"
    ]
  ],
  "MONTHDAY": [
    [
      "20"
    ]
  ],
  "HOUR": [
    [
      "21",
      "04"
    ]
  ],
  "MINUTE": [
    [
      "51",
      "00"
    ]
  ],
  "SECOND": [
    [
      "13.677291071"
    ]
  ],
  "ISO8601_TIMEZONE": [
    [
      "-0400"
    ]
  ],
  "severity": [
    [
      "7"
    ]
  ],
  "BASE10NUM": [
    [
      "7"
    ]
  ],
  "logId": [
    [
      "22"
    ]
  ],
  "taskId1": [
    [
      "0001232700011fde"
    ]
  ],
  "taskId2": [
    [
      "00943 01248"
    ]
  ],
  "taskName": [
    [
      "Thread1"
    ]
  ],
  "key1": [
    [
      "N/A"
    ]
  ]
}

надеюсь это поможет.

Другие вопросы по тегам