2015-12-18 43 views
5

我想解析一些时代的时间戳是更可读的东西。Logstash转换时代的时间戳

我环顾四周,如何把它解析为一个正常的时间,从我的理解都是我应该做的是这样的:

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作为一个领域)。所以显然我不理解它。

回答

7

日期{}过滤器会用提供的数据替换@timestamp的值,所以您应该看到@timestamp具有与[time]字段相同的值。这通常很有用,因为传播,​​处理和日志存储有一些延迟,所以使用事件自己的时间是首选。

既然你有一个以上的日期字段,你要使用日期过滤器的“目标”参数来指定解析日期的目的地,如:

date { 
    match => [ "time","UNIX" ] 
    target => "myTime" 
} 

这将转换名为[时间]的字符串字段放入名为[myTime]的日期字段中。 Kibana知道如何显示日期字段,并且可以在kibana设置中自定义它。

因为你很可能并不需要这两个字符串相同数据的最新版本,你可以删除字符串版本作为转换的一部分:

date { 
    match => [ "time","UNIX" ] 
    target => "myTime" 
    remove_field => [ "time" ] 
} 
+0

这工作完美。谢谢。 –

2

想想也与UNIX_MS努力为毫秒。

date { 
    timezone => "UTC" 
    match => ["timestamp", "UNIX_MS"] 
    target => "@timestamp" 
}