Logstash" date"过滤器不能替换@timestamp

时间:2014-12-10 18:03:50

标签: apache logstash

出于某种原因,当我尝试替换apache访问日志事件中的@timestamp字段时,它不起作用。对于Nginx,它确实使用相同的日期格式。

这是我的日志日期格式:[10 / Dec / 2014:13:01:06 -0500]

这是我的logstash.conf -

if [type] == "apache" {
   grok {
        match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:time}\] \"(?:%{WORD:method} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-)" }
        add_tag => [ "apache", "grokked" ]
        }
   date {
        match => [ "[time]" , "dd/MMM/YYYY:HH:mm:ss Z" ]
        locale => "en"
        add_tag => ["date_filtered"]
        }
     }

@timestamp字段保持此格式 - 2014-12-10T18:01:06.000Z

更新 这是完整的配置 -

日志中没有错误,只有logstash启动日志行。

我的logstash配置文件如下:

input {
redis {
        host => "<redis_server>"
        port => "<redis_port>"
        data_type => 'list'
        key => 'logstash'
        type => 'redis'
        threads => 300
 }

filter {


multiline {
        pattern => "(^\s)|(^INFO.+)|(^SEVERE.+)"
        what => "previous"
        add_tag => ["multiline"]
        stream_identity => '%{host}.%{file}.%{type}'

   }

if [type] == "apache" {
   grok {
        match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:time}\] \"(?:%{WORD:method} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-)" }
        add_tag => [ "apache", "grokked" ]
        }
   date {
        match => [ "[time]" , "dd/MMM/YYYY:HH:mm:ss Z" ]
        locale => "en"
        add_tag => ["date_filtered"]
        }
     }
}

output {

  elasticsearch {
    host => "<ES_server>"
    port => "9300"
    cluster => "elasticsearch"
    embedded => false
    node_name => "logstash"
   }
}

结果是:

enter image description here

实际应该是:

enter image description here

感谢。

1 个答案:

答案 0 :(得分:0)

平均而言,只有1/1000日志以毫秒= 000处理,如@timestamp所示。

你能猜出当你把HH:mm:ss传递给日期{}时会发生什么?这是正确的 - 输入中没有提供毫秒信息,它被设置为000。

所以,我认为你的约会{}节工作正常。

您可以通过在输出中查找“date_filtered”标记来确认这一点;只有在日期{}成功时才会添加标记。