Konfigurationskompatibilität für Upstream-Fluentd

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>