Регулярное выражение для анализа журнала с помощью fluentd

Я пытаюсь разобрать журнал приложений с каким-то регулярным выражением. Я смог разобрать метку времени. Но после этого, если я попытаюсь добавить больше выражений в формат fluentd, первый атрибут «время» исчезнет, ​​дав мне исключение. И никакие записи не совпадают.

Я использую Fluentular.

Сообщение журнала будет примерно таким:

Date=[2018-04-11 08:44:30,219] Thread=[20] Level=[INFO] EventId=[2] Message=[Request finished in 1.1825ms 200 text/plain; charset=utf-8]

Это первое регулярное выражение с первым ключом (есть проблема с миллисекундами, но это не важно). В атрибутах я вижу ключ Time с этим значением.

Первое регулярное выражение в порядке

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

Регулярное выражение со вторым ключом

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

Спасибо

ОБНОВИТЬ:

на основе комментариев теперь у меня есть это выражение

(?<time>\[(?<time>[^\]\[]+)])\s+(?<Thread>\S+)\s+(?<Level>\S+)\s+(?<EventId>\S+)\s+(?<Message>[^ ].*$)

Регулярное выражение 3

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

Ключевая нить Значение Thread = [20]

Я не знаю, можно ли улучшить это выражение, чтобы избежать

"Тема = []"

ОБНОВЛЕНИЕ 2:

Чтобы провести тест, я установил fluentd через apt с плагином и провел несколько тестов, и моя окончательная настройка выглядит примерно так:

<parse>
        @type kv
        time_key Date
        types Date:time:%Y-%m-%d %H:%M:%S,Thread:integer,Level:string,EventId:integer,Message:string
        kv_delimiter /\]\s+/
        kv_char "=["

Кажется, теперь лучше:

2018-04-11 08:44:30.219000000 +0200 kv_log: {"Thread":20,"Level":"INFO","EventId":2,"Message":"Request finished in 1.1825ms 200 text/plain; charset=utf-8]"}

Что ожидается от второго регулярного выражения?

revo 11.04.2018 12:21

Вы должны преобразовать поисковые пути в потребляющие шаблоны, полагаясь на захват. Например. \[(?<time>[^\]\[]+)]\s+(?<method>\S+). Ваш шаблон не работает, потому что (?=\]) не использует ], и вы все равно должны поместить его после группы захвата. Какая у вас здесь конечная цель?

Wiktor Stribiżew 11.04.2018 12:25

По сути, это анализ различных записей журнала, получение данных даты, потока, уровня, идентификатора события и, наконец, сообщения. Таким образом, Splunk получит все данные, проанализированные в разных записях или атрибутах.

Rubendob 11.04.2018 13:06
0
3
2 438
1

Ответы 1

Я бы предложил анализировать пары ключ-значение с помощью Плагин парсера пар ключ-значение для Fluentd.

Параметры

  • kv_delimiter /\]\s+(?=\w+=)/ (или просто /\]\s+/) (см. как здесь делятся пары kvp)
  • kv_char "=[" (строка будет использоваться для отделения ключа от значения)

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