View a markdown version of this page

Invio di log ad Amazon 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à.

Invio di log ad Amazon CloudWatch

OTel Container Insights raccoglie e invia i log dei container ad Amazon CloudWatch Logs utilizzando la pipeline di log di OpenTelemetry Collector. Il componente aggiuntivo Amazon CloudWatch Observability EKS implementa un OpenTelemetry Collector as a DaemonSet che utilizza il ricevitore filelog per tracciare i file di log dei container, arricchirli con i metadati Kubernetes ed esportarli in Logs tramite l'esportatore Logs. CloudWatch CloudWatch

Non è richiesta alcuna configurazione aggiuntiva per la raccolta di log di base. La raccolta dei log è abilitata per impostazione predefinita quando si segue ilAvvio rapido: Otel Container Insights su Amazon EKS.

Prerequisiti

Prima di configurare la raccolta dei registri, verifica di soddisfare i seguenti requisiti.

  • OTel Container Insights è installato e il amazon-cloudwatch-observability componente aggiuntivo è attivo sul cluster

  • Autorizzazioni IAM: logs:CreateLogGrouplogs:CreateLogStream,logs:PutLogEvents,logs:DescribeLogGroups, e logs:DescribeLogStreams (incluse nella policy CloudWatchAgentServerPolicy gestita)

  • Accesso al nodo: il raccoglitore richiede l'accesso a ogni /var/log/pods nodo

Gruppi e fonti di log

La tabella seguente descrive il gruppo di log creato da OTel Container Insights e la fonte da cui raccoglie.

Gruppo di log Origine Indice
/aws/containerinsights/cluster-name/application /var/log/pods/**/*.log Tutti i log stdout e stderr dei container
Nota

I log dell'host e del dataplane saranno disponibili in una versione futura.

Come funziona la pipeline di log di Otel

Il OpenTelemetry Collector del componente aggiuntivo esegue una pipeline di log con i seguenti componenti.

  • Ricevitori: il filelog ricevitore recupera i file di registro del contenitore da. /var/log/pods/

  • Processori: il k8sattributes processore arricchisce i log con metadati Kubernetes. Il batch processore raggruppa in batch i record di registro prima dell'esportazione. Il resource processore aggiunge gli attributi delle risorse.

  • Esportatori: l'awscloudwatchlogsesportatore invia i record di registro a Logs. CloudWatch

Arricchimento dei log

La pipeline arricchisce ogni record di registro con i seguenti attributi.

  • Attributi delle risorse Kubernetes:k8s.pod.name,,, e k8s.namespace.name k8s.container.name k8s.node.name k8s.deployment.name

  • Etichette dei pod: tutte le etichette dei pod come attributi k8s.pod.label.*

  • Attributi cloud: cloud.regioncloud.account.id, e cloud.platform

  • Attributi del cluster: k8s.cluster.name

Personalizzazione della raccolta di registri

È possibile personalizzare la raccolta dei registri aggiornando i valori di configurazione del componente aggiuntivo. Le sezioni seguenti descrivono le opzioni di personalizzazione più comuni.

Disabilita la raccolta dei registri

Per disabilitare completamente la raccolta dei registri, aggiorna la configurazione del componente aggiuntivo con i registri dei contenitori disabilitati.

Per disabilitare la raccolta dei log
  • Eseguire il seguente comando seguente. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":false}}' \ --resolve-conflicts OVERWRITE

Escludi i namespace dalla raccolta di log

Per escludere namespace specifici dalla raccolta di log, utilizzate l'opzione di configurazione. excludeNamespaces

Per escludere i namespace dalla raccolta di log
  • Eseguire il seguente comando seguente. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS. Sostituisci i valori dello spazio dei nomi con gli spazi dei nomi che desideri escludere.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"excludeNamespaces":["kube-system","load-testing","monitoring"]}}' \ --resolve-conflicts OVERWRITE

Includi solo namespace specifici

Per raccogliere i log solo da namespace specifici, utilizzate l'opzione di configurazione. includeNamespaces

