流利的丢失毫秒,现在日志消息在elasticsearch中按顺序存储

时间:2015-01-13 17:59:41

标签: elasticsearch kibana fluentd

我正在使用流利的方法在elasticsearch中集中日志消息并使用kibana查看它们。当我查看日志消息时,在同一秒内发生的消息乱序,@timestamp中的毫秒全部为零

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

如何精通存储毫秒?

1 个答案:

答案 0 :(得分:12)

流利者目前不支持亚秒级分辨率: https://github.com/fluent/fluentd/issues/461

我通过向所有日志消息添加一个新字段来解决这个问题,使用record_reformer来存储自纪元以来的纳秒

例如,如果你的流利者有一些像这样的输入:

#
# 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仪表板并使用它来排序而不是@timestamp,一切都将按顺序排列。