Compatibilità della configurazione per Fluentd upstream

Durante la migrazione dall'agente Logging a Fluentd upstream, potresti riscontrare incompatibilità di configurazione che richiedono soluzioni alternative per evitare errori di avvio. Questo documento descrive come risolvere le incompatibilità di configurazione.

Modifiche alla sintassi tra l'agente Logging legacy e Fluentd upstream

Mentre l'agente Logging legacy si basa sulla sintassi di Fluentd v0.12, Fluentd upstream adotta lo standard v1. Questa transizione comporta il ritiro di vari parametri e l'introduzione di nuove direttive nidificate per gestire le funzionalità di base, sostituendo le strutture di configurazione piatte utilizzate in precedenza.

Per evitare errori di avvio e assicurarti che i log vengano elaborati correttamente, devi rimuovere o sostituire i parametri ritirati. Le sezioni seguenti descrivono come aggiornare i parametri ritirati.

Configurazione plug-in di output

La tabella seguente elenca i parametri che devono essere aggiornati nella configurazione del plug-in di output per evitare errori:

Sintassi dell'agente Logging legacy Sintassi Fluentd upstream Note
N/D <buffer> I plug-in di output Fluentd supportano una sezione <buffer>, nella sezione <match>, per configurare il buffering degli eventi. Per saperne di più, consulta la sezione Config: Buffer Section della documentazione di Fluentd.
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 N/D Rimuovi questo parametro. Fluentd upstream attiva in modo permanente la riuscita parziale per impostazione predefinita, eliminando solo le righe non valide.

Di seguito è riportato un esempio della configurazione del plug-in di output google-cloud nell'agente Logging legacy:

<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>

Dopo aver eseguito gli aggiornamenti, la configurazione è la seguente:

<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>

Configurazione del plug-in di input

La tabella seguente elenca i parametri che devono essere aggiornati nella configurazione del plug-in di input per evitare errori:

Sintassi dell'agente Logging legacy Sintassi Fluentd upstream Note
format <parse> Per saperne di più, consulta la sezione Config: Parse Section della documentazione di Fluentd.
protocol_type <transport> Indica il protocollo di trasporto syslog, ovvero udp, tcp, o tls.
auto_typecast Rimuovi questo parametro quando viene utilizzato all'interno del plug-in di analisi json.

Di seguito è riportato un esempio di configurazione di un plug-in di input nell'agente Loggingg legacy:

<source>
    @type tail
    path /var/log/my-app.log
    format json
</source>

Dopo aver eseguito gli aggiornamenti, la configurazione è la seguente:

<source>
    @type tail
    path /var/log/my-app.log
    <parse>
      @type json
    </parse>
</source>

Serializzazione di oggetti Ruby Time

Fluentd upstream richiede il casting esplicito per gli oggetti Ruby Time non elaborati utilizzati all'interno dei filtri <record>, ad esempio record_transformer. Senza un cast esplicito, questi oggetti causano un errore di serializzazione irreversibile durante lo svuotamento del buffer.

Se la configurazione utilizza ${time} con enable_ruby true, devi convertire esplicitamente l'oggetto in un tipo primitivo, numero intero o stringa.

Di seguito è riportato un esempio di configurazione di un plug-in di filtro nell'agente Logging legacy:

<filter foo.bar>
  @type record_transformer
   enable_ruby true
  <record>
    raw_timestamp ${time}
  </record>
</filter>

Dopo aver eseguito gli aggiornamenti, la configurazione è la seguente:

<filter foo.bar>
  @type record_transformer
   enable_ruby true
  <record>
    raw_timestamp ${time.to_i}
  </record>
</filter>

Trasporto e compressione gRPC predefiniti

Il plug-in di output google_cloud consente di configurare l'utilizzo di gRPC anziché REST/JSON per comunicare con l'API Cloud Logging.

Per migliorare le prestazioni, ti consigliamo di attivare il trasporto gRPC e configurare grpc_compression_algorithm gzip. Questa combinazione riduce al minimo l'overhead di rete e il consumo di CPU, in particolare durante l'elaborazione di volumi di log considerevoli.

Per implementare queste ottimizzazioni, utilizza la seguente configurazione:

<match **>
  @type google_cloud
  use_grpc true
  grpc_compression_algorithm gzip
</match>

Inoltre, poiché gRPC si basa sullo streaming HTTP/2 sulla porta 443, devi assicurarti che la tua infrastruttura di rete consenta il traffico gRPC/HTTP/2. Negli ambienti in cui gRPC è limitato, devi definire in modo esplicito use_grpc false per ripristinare la comunicazione HTTP/REST standard.

Pattern di espressione regolare RabbitMQ

I pattern delle espressioni regolari utilizzati dall'agente Logging legacy per l'importazione dei log RabbitMQ sono spesso incompatibili con i formati di output delle versioni moderne di RabbitMQ. Queste discrepanze possono comportare l'elaborazione errata dei log o il loro scarto silenzioso durante la procedura di raccolta.

I log RabbitMQ moderni incorporano la precisione al millisecondo nei timestamp, ad esempio YYYY-MM-DD HH:MM:SS.L, e presentano indicatori di gravità e PID specifici come [info] <0.213.0>, che l'espressione regolare precedente non è riuscita a trovare.

Se l'agente Fluentd è configurato per raccogliere i log di RabbitMQ, devi aggiornare la sezione <parser> per gestire correttamente il formato dei log corrente.

Di seguito è riportato un esempio della configurazione del plug-in di input RabbitMQ per l'agente Logging legacy:

<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>

Dopo aver eseguito gli aggiornamenti, la configurazione è la seguente:

<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>