Как разобрать json в logstash / grok из ansible_results - PullRequest
0 голосов
/ 16 мая 2019

У меня есть сообщения ниже от ansible_results, которые я пытаюсь проанализировать, в основном мне нужно вырезать поле после "msg": из приведенных ниже сообщений.

Пример журнала:

2019-05-07 07:56:06,374 p=7743 u=root |  fatal: [xxxxx]: FAILED! => {"changed": false, "msg": "The system may not be mirrored  according to the xxxx default mirror policy."}
2019-05-07 07:56:06,402 python-logstash-logger TASK FAILED | fail | HOST | xxxxxxx | RESULT | {"changed": false, "msg": "The system may not be mirrored  according to the xxx default mirror policy."}

Я пытаюсь следовать, но не понимаю, как это сделать:

%{TIMESTAMP_ISO8601:time} p=%{INT:process} u=%{USER:user}|%{SPACE}falal:%{SPACE}%{WORD:fatal}%{SPACE}%{UNIXPATH: FAILED*?}

Желаемая:

Разделены msg и last message body на два разных поля ..

msg    The system may not be mirrored  according to the xxxx default mirror policy.

Любая помощь экспертизы будет высоко ценится.

1 Ответ

1 голос
/ 17 мая 2019

Поскольку у вас есть два совершенно разных типа журнала, я использовал два разных шаблона grok:

grok{
 match => [
   "%{TIMESTAMP_ISO8601:time}.*p=%{INT:process} u=%{USER:user}.*%{WORD:result}! =>.*"msg": "%{GREEDYDATA:msg}"\}$",
   "%{TIMESTAMP_ISO8601:time}.*\|.*\|%{SPACE}%{GREEDYDATA:Host}%{SPACE}\|.*\|.*\|.*"msg": "%{GREEDYDATA:msg}"\}$
 ]
}

Первый шаблон с первой строкой журнала:

process     7743
result  FAILED
msg     The·system·may·not·be·mirrored··according·to·the·xxxx·default·mirror·policy.
time    2019-05-07·07:56:06,374
user    root 

Второйшаблон со второй строкой журнала:

time    2019-05-07·07:56:06,402
Host    HOST·
msg     The·system·may·not·be·mirrored··according·to·the·xxx·default·mirror·policy. 
...