Различать число и алфавит в фильтре Grok - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть две строки журнала, подобные этой:

[2020-04-01][14:57:31]E: Step 8/13: Main workflow (Python) (8m:48s)
[2020-04-01][15:14:02]W: Cannot find Latest build with tag: 'ArtifactSizeBaseline' to calculate metric 'total artifacts size'.

и соответствующая строка, подобная этой

%{DATE:EventDate}\]\[%{TIME:EventTime}\](\s+)?%{WORD:Loglevel}:(\s+)?%{DATA:Step}:(\s+)%{GREEDYDATA:EventMessage}

Мой вывод должен выглядеть так для первого оператора:

{'EventDate':'2020-04-01', 'EventTime':'14:57:31', 'LogLevel':'E', 'Step':'Step 8/13', 'EventMessage':'Main workflow (Python) (8m:48s)'}

В идеале второй логлайн не содержит шага. Таким образом, вывод должен выглядеть следующим образом:

{'EventDate':'2020-04-01', 'EventTime':'15:14:02', 'LogLevel':'W', 'Step':'', 'EventMessage':'Cannot find Latest build with tag: 'ArtifactSizeBaseline' to calculate metric 'total artifacts size'.'}

Но что я получаю, это

{'EventDate':'2020-04-01', 'EventTime':'15:14:02', 'LogLevel':'W', 'Step':'Cannot find Latest build with tag: ', 'EventMessage':''ArtifactSizeBaseline' to calculate metric 'total artifacts size'.'}

Есть ли способ для строки совпадения различать эти две строки журнала?

1 Ответ

2 голосов
/ 09 апреля 2020

Это регулярное выражение соответствует обеим строкам:

%{DATE:EventDate}\]\[%{TIME:EventTime}\](\s+)?%{WORD:Loglevel}:\s+((?=Step\s\b)%{DATA:Step}:)?\s?%{GREEDYDATA:EventMessage}

Он использует положительный прогноз, а также необязательное извлечение данных из DATA, если за словом «Step» следуют пробел и число.

Протестировано для обеих строк на этом сайте:

https://grokconstructor.appspot.com/do/match

Я надеюсь, что смогу вам помочь.

...