1

我遇到了一个我不明白的问题,提取 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。你怎么看 ?你能帮忙吗?

4

2 回答 2

1

摆脱纳秒,显然是 NR 输出插件中的错误(过时的实现):

<source>
...
</source>

<filter **>
  @type record_modifier
  <record>
    timestamp "${timestamp.to_datetime.iso8601(6)}"
  </record>
</filter>

<match **>
...
</match>
于 2020-09-22T11:27:49.453 回答
0

感谢 Max,我得到了它的工作:

我用了:

<filter **>
@type record_modifier
  <record>
  timestamp "${timestamp.to_datetime.iso8601(6)}"
  </record>
</filter>

并删除了时间解析(time_Format,keep_time_key)。但不是 time_key,因为 jsons 中的字段不是时间而是时间戳。问题似乎在 NR 中而不是在解析器中

于 2020-09-22T15:28:47.327 回答