问题描述
我遇到了一个我不理解的问题,即td-agent的配置摘录:
<source>
@type gelf
tag gelf-nr
<parse>
@type json
</parse>
port 12201
</source>
<match gelf-nr**>
@type copy
<store>
@type stdout
</store>
<store>
@type newrelic
api_key XXXXXXXXXXXXXXXXXXXXXXXXXX
</store>
</match>
输出插件newrelic总是抱怨gelf Failed to emit error="time must be a Fluent::EventTime (or Integer): Float" error_class="ArgumentError
我试图将json的字段时间戳编辑为纳秒,但这不是导致问题的原因。 消息摘要:
2020-09-22 10:00:18.135967969 +0200 gelf-nr: {"version":"1.0","host":"plop-01.stag-21","message":"TEST log plop","level":3,"facility":"plop.log","misc":{"reason":"test erreur","status_code":400,"quote_ids":[1234,5678]},"timestamp":"1600761476000000000","subject"...
我怀疑问题出在最初的2020-09-22 10:00:18.135967969 +0200。 你怎么看 ?你能帮忙吗?
解决方法
摆脱纳秒,显然是NR输出插件中的错误(过时的实现):
<source>
...
</source>
<filter **>
@type record_modifier
<record>
timestamp "${timestamp.to_datetime.iso8601(6)}"
</record>
</filter>
<match **>
...
</match>
,
多亏了Max,我才开始工作
我用过:
<filter **>
@type record_modifier
<record>
timestamp "${timestamp.to_datetime.iso8601(6)}"
</record>
</filter>
并删除了时间解析(time_Format,keep_time_key)。但不是time_key,因为jsons中的字段不是时间,而是时间戳。 问题似乎出在NR中,而不是解析器中