Грок-фильтр для счетчика времени ЧЧ: ММ

Я новичок в ELK и Grok-фильтрации, и я борюсь с синтаксическим анализом этого конкретного шаблона в моем фильтре Grok.

Я использовал отладчик grok, чтобы попытаться решить эту проблему, но, хотя мне нравится этот инструмент, я просто получаю смущает нестандартные выкройки.

В конце концов, я надеюсь проанализировать множество файлов журналов, отправленных filebeat в logstash, затем отправить проанализированные журналы в elasticsearch и отобразить с помощью kibana или другого подобного инструмента визуализации.

Строки, которые мне нужно проанализировать, следуют следующему шаблону:

1310 2017-01-01 16:48:54 [325:51] [326:49] [359:57] Some log info text
  • Первые четыре цифры - это идентификатор типа журнала, который будет использоваться для группировки. Я назвал поле «LogLineID».
  • Дата имеет формат ГГГГ-ММ-ДД ЧЧ: ММ: СС и обрабатывается нормально. Я назвал поле «LogDate».
  • But now the problem begins. Within the square brackets, I have counters, formatted as MM:SS if you like. I cannot for the life of me find a way to sort these out, but I need to compare these times, hence I want to store them as minutes and seconds, not just numbers.
    • The first is a counter "TimeSpent",
    • второй - счетчик TimeStarted и
    • третий - счетчик TimeSinceDown.
  • Затем, наконец, идет информационный текст, который мне удалось разобрать, просто применив% {GREEDYDATA: LogInfo}.

Я заметил, что количество минут может быть намного больше, чем стандартные 60 минут в течение часа, поэтому я могу лаять здесь не на то дерево, пытаясь разобрать его с помощью шаблонов даты, таких как TIMESTAMP_ISO8601, но тогда я действительно не знаю как еще это сделать.

Итак, я зашел так далеко:

%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogDate}

и, как уже упоминалось, смогли (отрезав части квадратных скобок) проанализировать текст информации журнала с помощью

%{GREEDYDATA:LogInfo}

создать поле LogInfo.

Но на этом я застрял. Может ли кто-нибудь помочь мне разобраться с остальным?

Заранее огромное спасибо.

PS! Я также нашел % {NUMBER: duration}, но он мог бы как насколько я мог судить, синтаксический анализ только меток времени с точкой, а не двоеточием ..


person Vandalf    schedule 11.10.2017    source источник


Ответы (2)


Выражение регулярного выражения Grok может помочь вам решить проблему.

но сначала я хочу убедиться, что вы имеете в виду [325:51] [326:49] [359:57] - это три компонента, которые вы хотите получить? И он вернет результат вроде:

TimeSpent: 325:51
TimeStarted: 326:49
TimeSinceDown: 359:57

Если я понял суть дела, вы можете использовать мои способы по одному из следующих предложений:

  1. определите свои собственные файлы шаблонов и добавьте шаблон в свой файл.
  2. просто используйте выражение в части фильтра файла конфигурации logstash

надеюсь, это поможет тебе

person Lin Don    schedule 13.10.2017

Ах, там был пробел ... На самом деле, я вводил себя и всех в заблуждение в своем вопросе, так как на самом деле это была не та строка журнала, которая вызывала проблемы. Я просто взял первую, не понимая, в чем проблема на самом деле, но у той, которая вызывала проблемы, было место в скобках как таковое: [ 42:31]. Есть также некоторые части, где есть два пробела, поэтому мне удалось решить эту проблему, включив %{SPACE} между \[ и %{NUMBER}:

%{NUMBER:LogLineID} %{TIMESTAMP_ISO8601:LogDate} \[%{SPACE}%{NUMBER:TimeSpentMinutes}\:%{NUMBER:TimeSpentSeconds}\] \[%{SPACE}%{NUMBER:TimeStartedMinutes}\:%{NUMBER:TimeStartedSeconds}\] \[%{SPACE}%{NUMBER:TimeSinceDownMinutes}\:%{NUMBER:TimeSinceDownSeconds}\] %{GREEDYDATA:LogText}

Я до сих пор не решил объединить минуты и секунды, но я смогу справиться с этим на более позднем этапе.

Спасибо Лин Дону за проявленный интерес к моей проблеме и извините за то, что не ответил раньше.

Надеюсь, что решение поможет другим (или даже мне), если они застряли на той же проблеме.

На заметку: внимательно прочтите логи перед тем, как грокнуть .. :)

person Vandalf    schedule 27.10.2017