Подбирайте двойные кавычки и получайте содержимое используя 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"
]
]
}
надеюсь это поможет.