我有一个文件拍子,它从docker中运行的uwsgi应用程序捕获日志。数据被发送到Logstash,Logstash对其进行解析并转发给elasticsearch。
这是logstash conf文件:
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模式捕获的所有值都是重复的。这是kibana中的外观:
请注意,不是grok输出的原始数据,例如log
很好。我已经看到kv
过滤器具有allow_duplicate_values
参数,但不适用于grok。
我的配置有什么问题?另外,是否可以在Elasticsearch中对现有数据重新运行grok模式?
答案 0 :(得分:0)
也许您的文件拍已经完成了工作并创建了这些字段
您是否尝试将此参数添加到grok中?
overwrite => [ "request.ip", "request.endpoint", ... ]
要对已建立索引的数据重新运行grok,您需要使用elasticsearch input plugin才能从ES读取数据并在grok之后对其重新索引。