У меня есть filebeat, который записывает логи из приложения uwsgi, запущенного в Docker. Данные отправляются в logstash, который анализирует их и пересылает вasticsearch.
Вот файл конфигурации logstash:
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "log" => "\[pid: %{NUMBER:worker.pid}\] %{IP:request.ip} \{%{NUMBER:request.vars} vars in %{NUMBER:request.size} bytes} \[%{HTTPDATE:timestamp}] %{URIPROTO:request.method} %{URIPATH:request.endpoint}%{URIPARAM:request.params}? => generated %{NUMBER:response.size} bytes in %{NUMBER:response.time} msecs(?: via sendfile\(\))? \(HTTP/%{NUMBER:request.http_version} %{NUMBER:response.code}\) %{NUMBER:headers} headers in %{NUMBER:response.size} bytes \(%{NUMBER:worker.switches} switches on core %{NUMBER:worker.core}\)" }
}
date {
# 29/Oct/2018:06:50:38 +0700
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z"]
}
kv {
source => "request.params"
field_split => "&?"
target => "request.query"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "test-index"
}
}
Все было хорошо, но я заметил, что все значения, полученные с помощью шаблона grok, дублируются. Вот как это выглядит в кибане:
Обратите внимание, что необработанные данные, такие как log
, которые не были выводом grok, в порядке. Я видел, что фильтр kv
имеет параметр allow_duplicate_values
, но он не относится к grok.
Что не так с моей конфигурацией? Кроме того, возможно ли повторно запустить шаблоны grok на существующих данных вasticsearch?