пользовательский шаблон для фильтрации строк при использовании телеграфа inputs.logparser.grok

Я пытаюсь отфильтровать определенные слова в файле журнала с помощью регулярного выражения, цель состоит в том, чтобы любая строка журнала, соответствующая регулярному выражению в custom_pattern, попадала в influxdb, строки журнала, которые не соответствуют, будут игнорироваться. Когда я тестировал регулярное выражение, оно работало даже на игровой площадке golang (https://play.golang.org/p/_apzOVwwgl2). Но когда я использую его в файле конфигурации телеграфа, как показано ниже, он не работает, вход в influxdb отсутствует. Есть ли что-то, что мне не хватает, что следует добавить в конфигурацию?

Я протестировал регулярное выражение на http://grokdebug.herokuapp.com/ и https://play.golang.org/p/_apzOVwwgl2 это работает, но не в custom_patterns в [inputs.logparser .грок].

Вот мой конфиг грока

[[inputs.logparser]]
   files = ["/var/log/test1"]
   from_beginning = true

   [inputs.logparser.grok]
      patterns = ["%{FAIL_LOG}"]
      custom_patterns = '''FAIL_LOG ^.*?\b(multipathd?)\b.*?\b(failed|failing|(remaining active paths))\b.*?$'''

Предполагается, что шаблон соответствует первым двум строкам журнала, как показано ниже, и игнорирует третью строку.

Oct 29 03:29:03 dc-as-5p multipath: checker failed interface 8:0 in map 150gb
Oct 29 03:29:03 dc-as-5p multipathd: checker failing interface 8:0 in map 150gb
Oct 29 03:26:03 dc-as-5p link: checker down remaining active paths interface 8:0 in map 150gb

Что я делаю не так?


person tfalade    schedule 29.10.2019    source источник
comment
Когда я изменил шаблон на %{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME} (?<prog>multipathd?): (?<message>(.*(failed|failing|(remaining active paths)).*)), я все еще мог сопоставить первые две строки журнала, как и ожидалось, без соответствия третьей строке журнала. Однако, когда я использую этот шаблон внутри inputs.logparser.grok, он все равно не работает, входные данные не записываются в influxdb. Помогите, пожалуйста!   -  person tfalade    schedule 31.10.2019


Ответы (2)


Если вы запустите телеграф с флагом --debug, вы увидите, что у него есть проблема с анализом журналов.

$ telegraf --debug --config ./telegraf.conf
...
2019-11-17T05:01:07Z D! Grok no match found for: "Oct 29 03:29:03 dc-as-5p multipath: checker failed interface 8:0 in map 150gb"
2019-11-17T05:01:07Z D! Grok no match found for: "Oct 29 03:29:03 dc-as-5p multipathd: checker failing interface 8:0 in map 150gb value=3"
2019-11-17T05:01:07Z D! Grok no match found for: "Oct 29 03:26:03 dc-as-5p link: checker down remaining active paths interface 8:0 in map 150gb"

Это сообщение об ошибке вводит в заблуждение, потому что, как показало ваше тестирование, ваш шаблон регулярного выражения верен. Настоящая проблема заключается в том, что вы не включили значение для регистрации в своем регулярном выражении.

Версия вашего регулярного выражения для хранения сообщения об ошибке и метки времени может быть:

    custom_patterns = '''FAIL_LOG %{SYSLOGTIMESTAMP:timestamp}.*(multipath).?: %{GREEDYDATA:message:string}'''

Шаблон значения можно найти между ${}. Дополнительные готовые шаблоны можно найти здесь. Это устранит первые две ошибки выше. Их результаты можно увидеть с помощью флага --test.

$telegraf --test --config ./telegraf.conf
...
> logparser,host=pop-os,path=./test1 message="checker failed interface 8:0 in map 150gb",timestamp="Oct 29 03:29:03 " 1573968174161853621

По какой-то причине флаг --test не всегда выдавал результаты. Мне пришлось бы запускать команду несколько раз, прежде чем получить приведенный выше вывод.

person NikNye    schedule 17.11.2019

Я резюмировал, как я заставил работать пользовательский анализ журнала в Telegraf/GROK, в следующем посте: Синтаксический анализ пользовательского журнала с помощью Telegraf/Tail Plugin/GROK. Возможно, это поможет вам или другим решить подобные проблемы.

Возможно, другим, читающим это в 2020 году, будет интересно, что анализатор журналов Telegraf теперь заменен на Плагин хвоста. Пример в моем посте выше.

PS: Мой подход к вашей проблеме состоял бы в том, чтобы вообще не использовать регулярное выражение, а определить три разных шаблона для каждой из строк. Это, конечно, будет работать только в том случае, если у вас небольшое количество возможных ошибок/строк журнала.

person Eric Clements    schedule 25.06.2020