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>