Отрицание от символа до предыдущего пробела - PullRequest
1 голос
/ 24 марта 2019

Попытка использовать фильтры logstash grok (oniguruma regex) для фильтрации некоторых журналов.Для записи в журнале, которая выглядит следующим образом:

2019-03-24 17:57:14,202 p=19455 u=root |  TASK [this is the task name msg=Debug message] ************************

Я написал этот фильтр:

%{DATE:date}\s%{TIME:time}\sp=(?<id>[\d]+)\su=(?<user>[\w]+)\s\|\s*TASK\s*\[(?<task>[^=]*)

Сложность для меня заключается в том, что мне нужно точно подобрать метку «задачи»это: «это имя задачи».В настоящее время "задача" соответствует "" это имя задачи msg ". И, конечно, это только пример, а сами слова меняются от примера к примеру.

Это журнал журнала, который дляпо какой-то причине смешивается имя задачи и сами задачи в одной строке журнала и используются только пробелы для их разделения. Во всех случаях я знаю, что имя задачи завершено и детали задачи отображаются из-за символа "=".

Поэтому мне нужно будет сопоставить, пока не будет найдено "=", а затем отменить слово за ним, в данном случае это "msg" (в зависимости от задачи это слово также может измениться).

Есть идеи, как этого добиться? Спасибо!

1 Ответ

1 голос
/ 24 марта 2019

Вы можете использовать

%{DATE:date}\s%{TIME:time}\su=(?<user>\w+)\s\|\s*TASK\s*\[(?<task>[^\]=]*)\s\w+=

См. Демоверсию regex

Интересует часть (?<task>[^\]=]*)\s\w+=:

  • (?<task>[^\]=]*) - Группа с именем "task": [^\]=]* соответствует любым 0+ символам, кроме ] и =
  • \s - один пробел
  • \w+ - 1+ слово символов
  • = - = char
...