[Datadog]处理时间的日期重新映射器
首先
你好,我是Najimu。这次我想写一篇关于在Datadog设置中出现了一些疑问的文章。
大家有没有在Datadog中监控Elasticsearch的日志?如果有,有没有遇到过一些让你感到疑惑的事情?
我遇到了一个问题,就是当我输出日志后,日志的时间和在Datadog上看到的时间相差了9个小时(实际上是在输出日志后9个小时才能在Datadog上看到)。是的,这是UTC和JST的时间差。这次我想写一篇文章来解释为什么会出现这样的情况。
前提 – 中文中的翻译是“前提”
本次事件发生在以下情况下。
试一试
确认行动
我将确认具体是哪些操作。
我将在/var/log/elasticsearch/elasticsearch.log中输出日志,并在Datadog上确认其显示。由于这是一个测试项目,我将将日志输出的时间设为9小时前的时间。
结果应该是以下时间:
– 日志日期:2020年4月26日 11:08:29.000
– Datadog上的时间:2020年4月26日 20:08:29.000
输出日志
# echo "[\`date -d '-9 hours' "+%FT%T,000"\`][INFO ][foo.bar] This is a test message" >> /var/log/elasticsearch/elasticsearch.log
# tail -n 1 /var/log/elasticsearch/elasticsearch.log
[2020-04-26T11:08:29,000][INFO ][foo.bar] This is a test message
#
造成这种情况的原因是什么?
在先前的Datadog页面的日志日期重映射器部分中,有如下显示。
日期的格式可以用ISO8601、UNIX(毫秒纪元格式)和RFC3164的形式来表示。
简而言之,当执行Date Remapper时,无论读取时间是JST,Datadog都会将其视为UTC。因此,如果Datadog的时区设置为Asia/Tokyo,就会添加9小时。
对策
我认为有两种对策。
-
- 禁用日期重新映射器
- 将时间减去9小时后,再通过日期重新映射器进行处理。
禁用日期重映射器
我会确认它是如何变化的。由于禁用了日期重映射器,现在将使用当前时间输出日志。这样,以下稍微有些偏差:
– 日志日期:2020/4/26/ 20:50:28.000
– Datadog上的时间:2020/4/26/ 20:50:28.653
输出日志
# echo "[`date "+%FT%T,000"`][INFO ][foo.bar] This is a test message" >> /var/log/elasticsearch/elasticsearch.log
# tail -n 1 /var/log/elasticsearch/elasticsearch.log
[2020-04-26T20:50:28,000][INFO ][foo.bar] This is a test message
#
日志的时间发生了微妙的偏差,这是因为禁用了Date Remapper,导致Datadog无法读取时间,并将日志的接收时间作为Date。如果你正在实时发送日志,几乎不会在意,但如果你是一个注重细节的人,那你可能会关注这个微小的差别。
将9小时的值输入到Date Remapper中进行转换。
使用算术处理器。此功能可对在Grok解析器中存储的属性进行计算。在此情况下,计算减去9小时(32400000毫秒)的值,并将其存储在时间戳(timestamp_utc)中。
然后,通过日期重映射器将timestamp_utc转换为在Datadog中显示的时间。
我将确认它是如何变化的。时间完全匹配!
– 日志日期:2020/4/26/ 21:05:09.000
– Datadog上的时间:2020/4/26/ 21:05:09.000
输出日志
# echo "[`date "+%FT%T,000"`][INFO ][foo.bar] This is a test message" >> /var/log/elasticsearch/elasticsearch.log
# tail -n 1 /var/log/elasticsearch/elasticsearch.log
[2020-04-26T21:05:09,000][INFO ][foo.bar] This is a test message
#
总结
这次主要讨论了解决Datadog时间偏移问题的方法。
一开始,尽管日志已经被输出,但却未显示出来,通过调查发现这个问题是由于这个原因引起的。时间偏移可能导致从故障发生到在Datadog上收到通知需要花费9个小时,因此需要注意。
以上就是Date Remapper的设置内容!