Фильтровать логи с гроком в logstash - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь отфильтровать логи, полученные с помощью grok. Ниже приведен пример журнала

INFO   | jvm 1    | main    | 2013/04/05 01:08:47.048 | [m[32mINFO  [TaskExecutor-master-2443-ProcessTask [31111111112]] [b2cConfirmationAction] CRON JOB ID : 101AA1C, ACTION : ConfirmationAction , CUSTOMER ID : 000001111111 , EMAIL ADDRESS : abc@gmail.com , SCHEDULE : Every 1 week  , MESSAGE : Execution started for action ConfirmationAction

Я использую отладчик grok (https://grokdebug.herokuapp.com/) для проверки перед обновлением файла конфигурации logstash. Ниже код моего фильтра:

%{LOGLEVEL:level}%{GREEDYDATA:greedydata}%{SPACE}%{YEAR}[/-]%{MONTHNUM}[/-]%{MONTHDAY}%{SPACE}%{HOUR}:%{MINUTE}:%{SECOND}%{GREEDYDATA:gd} \[(?:%{WORD:action})\]%{GREEDYDATA:cronjobresult}

Здесь я выхожу как

"level": [ [ "INFO" ] ], "greedydata": [ [ " | jvm 1 | main | 20" ] ], "SPACE": [ [ "", " " ] ], "YEAR": [ [ "13" ] ], "MONTHNUM": [ [ "04" ] ], "MONTHDAY": [ [ "05" ] ], "HOUR": [ [ "01" ] ], "MINUTE": [ [ "08" ] ], "SECOND": [ [ "47.048" ] ], "gd": [ [ " | \u001b[m\u001b[32mINFO [TaskExecutor-master-2443-ProcessTask [31111111112]]" ] ], "action": [ [ "b2cConfirmationAction" ] ], "cronjobresult": [ [ " CRON JOB ID : 101AA4A , ACTION : ConfirmationAction , CUSTOMER ID : 000001111111 , EMAIL ADDRESS : abc@gmail.com , SCHEDULE : Every 1 week , MESSAGE : Execution started for action ConfirmationAction" ] ] }

Мое требование - получить значения в cronjobresult, такие как cron job, iD идентификатор клиента, с другим и независимым полем, чтобы я мог использовать эти значения в kibana. Прямо сейчас я не могу получить это. Также я использовал greedyData дважды, лучше подходить для этого журнала.

1 Ответ

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

Вы можете просто расширить свой фильтр и сопоставить его явно. Например, чтобы соответствовать идентификатору задания cron, вы можете написать CRON JOB ID : %{BASE16NUM:Cron_job_id} в своем фильтре.

Если вам не нужны никакие данные из журнала, вы можете просто написать .* вместо GREEDYDATA, и они будут пропущены.

Вот полный фильтр для вашего журнала,

%{LOGLEVEL:level}%{GREEDYDATA:greedydata}%{SPACE}%{YEAR}[/-]%{MONTHNUM}[/-]%{MONTHDAY}%{SPACE}%{HOUR}:%{MINUTE}:%{SECOND}%{GREEDYDATA:gd} \[(?:%{WORD:action})\] CRON JOB ID : %{BASE16NUM:Cron_job_id},.*CUSTOMER ID : %{NUMBER:Customer_id}.*EMAIL ADDRESS : %{EMAILADDRESS}.*SCHEDULE : %{GREEDYDATA:schedule}.*, MESSAGE : %{GREEDYDATA:Message}

Выход:

{
  "level": [
    [
      "INFO"
    ]
  ],
  "greedydata": [
    [
      "   | jvm 1    | main    | 20"
    ]
  ],
  "SPACE": [
    [
      "",
      " "
    ]
  ],
  "YEAR": [
    [
      "13"
    ]
  ],
  "MONTHNUM": [
    [
      "04"
    ]
  ],
  "MONTHDAY": [
    [
      "05"
    ]
  ],
  "HOUR": [
    [
      "01"
    ]
  ],
  "MINUTE": [
    [
      "08"
    ]
  ],
  "SECOND": [
    [
      "47.048"
    ]
  ],
  "gd": [
    [
      " | [m[32mINFO  [TaskExecutor-master-2443-ProcessTask [31111111112]]"
    ]
  ],
  "action": [
    [
      "b2cConfirmationAction"
    ]
  ],
  "Cron_job_id": [
    [
      "101AA1C"
    ]
  ],
  "Customer_id": [
    [
      "000001111111"
    ]
  ],
  "BASE10NUM": [
    [
      "000001111111"
    ]
  ],
  "EMAILADDRESS": [
    [
      "abc@gmail.com"
    ]
  ],
  "local": [
    [
      "abc"
    ]
  ],
  "remote": [
    [
      "gmail.com"
    ]
  ],
  "schedule": [
    [
      "Every 1 week  "
    ]
  ],
  "Message": [
    [
      "Execution started for action"
    ]
  ]
}

Обратите внимание, что я использовал EMAILADDRESS шаблон из, https://github.com/rgevaert/grok-patterns/blob/master/grok.d/postfix_patterns

Если вы хотите проверить это на https://grokdebug.herokuapp.com,, вам нужно добавить,

EMAILADDRESSPART [a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILADDRESSPART:local}@%{EMAILADDRESSPART:remote}

как шаблоны cusomtom, проверяя add custom patterns

...