grok分析的数据的字段值重复

时间:2018-11-02 10:50:49

标签: elasticsearch logstash logstash-grok

我有一个文件拍子,它从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中的外观:

enter image description here

请注意,不是grok输出的原始数据,例如log很好。我已经看到kv过滤器具有allow_duplicate_values参数,但不适用于grok。

我的配置有什么问题?另外,是否可以在Elasticsearch中对现有数据重新运行grok模式?

1 个答案:

答案 0 :(得分:0)

也许您的文件拍已经完成了工作并创建了这些字段

您是否尝试将此参数添加到grok中?

overwrite => [ "request.ip", "request.endpoint", ... ]

要对已建立索引的数据重新运行grok,您需要使用elasticsearch input plugin才能从ES读取数据并在grok之后对其重新索引。