(Facoltativo) Configura Fluentd per inviare i log ai Logs DaemonSet CloudWatch - Amazon CloudWatch

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

/aws/containerinsights/Cluster_Name/application

Tutti i file di log in /var/log/containers

/aws/containerinsights/Cluster_Name/host

I log da /var/log/dmesg, /var/log/secure e /var/log/messages

/aws/containerinsights/Cluster_Name/dataplane

I log in /var/log/journal per kubelet.service kubeproxy.service e docker.service.

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 nomi amazon-cloudwatch. Questo account di servizio viene utilizzato per eseguire Fluentd. DaemonSet Per ulteriori informazioni, consulta Gestione degli account di servizio nella documentazione di riferimento di Kubernetes.

  • Un ruolo cluster denominato fluentd nello spazio dei nomi amazon-cloudwatch. Questo ruolo di cluster concede le autorizzazioni get, list e watch sui log di pod all'account di servizio fluentd. Per ulteriori informazioni, consulta APIPanoramica nel 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 ConfigMap nella documentazione di Kubernetes Tasks.

Installazione di Fluentd
  1. 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
  2. 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.

  3. 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
  1. Apri la console all'indirizzo. CloudWatch https://console.aws.amazon.com/cloudwatch/

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