Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
(Facoltativo) Configura Fluentd per inviare i log ai Logs DaemonSet CloudWatch
avvertimento
Il supporto di Container Insights per Fluentd è ora in modalità di manutenzione, il che significa che non AWS fornirà ulteriori aggiornamenti per Fluentd e che prevediamo di renderlo obsoleto nelle prossime future. Inoltre, la configurazione corrente di Fluentd per Approfondimenti sui container utilizza una versione precedente dell'immagine fluent/fluentd-kubernetes-daemonset:v1.10.3-debian-cloudwatch-1.0
di Fluentd che non ha gli ultimi miglioramenti e patch di sicurezza. Per l'ultima immagine di Fluentd supportata dalla comunità open source, vedi. fluentd-kubernetes-daemonset
Ti consigliamo vivamente di migrare all'utilizzo FluentBit con Container Insights ogni volta che è possibile. L'utilizzo FluentBit come log forwarder per Container Insights offre significativi miglioramenti delle prestazioni.
Per ulteriori informazioni, consulta Configura Fluent Bit come DaemonSet per inviare i log ai Logs CloudWatch e Differenze se stai già usando Fluentd.
Per configurare Fluentd per raccogliere log dai container, puoi seguire i passaggi riportati in Configurazione rapida per Container Insights su Amazon EKS e Kubernetes o la procedura in questa sezione. Nei passaggi seguenti, si configura Fluentd per inviare i log DaemonSet ai log. CloudWatch Una volta completata questa fase, Fluentd crea i seguenti gruppi di log se non esistono già.
Nome del gruppo di log | Origine del log |
---|---|
|
Tutti i file di log in |
|
I log da |
|
I log in |
Fase 1: Creare uno spazio dei nomi per CloudWatch
Usa il passaggio seguente per creare uno spazio dei nomi Kubernetes richiesto. amazon-cloudwatch
CloudWatch Puoi ignorare questa fase se questo spazio dei nomi è già stato creato.
Per creare uno spazio dei nomi per CloudWatch
-
Inserire il seguente comando.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
Fase 2: installazione di Fluentd
Avvia questo processo scaricando Fluentd. Al termine di queste fasi, l'implementazione crea le risorse seguenti nel cluster:
-
Un account di servizio denominato
fluentd
nello spazio dei nomiamazon-cloudwatch
. Questo account di servizio viene utilizzato per eseguire Fluentd. DaemonSet Per ulteriori informazioni, consulta Gestione degli account di servizionella documentazione di riferimento di Kubernetes. -
Un ruolo cluster denominato
fluentd
nello spazio dei nomiamazon-cloudwatch
. Questo ruolo di cluster concede le autorizzazioniget
,list
ewatch
sui log di pod all'account di serviziofluentd
. Per ulteriori informazioni, consulta APIPanoramicanel Kubernetes Reference. -
Un ConfigMap nome
fluentd-config
nel namespace.amazon-cloudwatch
ConfigMap Contiene la configurazione che deve essere utilizzata da Fluentd. Per ulteriori informazioni, consulta Configurare un pod per utilizzare a ConfigMapnella documentazione di Kubernetes Tasks.
Installazione di Fluentd
-
Crea un ConfigMap nome
cluster-info
con il nome del cluster e la AWS regione a cui verranno inviati i log. Esegui il comando seguente, aggiornando i segnaposto con i nomi del cluster e della regione.kubectl create configmap cluster-info \ --from-literal=cluster.name=
cluster_name
\ --from-literal=logs.region=region_name
-n amazon-cloudwatch -
Scarica e distribuisci Fluentd DaemonSet nel cluster eseguendo il comando seguente. Accertarti di utilizzare l'immagine di container con l'architettura corretta. Il manifesto di esempio funziona solo su istanze x86 e verrà inserito
CrashLoopBackOff
se nel cluster sono presenti istanze Advanced RISC Machine (ARM). Fluentd daemonSet non dispone di un'immagine Docker ufficiale multiarchitettura che consenta di utilizzare un tag per più immagini sottostanti e di lasciare che il runtime del contenitore estragga quello giusto. L'ARMimmagine Fluentd utilizza un tag diverso con un suffisso.arm64
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluentd/fluentd.yaml
Nota
A causa di una recente modifica per ottimizzare la configurazione di Fluentd e ridurre al minimo l'impatto delle API richieste Fluentd sugli API endpoint Kubernetes, l'opzione «Watch» per i filtri Kubernetes è stata disabilitata per impostazione predefinita. fluent-plugin-kubernetesPer
maggiori dettagli, consulta _metadata_filter. -
Convalida l'implementazione eseguendo il seguente comando. Ogni nodo deve avere un pod denominato
fluentd-cloudwatch-*
.kubectl get pods -n amazon-cloudwatch
Fase 3: verifica della configurazione Fluentd
Per verificare la configurazione di Fluentd, completa le seguenti operazioni.
Verifica della configurazione di Fluentd per Approfondimenti sui container
Apri la console all'indirizzo. CloudWatch https://console.aws.amazon.com/cloudwatch/
-
Nel pannello di navigazione, selezionare Log groups (Gruppi di log). Assicurati di trovarti nella Regione in cui è stato implementato Fluentd sui tuoi container.
Nell'elenco dei gruppi di log nella regione, dovrebbe essere visualizzato quanto segue:
-
/aws/containerinsights/
Cluster_Name
/application -
/aws/containerinsights/
Cluster_Name
/host -
/aws/containerinsights/
Cluster_Name
/dataplane
Se questi gruppi di log sono visualizzati, la configurazione di Fluentd è verificata.
-
Supporto per log multi-linea
Il 19 agosto 2019 abbiamo aggiunto il supporto per log multi-linea per i log raccolti da Fluentd.
Per impostazione predefinita, lo starter della voce del log multi-linea è qualsiasi carattere senza spazi vuoti. Questo significa che tutte le righe del log che iniziano con un carattere che non contiene spazi sono considerate come una nuova voce di log multi-linea.
Se i log dell'applicazione utilizzano uno starter multi-linea diverso, puoi supportarli apportando due modifiche al file fluentd.yaml
.
Innanzitutto, escludili dal supporto multi-linea predefinito aggiungendo i nomi di percorso dei file di log a un campo exclude_path
nella sezione containers
di fluentd.yaml
. Di seguito è riportato un esempio.
<source> @type tail @id in_tail_container_logs @label @containers path /var/log/containers/*.log exclude_path ["
full_pathname_of_log_file
*", "full_pathname_of_log_file2
*"]
Quindi, aggiungi un blocco per i file di log al file fluentd.yaml
. L'esempio seguente viene utilizzato per il file di registro dell' CloudWatch agente, che utilizza un'espressione regolare con timestamp come starter multilinea. Puoi copiare questo blocco e aggiungerlo a fluentd.yaml
. Modifica le righe indicate per riflettere il nome del file di log dell'applicazione e lo starter multi-linea che desideri utilizzare.
<source> @type tail @id
in_tail_cwagent_logs
@label @cwagentlogs
path/var/log/containers/cloudwatch-agent*
pos_file/var/log/cloudwatch-agent.log.pos
tag * read_from_head true <parse> @type json time_format %Y-%m-%dT%H:%M:%S.%NZ </parse> </source>
<label @
cwagentlogs
> <filter **> @type kubernetes_metadata @id filter_kube_metadata_cwagent </filter> <filter **> @type record_transformer @id filter_cwagent_stream_transformer <record> stream_name ${tag_parts[3]} </record> </filter> <filter **> @type concat key log multiline_start_regexp/^\d{4}[-/]\d{1,2}[-/]\d{1,2}/
separator "" flush_interval 5 timeout_label @NORMAL </filter> <match **> @type relabel @label @NORMAL </match> </label>
(Facoltativo) Riduzione del volume di log da Fluentd
Per impostazione predefinita, inviamo i registri delle applicazioni Fluentd e i metadati Kubernetes a. CloudWatch Se desideri ridurre il volume di dati a cui inviare CloudWatch, puoi interrompere l'invio a una o entrambe queste fonti di dati. CloudWatch
Per arrestare i log dell'applicazione Fluentd, rimuovi la sezione seguente dal file fluentd.yaml
.
<source> @type tail @id in_tail_fluentd_logs @label @fluentdlogs path /var/log/containers/fluentd* pos_file /var/log/fluentd.log.pos tag * read_from_head true <parse> @type json time_format %Y-%m-%dT%H:%M:%S.%NZ </parse> </source> <label @fluentdlogs> <filter **> @type kubernetes_metadata @id filter_kube_metadata_fluentd </filter> <filter **> @type record_transformer @id filter_fluentd_stream_transformer <record> stream_name ${tag_parts[3]} </record> </filter> <match **> @type relabel @label @NORMAL </match> </label>
Per evitare che i metadati Kubernetes vengano aggiunti agli eventi di registro a cui vengono inviati CloudWatch, aggiungi una riga alla sezione del record_transformer
file. fluentd.yaml
Nell'origine di log in cui desideri rimuovere questi metadati, aggiungi la riga seguente.
remove_keys $.kubernetes.pod_id, $.kubernetes.master_url, $.kubernetes.container_image_id, $.kubernetes.namespace_id
Ad esempio:
<filter **> @type record_transformer @id filter_containers_stream_transformer <record> stream_name ${tag_parts[3]} </record> remove_keys $.kubernetes.pod_id, $.kubernetes.master_url, $.kubernetes.container_image_id, $.kubernetes.namespace_id </filter>
Risoluzione dei problemi
Se non vedi questi gruppi di log e stai cercando nella regione corretta, controlla i log dei pod Fluentd per cercare l'errore DaemonSet .
Esegui il comando seguente e accertati che lo stato sia Running
.
kubectl get pods -n amazon-cloudwatch
Nei risultati del comando precedente, annota il nome del pod che inizia con fluentd-cloudwatch
. Utilizza questo nome del pod nel comando seguente.
kubectl logs
pod_name
-n amazon-cloudwatch
Se i log contengono errori relativi alle IAM autorizzazioni, controlla il IAM ruolo associato ai nodi del cluster. Per ulteriori informazioni sulle autorizzazioni necessarie per gestire un EKS cluster Amazon, consulta Amazon EKS IAM Policies, Roles and Permissions nella Amazon EKS User Guide.
Se lo stato del pod è CreateContainerConfigError
, ottieni l'errore preciso eseguendo il seguente comando.
kubectl describe pod
pod_name
-n amazon-cloudwatch
Se lo stato del pod è CrashLoopBackOff
, assicurati che l'architettura dell'immagine di container Fluentd sia la stessa del nodo quando è stato installato Fluentd. Se il tuo cluster ha sia x86 che ARM64 nodi, puoi utilizzare un'etichetta kubernetes.io/arch per posizionare le immagini sul nodo corretto. Per ulteriori informazioni, consulta kuberntes.io/arch