Как Filebeat может указывать правила соответствия для Logstash

#logstash #elastic-stack #logstash-grok #filebeat

#logstash #эластичный стек #logstash-grok #filebeat

Вопрос:

Я хочу, чтобы фильтр Logstash’gork использовал правила сопоставления, которые предоставляет Filebeat

Вот моя конфигурация Filebeat:

 filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /root/Log-test/test.log
  fields:
    "@metadata":
        formatter: "%{TIMESTAMP_ISO8601:timestamp} - %{NOTSPACE:module} - %{LOGLEVEL:level} - %{NOTSPACE:filename} - %{GREEDYDATA:log_message}"
  fields_under_root: true

output.logstash:
  hosts: ["localhost:5045"]
  

Вот моя конфигурация Logstash:

 input {
    beats {
        port => "5045"
    }
}

filter {
  grok {
    match => { "message" => "%{[@metadata][formatter]}" }
  }
}

output {
  file {
    path => "/tmp/log-test.log"
    codec => rubydebug { metadata => true }
  }
}
  

Итак, я хочу, чтобы грок знал, что содержимое моих правил соответствия ( message поле) "%{TIMESTAMP_ISO8601:timestamp} - %{NOTSPACE:module} - %{LOGLEVEL:level} - %{NOTSPACE:filename} - %{GREEDYDATA:log_message}"

Но приведенные выше настройки не работают, я хочу знать, как я могу реализовать подобную функцию? или это возможно сделать?

Спасибо!

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

1. Убедитесь, что метаданные поступают так, как ожидалось: вывод { стандартный вывод { кодек => rubydebug { метаданные => true } } }

2. @AlainCollins я проверил метаданные, и да, они включили formatter поле

3. @AlainCollins с данными все в порядке, проблема в том, как присвоить данные message полю, и я просматриваю документ , и кажется, что Logstash предпочитает присваивать данные в строковом формате, и это связано со стилем сопоставления grok

Ответ №1:

Из этой публикации «Выражения Grok с динамическими ссылками %{field} не поддерживаются». Первоначальный автор этого сообщения открыл проблему с github, которая сейчас находится здесь (и не решена через год).

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

1. Спасибо за ваш ответ. Я также получил ответ участника Elastic, и, похоже, невозможно использовать dynamic %{field} в качестве шаблонов grok, см. Мой пост в Elastic discussy here