#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