fluentd derzeit nicht unterstützt Auflösung von unter einer Sekunde: https://github.com/fluent/fluentd/issues/461
ich, indem ein neues Feld, um alle Protokollnachrichten mit record_reformer um diese gearbeitet ns seit Epoche speichern
Zum Beispiel, wenn Ihr fluentd hat einige Eingänge wie folgt:
#
# 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>
sie dann wie folgt aussehen ändern und eine record_reformer hinzufügen, die eine Nanosekunde Feld fügt
#
# 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>
Fügen Sie dann das time_nano Feld zu Ihren kibana Dashboards hinzu und verwenden Sie es, um anstelle von @timestamp zu sortieren und alles wird in Ordnung sein.
Danke für die Antwort. Ein Fluentd Maintainer hier. Ich werde dieses Problem im Hinterkopf behalten, da wir uns mehr Gedanken über die Unterstützung von Sub-Sekunden-Zeitstempeln machen (eine bekannte Frage/Design-Entscheidung). –
Vielen Dank für die Aufmerksamkeit auf dieses Problem Kiyoto Tamura. Die Problemumgehung ist weniger als ideal, da der Zeitstempel aus Fluentd oder aus einer Protokolldatei generiert wird, die möglicherweise bereits eine Genauigkeit von mindestens Millisekunden aufweist. Es wäre am besten, zuerst die Millisekunden-Genauigkeit zu verwenden, um die Zeit zu formatieren und dann den aktuellen Nanosekunden-Wert von der aktuellen Sekunde zum Zeitpunkt der Analyse in fließender Form hinzuzufügen, um die Reihenfolge in der gleichen Millisekunde zu halten. Oder zweitens, wenn die geparste Log-Nachricht nur 1 Sekunde Auflösung hatte, wie zum Beispiel syslog. –
Hi @DavidWartell, glaubst du, es wäre besser, die Variable $ {time} von fluent-plugin-record-reformer zu benutzen? Anstatt "Time.now" können wir jetzt die Zeit des Ereignisses anstelle von fluentds Zeit bekommen. – clarete