我正在尝试解析一些纪元时间戳,使其更具可读性。
我四处寻找如何将它们解析为正常时间,根据我的理解,我应该做的就是这样:
mutate
{
remove_field => [ "..."]
}
grok
{
match => { 'message' => '%{NUMBER:time}%{SPACE}%{NUMBER:time2}...' }
}
date
{
match => [ "time","UNIX" ]
}
邮件的示例是:1410811884.84 1406931111.00 ....
前两个值应为UNIX时间值。
我的grok工作,因为所有字段都显示在Kibana中具有预期值,并且我删除的所有值字段都不存在,因此mutate也可以工作。日期部分似乎什么都不做。
根据我的理解,match => [ "time","UNIX" ]
应该做我想做的事情(将时间值更改为正确的日期格式,并将其作为字段显示在kibana上。)。显然我不理解它。
答案 0 :(得分:10)
date {}过滤器将@timestamp的值替换为所提供的数据,因此您应该看到@timestamp与[time]字段具有相同的值。这通常很有用,因为日志的传播,处理和存储有一些延迟,因此首选使用事件的时间。
由于您有多个日期字段,因此您需要使用'目标'日期过滤器的参数,用于指定解析日期的目的地,例如:
date {
match => [ "time","UNIX" ]
target => "myTime"
}
这会将名为[time]的字符串字段转换为名为[myTime]的日期字段。 Kibana知道如何显示日期字段,您可以在kibana设置中自定义日期字段。
由于您可能不需要字符串和相同数据的日期版本,因此您可以删除字符串版本作为转换的一部分:
date {
match => [ "time","UNIX" ]
target => "myTime"
remove_field => [ "time" ]
}
答案 1 :(得分:5)
考虑使用UNIX_MS尝试毫秒。
date {
timezone => "UTC"
match => ["timestamp", "UNIX_MS"]
target => "@timestamp"
}