Как проанализировать сообщение системного журнала с помощью logstash

#logstash #elastic-stack #logstash-grok #logstash-configuration #elk

Вопрос:

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

 Jul  6 13:24:27 NODE1 zeus.eventd[14176]: pools/POOL nodes/IP:3000 nodefail Node NODE2 has failed - A monitor has detected a failure

Jul  6 13:24:34 NODE1 zeus.eventd[14176]: pools/POOL nodes/IP:3000 nodeworking Node NODE2 is working again
 

Я хотел бы извлечь NODE2 из системного журнала и добавить его в качестве поля в индекс вместе с nodefail/nodeworking

В настоящее время мой ввод/грок

    syslog {
       grok_pattern => "%{SYSLOGLINE}"
   }
 

однако без фильтра вся необходимая мне информация заполняется в поле «сообщение», поэтому я не могу использовать ее в elastic

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

Кто-нибудь может показать мне конфигурацию ввода/фильтра, которая мне нужна для достижения этой цели?

Спасибо,

Куб

Изменить: Поля сообщений выглядят следующим образом:

 zeus.eventd 14176 - - SERIOUS   pools/POOL  nodes/IP:3000   nodefail    Node NODENAME has failed - A monitor has detected a failure
zeus.eventd 14176 - - INFO  pools/POOL  nodes/IP:3000   nodeworking Node NODENAME is working again
 

Комментарии:

1. шаблон grok для анализа message поля должен выглядеть следующим ^pools/POOL nodes/IP:d %{WORD:status} Node %{WORD:node_name} образом ; вы также можете использовать фильтр «рассечение», который проще в использовании.

Ответ №1:

Вы можете использовать плагин «рассечь фильтр» в поле сообщения, созданном при анализе с помощью %{SYSLOGLINE} :

 dissect {
  mapping => {
    "message" => "%{} %{} %{status} %{} %{node_name} %{}"
  }
}
 

Или второй фильтр grok, применяемый к полю сообщения , созданному при анализе с %{SYSLOGLINE} помощью этого шаблона:

 ^pools/POOL nodes/IP:d  %{WORD:status} Node %{WORD:node_name}
 

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

 "status":"nodefail"
"node_name":"NODE2"

"status":"nodeworking"
"node_name":"OFSVDBM101"
 

Комментарии:

1. Хорошо, я могу использовать раздел для разделения поля сообщения, созданного %{SYSLOGLINE}? Я обновил описание содержимым поля сообщения, вы можете видеть, что отличается только последняя часть

2. @TheCube да. Когда вы анализируете сообщение с помощью %{SYSLOGLINE}, оно создает новые поля (и перезаписывает message поле. Затем эти поля можно использовать, как и другие. Я обновлю ответ, чтобы он был более четким

3. спасибо, что я обновил описание содержимым поля сообщения, если это поможет

4. спасибо за вашу помощь. это было глупо, но это сработало!