Logstash 日志存储自定义日期日志格式匹配

Logstash 日志存储自定义日期日志格式匹配,logstash,logstash-grok,Logstash,Logstash Grok,我有一个日志,它打印的日期格式如下: 因此,我已经在grok调试器上运行了过滤器,但仍然不知道如何在 grok { patterns_dir => "./patterns" match => { "message" => "%{F_TIMESTAMP:timestamp}" } } date { match => [ "timestamp" , "HH:mm:ss MMM d yyyy" , "HH:mm:ss MMM dd yyyy" ] locale =>

我有一个日志,它打印的日期格式如下:

因此,我已经在grok调试器上运行了过滤器,但仍然不知道如何在

grok {
patterns_dir => "./patterns"
match => { "message" => "%{F_TIMESTAMP:timestamp}" }
}

date {
match => [ "timestamp" , "HH:mm:ss MMM  d yyyy" , "HH:mm:ss MMM  dd yyyy" ]
locale => "en"
}
模式文件

F_TIMESTAMP %{TIME} \On %{MONTH} +%{MONTHDAY} %{YEAR}
时间戳的当前输出为

2014年4月4日10:45:33,grok debugger上


那么我如何使它与logstash@timestamp兼容/匹配呢?

您可以提取日期时间的每一部分,并在没有On关键字的情况下合并到另一个字段中

您可以实现以下目标:

filter {
    grok {         
        match => { "message" => "%{F_TIMESTAMP}" }
    }
    mutate {
        add_field => { 
            "timestamp" => "%{time} %{month} %{monthday} %{year}"
        }
    }
    date {
        match => [ "timestamp" , "HH:mm:ss MMM d yyyy" , "HH:mm:ss MMM dd yyyy" ]
        locale => "en"
    }
    mutate {
        remove_field => [ "time" ,"month","monthday","year","timestamp"]
    }
}
F_TIMESTAMP%{TIME:TIME}\s*On\s*%{MONTH:MONTH}\s*{MONTHDAY:MONTHDAY}\s*{YEAR:YEAR}


这对我来说很好。

谢谢,这对我来说很好,但后来我发现小时标记HH在@timestamp“=>”2014-04-04T02:45:33.000Z中显示不正确,因为你可以看到HH部分变成了02而不是10。然后,我删除了mutate remove_字段标记,以实际查看小时时间戳捕获的小时部分显示的时间是10,因此现在它确实让我感到困惑。logstash将10更改为2,因为我的位置是UTC的+8。因此,如果我在不同的地点/国家/地区运行此程序,其值将不同。我想我需要为此添加时区字段。是的。您需要在本地时间转换它。ruby脚本可以这样做:
ruby{code=>“event['@timestamp']=event['@timestamp'].getlocal”}
filter {
    grok {         
        match => { "message" => "%{F_TIMESTAMP}" }
    }
    mutate {
        add_field => { 
            "timestamp" => "%{time} %{month} %{monthday} %{year}"
        }
    }
    date {
        match => [ "timestamp" , "HH:mm:ss MMM d yyyy" , "HH:mm:ss MMM dd yyyy" ]
        locale => "en"
    }
    mutate {
        remove_field => [ "time" ,"month","monthday","year","timestamp"]
    }
}