#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. спасибо за вашу помощь. это было глупо, но это сработало!