Kibana fluentd丢失毫秒,现在日志消息在elasticsearch中存储顺序不正确

ftf50wuq  于 2023-05-12  发布在  Kibana
关注(0)|答案(2)|浏览(260)

我正在使用fluentd将日志消息集中在elasticsearch中,并使用kibana查看它们。当我查看日志消息时,在同一秒内发生的消息是无序的,并且@timestamp中的毫秒都是零

2015-01-13T11:54:01.000-06:00   DEBUG   my message

如何让fluentd存储毫秒?

5tmbdcev

5tmbdcev1#

fluentd目前不支持亚秒级分辨率:https://github.com/fluent/fluentd/issues/461
我通过record_reformer向所有日志消息添加一个新字段来解决这个问题,以存储epoch以来的纳秒
例如,如果你的fluentd有这样的输入:

#
# Syslog
#
<source>
    type syslog
    port 5140
    bind localhost
    tag syslog
</source>

#
# Tomcat log4j json output
#
<source>
    type tail
    path /home/foo/logs/catalina-json.out
    pos_file /home/foo/logs/fluentd.pos
    tag tomcat
    format json
    time_key @timestamp
    time_format "%Y-%m-%dT%H:%M:%S.%L%Z"
</source>

然后将它们更改为如下所示,并添加一个record_reformer,它会添加一个纳秒字段

#
# Syslog
#
<source>
    type syslog
    port 5140
    bind localhost
    tag cleanup.syslog
</source>

#
# Tomcat log4j json output
#
<source>
    type tail
    path /home/foo/logs/catalina-json.out
    pos_file /home/foo/logs/fluentd.pos
    tag cleanup.tomcat
    format json
    time_key @timestamp
    time_format "%Y-%m-%dT%H:%M:%S.%L%Z"
</source>

<match cleanup.**>
    type record_reformer
    time_nano ${t = Time.now; ((t.to_i * 1000000000) + t.nsec).to_s}
    tag ${tag_suffix[1]}
</match>

然后将time_nano字段添加到您的kibana Jmeter 板中,并使用它来排序,而不是@timestamp,一切都会井然有序。

ljsrvy3e

ljsrvy3e2#

使用Spring、Java和FluencyLogbackAppender从logback-more-appenders解决此问题。
在logback-spring.xml中,为了获得毫秒,设置:

<useEventTime>true</useEventTime>

然后在fluentd中,我必须添加一个过滤器,将@timestamp替换为time(在FluencyLogbackAppender中设置,包含毫秒)。

<filter **>
  @type record_transformer
    enable_ruby
  <record>
    @timestamp ${time.strftime('%Y-%m-%dT%H:%M:%S.%3N%z')}
  </record>
</filter>

相关问题