Bei der Migration vom Logging-Agent zu Upstream-Fluentd können Konfigurationsinkompatibilitäten auftreten, die Problemumgehungen erfordern, um Startfehler zu vermeiden. In diesem Dokument wird beschrieben, wie Sie Konfigurationsinkompatibilitäten beheben.
Syntaxänderungen zwischen dem Legacy-Logging-Agent und Upstream-Fluentd
Der Legacy-Logging-Agent basiert auf der Fluentd-Syntax v0.12, während im Upstream-Fluentd der v1-Standard verwendet wird. Bei dieser Umstellung werden verschiedene Parameter eingestellt und neue verschachtelte Direktiven eingeführt, um die Kernfunktionen zu verarbeiten. Diese ersetzen die bisher verwendeten flachen Konfigurationsstrukturen.
Um Startfehler zu vermeiden und dafür zu sorgen, dass Ihre Logs richtig verarbeitet werden, müssen Sie die eingestellten Parameter entfernen oder ersetzen. In den folgenden Abschnitten wird beschrieben, wie Sie die eingestellten Parameter aktualisieren.
Konfiguration des Ausgabe-Plug-ins
In der folgenden Tabelle sind die Parameter aufgeführt, die in der Konfiguration Ihres Ausgabeprogramm-Plug-ins aktualisiert werden müssen, um Fehler zu vermeiden:
| Legacy-Syntax für den Logging-Agent | Upstream-Fluentd-Syntax | Hinweise |
|---|---|---|
| – | <buffer> |
Fluentd-Ausgabe-Plug-ins unterstützen einen <buffer>-Abschnitt unter dem <match>-Abschnitt, um das Puffern von Ereignissen zu konfigurieren. Weitere Informationen finden Sie in der Fluentd-Dokumentation im Abschnitt Config: Buffer Section. |
buffer_type |
@type |
|
buffer_path |
path |
|
buffer_chunk_limit |
chunk_limit_size |
|
disable_retry_limit |
retry_forever |
|
retry_limit |
retry_max_times |
|
max_retry_wait |
retry_max_interval |
|
num_threads |
flush_thread_count |
|
partial_success |
– | Entfernen Sie diesen Parameter. Upstream Fluentd aktiviert standardmäßig dauerhaft den Teilerfolg und verwirft nur ungültige Zeilen. |
Im Folgenden sehen Sie ein Beispiel für die Konfiguration des google-cloud-Ausgabe-Plug-ins im alten Logging-Agent:
<match **>
@type google_cloud
buffer_type file
buffer_path /var/log/google-fluentd/buffers
buffer_chunk_limit 512KB
flush_interval 5s
disable_retry_limit false
retry_limit 3
retry_wait 10
max_retry_wait 300
num_threads 8
</match>
Nach den Aktualisierungen sieht die Konfiguration so aus:
<match **>
@type google_cloud
<buffer>
@type file
path /var/log/google-fluentd/buffers
chunk_limit 512KB
flush_interval 5s
retry_forever false
retry_max_times 3
retry_wait 10
retry_max_interval 300
flush_thread_count 8
</buffer>
</match>
Konfiguration des Eingabe-Plug-ins
In der folgenden Tabelle sind die Parameter aufgeführt, die in der Konfiguration Ihres Eingabe-Plug-ins aktualisiert werden müssen, um Fehler zu vermeiden:
| Legacy-Syntax für den Logging-Agent | Upstream-Fluentd-Syntax | Hinweise |
|---|---|---|
format |
<parse> |
Weitere Informationen finden Sie in der Fluentd-Dokumentation im Abschnitt Config: Parse Section. |
protocol_type |
<transport> |
Geben Sie das Protokoll des syslog-Transports an, entweder udp, tcp, oder tls. |
auto_typecast |
Entfernen Sie diesen Parameter, wenn er im json-Parsing-Plug-in verwendet wird. |
Im Folgenden finden Sie ein Beispiel für die Konfiguration eines Eingabe-Plug-ins im alten Logging-Agent:
<source>
@type tail
path /var/log/my-app.log
format json
</source>
Nach den Aktualisierungen sieht die Konfiguration so aus:
<source>
@type tail
path /var/log/my-app.log
<parse>
@type json
</parse>
</source>
Serialisierung von Ruby-Time-Objekten
Für Upstream-Fluentd ist eine explizite Umwandlung für rohe Ruby-Time-Objekte erforderlich, die in <record>-Filtern wie record_transformer verwendet werden. Ohne explizite Umwandlung führen diese Objekte beim Leeren des Puffers zu einem schwerwiegenden Serialisierungsfehler.
Wenn in Ihrer Konfiguration ${time} mit enable_ruby true verwendet wird, müssen Sie das Objekt explizit in einen primitiven Typ, eine Ganzzahl oder einen String umwandeln.
Das folgende Beispiel zeigt die Konfiguration eines Filter-Plug-ins im alten Logging-Agent:
<filter foo.bar>
@type record_transformer
enable_ruby true
<record>
raw_timestamp ${time}
</record>
</filter>
Nach den Aktualisierungen sieht die Konfiguration so aus:
<filter foo.bar>
@type record_transformer
enable_ruby true
<record>
raw_timestamp ${time.to_i}
</record>
</filter>
Standardeinstellungen für gRPC-Transport und ‑Komprimierung
Mit dem google_cloud-Ausgabe-Plug-in können Sie konfigurieren, ob gRPC anstelle von REST/JSON für die Kommunikation mit der Cloud Logging API verwendet werden soll.
Für eine bessere Leistung empfehlen wir, den gRPC-Transport zu aktivieren und grpc_compression_algorithm gzip zu konfigurieren. Diese Kombination minimiert den Netzwerk- und CPU-Overhead, insbesondere bei der Verarbeitung großer Logmengen.
Verwenden Sie die folgende Konfiguration, um diese Optimierungen zu implementieren:
<match **>
@type google_cloud
use_grpc true
grpc_compression_algorithm gzip
</match>
Da gRPC außerdem auf HTTP/2-Streaming an Port 443 basiert, muss Ihre Netzwerkinfrastruktur gRPC/HTTP/2-Traffic zulassen. In Umgebungen, in denen gRPC eingeschränkt ist, müssen Sie use_grpc false explizit definieren, um zur standardmäßigen HTTP-/REST-Kommunikation zurückzukehren.
RabbitMQ-Muster für reguläre Ausdrücke
Die regulären Ausdrucksmuster, die vom alten Logging-Agent für die RabbitMQ-Logaufnahme verwendet werden, sind oft nicht mit den Ausgabeformaten moderner RabbitMQ-Versionen kompatibel. Diese Abweichungen können dazu führen, dass Logs während der Erfassung falsch verarbeitet oder stillschweigend verworfen werden.
Moderne RabbitMQ-Logs enthalten Zeitstempel mit Millisekundengenauigkeit, z. B. YYYY-MM-DD HH:MM:SS.L, und spezifische Markierungen für Schweregrad und PID, z. B. [info] <0.213.0>, die mit dem alten regulären Ausdruck nicht übereinstimmten.
Wenn Ihr Fluentd-Agent so konfiguriert ist, dass er RabbitMQ-Logs erfasst, müssen Sie den Abschnitt <parser> aktualisieren, damit das aktuelle Logformat richtig verarbeitet wird.
Das Folgende ist ein Beispiel für die Konfiguration des RabbitMQ-Eingabe-Plug-ins für den alten Logging-Agent:
<source>
@type tail
path /var/log/rabbitmq/*.log
pos_file /var/lib/google-fluentd/pos/rabbitmq.pos
tag rabbitmq
format multiline
format_firstline /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/
format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(?<severity>\w+)\] (?<message>.*)/
time_format %Y-%m-%d %H:%M:%S
</source>
Nach den Aktualisierungen sieht die Konfiguration so aus:
<source>
@type tail
path /var/log/rabbitmq/*.log
pos_file /var/log/fluentd/pos/rabbitmq.pos
read_from_head true
tag rabbitmq
<parse>
@type multiline
format_firstline /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}/
format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?<severity>[^\]]+)\] <(?<pid>[^>]+)> (?m:(?<message>.*))$/
time_format %Y-%m-%d %H:%M:%S.%L
</parse>
</source>