在Logstash中将日期转换为UNIX时间

在Logstash中将日期转换为UNIX时间,logstash,logstash-configuration,Logstash,Logstash Configuration,是否可以将日期从“2016-08-22T09:09:55.487Z”格式转换为日志中的UNIX时间?我看到了相反的操作,但没有看到任何内容。首先,您必须将“2016-08-22T09:09:55.487Z”转换为日期对象,并使用日期过滤器: (假设字段date包含表示有效ISO8601时间戳的字符串) 此时,您将有一个字段date\u对象,其中包含一个logstash时间戳。 可以使用to_i方法将此时间戳转换为其等效的历元。 要做到这一点,我们必须使用ruby过滤器,它允许以过滤器的形式执行r

是否可以将日期从“2016-08-22T09:09:55.487Z”格式转换为日志中的UNIX时间?我看到了相反的操作,但没有看到任何内容。

首先,您必须将
“2016-08-22T09:09:55.487Z”
转换为日期对象,并使用日期过滤器:
(假设字段
date
包含表示有效ISO8601时间戳的字符串)

此时,您将有一个字段
date\u对象
,其中包含一个logstash时间戳。 可以使用
to_i
方法将此时间戳转换为其等效的历元。
要做到这一点,我们必须使用ruby过滤器,它允许以过滤器的形式执行ruby代码

ruby {    
    code => set.event('date_epoch', event.get('date_object').to_i)"  
}          

然后您将有一个字段
date\u epoch
,它将是一个代表UNIX时间的数字。

我今天遇到了一个类似的问题。不幸的是,上面的和平配置有一个限制,即它在整数转换期间从时间戳中损失毫秒:

红宝石{
代码=>“事件['date\u epoch']=event['date\u object'].to\u i”
}

我尝试了几种方法,包括将date对象转换为float,将其乘以1000,然后返回到string。底线是精度并不完全相同

最后,我在下面给出了一个有点粗糙的示例。它与logstash版本2.4.1一起工作。 因此,首先我创建一个字段
tmpTimestamp
,以便将解析的时间戳转换为普通字符串:

mutate{
add_field => ["tmpTimestamp","%{@timestamp}"]
}
和平的ruby代码将字符串转换为标准的ruby DateTime格式,将其转换为历元格式(包括ms),然后再转换回字符串:

ruby { code => "require 'date';event['epoch'] = DateTime.parse(event['tmpTimestamp']).strftime('%Q').to_s" }  
删除未使用的tmp变量:

mutate{
remove_field => ["tmpTimestamp"]
}

当您询问UNIX时间时,您能指出预期的输出吗?你想要一个数字还是一个字符串?@baudsp,我想要一个像这样的数字:1431607046在一般的Ruby日期转换为历元时也可以参考这个:输入的日期不必是整个时间戳。它可以是格式为MM/DD/YYYY或MM-DD-YYYY等的日期。
mutate{
remove_field => ["tmpTimestamp"]
}