我有标准的 Windows IIS 日志文件,其中包含事件日期/时间戳信息和所用时间(以毫秒为单位)。
我希望能够通过减去“timetaken”来调整事件时间(@timestamp),以便能够记录事件的开始时间而不是完成时间。
我曾经考虑过使用 ruby 插件,但是我对 ruby 的了解为零。
我的第一次尝试是这样的:
ruby {
code => "event['@timestamp_adj'] = (event['@timestamp'].to_f - (event['timetaken'].to_f/1000)))"
}
但是,这会将时间戳转换为数字,如何将其恢复为日期?
一些示例日期:(对敏感数据进行了删节和篡改)
{
"@timestamp" => "2015-10-22T22:59:49.000Z",
"timestamp" => "2015-10-22 23:59:49",
"method" => "GET",
"page" => "/spacer.gif",
"response" => "200",
"timetaken" => "2120",
"@timestamp_adj" => 1445554789.0
}
在这个(虚构的)案例中,事件时间为 22:59:49.000,耗时 2.120 秒(2,120 毫秒)完成。我想要的是 @timestamp_adj 记录 22:59:48.880
任何一个:
如何将现在的“数字”时间戳转换回 Elasticsearch 可以识别的时间字符串?或者如何在不破坏日期/时间编码的情况下进行日期/时间数学运算?提前致谢。
答案1
您可以使用时间戳创建一个新的时间对象,然后减去所用的时间,如下所示
Time.new(event['@timestamp_adj']) - (event['timetaken'] / 1000)