【问题标题】:Duplicate field values for grok-parsed datagrok 解析数据的重复字段值
【发布时间】:2018-11-02 10:50:49
【问题描述】:

我有一个从 docker 中运行的 uwsgi 应用程序捕获日志的 filebeat。数据被发送到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 中的外观:

请注意,像 log 这样不是 grok 输出的原始数据很好。我看到kv 过滤器有allow_duplicate_values 参数,但它不适用于grok。

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

【问题讨论】:

    标签: elasticsearch logstash logstash-grok


    【解决方案1】:

    也许您的 filebeat 已经在完成这项工作并创建了这些字段

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

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

    为了在已经索引的数据上重新运行 grok,您需要使用 elasticsearch input plugin 以便从 ES 读取数据并在 grok 之后重新索引它。

    【讨论】:

    • 为我的字段添加覆盖有效。这很奇怪,我的 filebeat 不知道这些规则。它在不同的主机上运行。任何线索是如何发生的?
    • 没有其他信息,没有线索抱歉。如果答案解决了您的问题,请接受。注意:filebeat 可以在 log 字段上拆分,即使它在另一台机器上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多