Per includere solo namespace specifici
  • Eseguire il seguente comando seguente. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS. Sostituisci i valori dello spazio dei nomi con i namespace che desideri includere.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"includeNamespaces":["production","staging"]}}' \ --resolve-conflicts OVERWRITE

Configura l'analisi dei log su più righe

Per combinare voci di registro su più righe (come stack trace) in un unico record di registro, configura l'analisi su più righe con uno schema di prima riga.

Per configurare l'analisi dei log su più righe
  • Eseguire il seguente comando seguente. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS. Sostituisci il firstLinePattern valore con uno schema regex che corrisponda alla prima riga di ogni voce di registro.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"multilineConfig":{"firstLinePattern":"^\\d{4}-\\d{2}-\\d{2}|^\\[\\d{4}","parseFormat":"auto"}}}' \ --resolve-conflicts OVERWRITE

Imposta la conservazione dei log

Per impostazione predefinita, CloudWatch Logs conserva i dati di registro a tempo indeterminato. Per controllare i costi di archiviazione, è possibile impostare una politica di conservazione sul gruppo di log.

Per impostare la conservazione dei log
  • Eseguire il seguente comando seguente. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS. Sostituisci 30 con il numero di giorni di conservazione dei log.

    aws logs put-retention-policy \ --log-group-name "/aws/containerinsights/cluster-name/application" \ --retention-in-days 30

Verifica

Per verificare che la raccolta dei registri funzioni, verifica che i gruppi di log previsti esistano e contengano dati.

Per verificare la raccolta dei registri
  • Eseguire il seguente comando seguente. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS.

    aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].{Name:logGroupName,StoredBytes:storedBytes}" \ --output table

    L'output mostra i nomi dei gruppi di log e il numero di byte memorizzati. Un valore diverso da zero per StoredBytes conferma che la pipeline sta consegnando i log.

Risoluzione dei problemi

Utilizza la seguente guida per risolvere i problemi più comuni di raccolta dei log.

I gruppi di log non vengono creati dopo 5 minuti

Sintomo: il gruppo di /aws/containerinsights/cluster-name/application log non viene visualizzato nei CloudWatch registri dopo 5 minuti.

Causa: il raccoglitore non dispone delle autorizzazioni IAM necessarie per creare gruppi di log e flussi di log.

Soluzione: verifica che al ruolo IAM associato al raccoglitore sia associata la policy gestitaCloudWatchAgentServerPolicy. Questa politica include le logs:CreateLogStream autorizzazioni logs:CreateLogGroup e.

Il gruppo di log dell'applicazione esiste ma è vuoto

Sintomo: il gruppo di log dell'applicazione esiste in CloudWatch Logs, ma non contiene flussi di log o eventi di log.

Causa: questo problema si verifica quando i contenitori non scrivono su stdout o stderr o il ricevitore filelog non può accedere al nodo. /var/log/pods/

Soluzione: completare i seguenti passaggi per risolvere il problema.

  1. Verifica che i contenitori dell'applicazione scrivano i log su stdout o stderr.

  2. Verifica che il collector DaemonSet pod abbia un supporto per il volume. /var/log/pods

    kubectl get daemonset -n amazon-cloudwatch -o yaml | grep -A 5 "var/log/pods"
  3. Controlla i log del raccoglitore per eventuali errori di accesso ai file.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=50 | grep -i "error\|permission"

Costi elevati di log CloudWatch

Sintomo: CloudWatch i costi di inserimento o archiviazione dei log sono superiori al previsto.

Causa: High-volume i namespace (come i test di carico o i namespace di monitoraggio) generano grandi volumi di log.

Soluzione: completare i seguenti passaggi per ridurre i costi.

  1. Escludi gli spazi dei nomi ad alto volume dalla raccolta di log. Per istruzioni, consulta Escludi i namespace dalla raccolta di log.

  2. Imposta una politica di conservazione sul gruppo di log per eliminare automaticamente i log più vecchi. Per istruzioni, consulta Imposta la conservazione dei log.