Grok фильтр для выбора и форматирования определенных строк журналов - PullRequest
0 голосов
/ 15 мая 2018

Я пишу фильтр grok для анализа журнала приложения, который неструктурирован.Что мне нужно, это искать определенные строки и генерировать вывод в определенном формате.Например, ниже приведены мои журналы

2018-05-07 01:19:40 M :Memory (xivr = 513.2 Mb, system = 3502.0 Mb, physical = 5386.7 Mb), CpuLoad (sys = 0%, xivr = 0%)
2018-05-07 01:29:40 M :Memory (xivr = 513.2 Mb, system = 3495.3 Mb, physical = 5370.1 Mb), CpuLoad (sys = 0%, xivr = 0%)
2018-05-07 05:51:19 1 :Hangup call
***2018-05-07 05:51:22 24 :Answer call from 71840746 for 91783028 [C:\xivr\es\IVR-Dialin.dtx***]
2018-05-07 05:51:30 24 :Hangup call
***2018-05-07 05:51:34 24 :Answer call from 71840746 for 91783028 [C:\xivr\es\IVR-Dialin.dtx]***
2018-05-07 00:31:21 45 :Device Dialogic Digital dxxxB12C1 [gc60.dev - Dialogic (SDK 6.0) ver 3.0.702:11646] (ThreadID: 1FF0, DriverChannel: 44)
2018-05-07 00:31:22 40 :Device Dialogic Digital dxxxB10C4 [gc60.dev - Dialogic (SDK 6.0) ver 3.0.702:11646] (ThreadID: 1B2C, DriverChannel: 39)

Мне нужно ввести только строки, выделенные *** в нижнем формате в моей Кибане: другие строки должны быть просто проигнорированы

Метка времени журнала: 2018-05-07 05: 51: 22 * ​​1007 * Идентификатор канала: 24
Номер_источника: 71840746
Номер_пункта: 91783028

Как этого достичь?

1 Ответ

0 голосов
/ 15 мая 2018

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

В вашем случае шаблон grok будет иметь вид,

%{TIMESTAMP_ISO8601:Logtimestamp} %{NUMBER:Channel_id} :Answer call from %{NUMBER:Source_number} for %{NUMBER:Destination_Number} %{GREEDYDATA:etc}

Он будет соответствовать только следующему шаблону,

2018-05-07 05:51:34 24 :Answer call from 71840746 for 91783028 [C:\xivr\es\IVR-Dialin.dtx]

Пояснение

Синтаксис для шаблона Грока равен %{SYNTAX:SEMANTIC}.

В вашем фильтре

  • %{TIMESTAMP_ISO8601:Logtimestamp} соответствует 2018-05-07 05:51:34
  • %{NUMBER:Channel_id} соответствует 24
  • :Answer call from соответствует строке буквально
  • %{NUMBER:Source_number} соответствует 71840746
  • %{NUMBER:Destination_Number} соответствует 91783028
  • %{GREEDYDATA:etc} соответствует остальным данным, т.е. [C:\xivr\es\IVR-Dialin.dtx]

в этом порядке.

Выход:

{
  "Logtimestamp": [
    [
      "2018-05-07 05:51:22"
    ]
  ],
  "Channel_id": [
    [
      "24"
    ]
  ],
  "Source_number": [
    [
      "71840746"
    ]
  ],
  "Destination_Number": [
    [
      "91783028"
    ]
  ],
  "etc": [
    [
      "[C:\\xivr\\es\\IVR-Dialin.dtx***]"
    ]
  ]
}

Вы можете проверить это здесь .

Надеюсь, это поможет.

...