logstash,插件kv和字段中的重复值

时间:2017-11-28 14:51:20

标签: parsing duplicates logstash logstash-grok logstash-configuration

示例日志:

from myapp import app

def main():
    from paste import httpserver
    httpserver.serve(app, host='localhost', port='8070')

if __name__ == '__main__':
    main()

我的logstash配置:

2017-11-27T04:26:33+01:00 node231 PROXY-NODE2: 2017-11-27 04:26:31,559 [INFO] [user=optimus&id=dwql33333fssd&password=****&request=true&response=true&total=225&id=dwql33333fssd]

输出(示例):

filter {
    if "node" in [tags] and  "[INFO]" in [message] {
        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601} %{DATA} %{DATA:[proxy][node]}: %{TIMESTAMP_ISO8601:[proxy][timestamp]} %{DATA} \[%{GREEDYDATA:data}\]"
            add_field => {"[@metadata][status]" => "parsed"}
        }
        if [@metadata][status] == "parsed" {
            kv {
             source => "data"
             field_split => "&"
             include_keys => [ "user", "id", "total" ]
        }
    }
}

因为日志包含两次" id" ...我如何才能获得第一个或最后一个" id"? 我需要灵活的解决方案,因为有时其他领域也会重复。

1 个答案:

答案 0 :(得分:0)

用于删除重复键/值对的bool选项。设置为false时,只保留一个唯一键/值对。

例如,考虑来自= me from = me的来源。 [from]将映射到包含两个元素的数组:[" me"," me"]。要仅保留唯一键/值对,您可以使用此配置:

  filter {
      kv {
        allow_duplicate_values => false
      }
    }

来源:https://www.elastic.co/guide/en/logstash/current/plugins-filters-kv.html#plugins-filters-kv-allow_duplicate_values