使用KV过滤器的Logstash问题

时间:2017-09-10 02:52:39

标签: logstash

我试图通过logstash索引ElasticSearch中的文档。我试图索引的文件中的一个例子如下

GET firstname=john&lastname=smith 400

我的目标是创建一个类似于以下内容的索引

    HTTPMethod: GET
    firstname : john
    lastname: smith
    query_time : 400

我到目前为止做了以下

    filter {
     grok{
    match => {"message" => "%{WORD:HttpMethod} %{GREEDYDATA:KVText} %{NUMBER:time:int}"}
}
kv {
    source => "KVText"
    value_split => "&"
    remove_field => [ "KVText" ]
}

}

但是,当我执行logstash conf文件时,我会看到以下内容

      "query_time": 400,
      "message": "GET firstname=john&lastname=smith 400\r",
      "HttpMethod": "GET",
      "firstname=john": "lastname=smith"

我没有将索引作为key1 = value1格式作为离散值。例如firstname = john lastname = smith

此外,每当我对日志文件进行更改时,logstash进程都不会实时选择索引更改。我必须重命名该文件并重新启动logstash。我知道它与我的logstash.conf中的since_db路径有关。

任何指针都非常受欢迎。

由于 尼克

1 个答案:

答案 0 :(得分:2)

您正在以错误的方式配置kv过滤器。

value_split param告诉过滤器用什么char来分割一个键/值对(你应该把" ="),而field_split配置告诉什么char到用于从字符串中拆分对。尝试使用:

kv {
  source => "KVText"
  value_split => "=" 
  field_split => "&"
  remove_field => [ "KVText" ]
}