View a markdown version of this page

Configurazione avanzata per OTel Container Insights su Amazon EKS - 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à.

Configurazione avanzata per OTel Container Insights su Amazon EKS

Questo argomento tratta scenari di configurazione avanzati per OTel Container Insights su Amazon EKS. Utilizza queste configurazioni per personalizzare la raccolta delle metriche, filtrare i log, raccogliere dati di telemetria tra gli account, aggiungere dimensioni personalizzate e ottimizzare l'allocazione delle risorse per cluster di grandi dimensioni.

Prerequisiti

Prima di configurare le impostazioni avanzate, verifica di soddisfare i seguenti requisiti.

  • OTel Container Insights installato e ACTIVE disponibile sul tuo cluster Amazon EKS

  • Cluster Amazon EKS che esegue Kubernetes versione 1.28 o successiva

  • AWS CLI versione 2.15.0 o successiva

  • kubectlconfigurato per comunicare con il cluster di destinazione

  • Autorizzazioni IAM: eks:UpdateAddoneks:DescribeAddon, e iam:AttachRolePolicy (richieste per la configurazione tra più account)

Schema di configurazione generale

Tutte le configurazioni avanzate seguono lo stesso schema. Si passa una configurazione JSON al amazon-cloudwatch-observability componente aggiuntivo utilizzando il comando. aws eks update-addon

aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
Importante

Il --resolve-conflicts OVERWRITE flag sostituisce qualsiasi configurazione aggiuntiva esistente. Per preservare le impostazioni esistenti, uniscile alla nuova configurazione prima di eseguire il comando.

Filtraggio dei log

È possibile ridurre CloudWatch i costi dei registri escludendo i registri che soddisfano criteri specifici. Utilizza il filtro dei log per eliminare i log a livello di debug o dettagliati prima che l'agente li invii a. CloudWatch

Per configurare il filtraggio dei log
  1. Esegui il comando seguente per aggiornare il componente aggiuntivo con una configurazione del filtro di registro. 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 '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } }, "exclude_filters": [ { "type": "log_level_filter", "log_level": "DEBUG" } ] } } } }' \ --resolve-conflicts OVERWRITE
  2. Verifica che lo stato del componente aggiuntivo sia ACTIVE successivo all'aggiornamento.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

La exclude_filters configurazione rimuove le voci di registro che corrispondono al livello di registro specificato prima che l'agente le invii a CloudWatch Logs. Ciò riduce il volume di acquisizione dei log e i costi associati.

Multi-account raccolta

Puoi inviare dati di telemetria dagli account dei carichi di lavoro a un account di monitoraggio centrale configurando l'assunzione di ruoli IAM tra account. Questo approccio offre una visione unica delle metriche e dei log di più cluster Amazon EKS su diversi account. AWS

Per configurare una raccolta per più account

Per creare il ruolo interaccount nell'account di monitoraggio
  1. Nell'account di monitoraggio centrale, crea un ruolo IAM con una policy di fiducia che consenta all'account del carico di lavoro di assumerlo. Sostituiscilo workload-account-id con l'ID dell' AWS account del carico di lavoro.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::workload-account-id:root" }, "Action": "sts:AssumeRole" } ] }
  2. Allega la policy CloudWatchAgentServerPolicy gestita al ruolo interaccount.

Per configurare il componente aggiuntivo per la distribuzione tra account
  1. Nell'account di carico di lavoro, aggiorna il componente aggiuntivo per assumere il ruolo tra account. Sostituiscilo cluster-name con il nome del tuo cluster Amazon EKS e monitoring-account-id con l'ID AWS account dell'account di monitoraggio centralizzato.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "credentials": { "role_arn": "arn:aws:iam::monitoring-account-id:role/CrossAccountCWObservabilityRole" } } } }' \ --resolve-conflicts OVERWRITE
  2. Verifica che lo stato del componente aggiuntivo sia ACTIVE successivo all'aggiornamento.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

Dimensioni metriche personalizzate

Puoi aggiungere dimensioni personalizzate derivate dalle etichette Kubernetes alle metriche di Container Insights. Le dimensioni personalizzate consentono di filtrare e raggruppare le metriche con una maggiore granularità, ad esempio per team, ambiente o livello di applicazione.

Per aggiungere dimensioni personalizzate dalle etichette Kubernetes
  1. Esegui il comando seguente per configurare dimensioni personalizzate. Sostituiscilo cluster-name con il nome del tuo cluster Amazon EKS e label-key con l'etichetta Kubernetes da utilizzare come dimensione.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true, "metric_dimensions": { "custom_dimensions": ["label-key"] } } } } } } }' \ --resolve-conflicts OVERWRITE
  2. Verifica che lo stato del componente aggiuntivo sia ACTIVE dopo l'aggiornamento.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

Dopo l'entrata in vigore della configurazione, le etichette Kubernetes specificate vengono visualizzate come dimensioni nelle metriche di Container Insights in. CloudWatch

Ottimizzazione delle risorse per cluster di grandi dimensioni

Per i cluster di grandi dimensioni, potrebbe essere necessario aumentare i limiti di CPU e memoria per l'agente. CloudWatch DaemonSet L'allocazione delle risorse predefinita funziona bene per i cluster di piccole dimensioni, ma i cluster più grandi generano più dati di telemetria e richiedono risorse aggiuntive per gli agenti.

La tabella seguente fornisce linee guida per il dimensionamento in base alle dimensioni del cluster.

Dimensione del cluster Richiesta CPU Limite della CPU Richiesta di memoria Memory limit (Limite memoria)
Piccolo (20 nodi o meno) 100 m 200 m 128 Mi 256 Mi
Medio (21—100 nodi) 200 m 400 m 256 Mi 512 Mi
Grande (oltre 100 nodi) 300 m 500 metri 384 Mi 768 Mi
Extra-large (oltre 500 nodi) 500 m 1000 m 512 Mi 1 Gi
Per configurare i limiti delle risorse per l'agente DaemonSet
  1. Esegui il comando seguente per impostare le richieste e i limiti delle risorse. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS e i valori delle risorse con i valori della tabella precedente.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "resources": { "requests": { "cpu": "cpu-request", "memory": "memory-request" }, "limits": { "cpu": "cpu-limit", "memory": "memory-limit" } } } }' \ --resolve-conflicts OVERWRITE
  2. Verifica che lo stato del componente aggiuntivo sia valido ACTIVE e che i pod degli agenti si riavviino con la nuova allocazione delle risorse.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
  3. Verificate che i pod degli agenti funzionino con i nuovi limiti di risorse.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'

Verifica le modifiche alla configurazione

Dopo aver applicato una configurazione avanzata, verificate che il componente aggiuntivo sia integro e che gli agent pods siano stati riavviati correttamente.

Per verificare le modifiche alla configurazione
  1. Verifica che lo stato del componente aggiuntivo siaACTIVE. Sostituisci cluster-name con il nome del tuo cluster Amazon EKS.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table
  2. Verifica che gli agent pod siano stati riavviati e siano in stato. Running

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    Tutti i pod degli agenti devono mostrare Running lo stato con un orario di riavvio recente.

Risoluzione dei problemi

Utilizza le seguenti linee guida per risolvere i problemi più comuni con le configurazioni avanzate.

Add-on l'aggiornamento non riesce con ConfigurationConflict

Sintomo: il aws eks update-addon comando restituisce un ConfigurationConflict errore.

Causa: la configurazione JSON fornita non è valida o contiene chiavi non valide.

Soluzione: completa i seguenti passaggi per risolvere il problema.

  1. Convalida la configurazione JSON utilizzando un linter JSON o eseguendo il comando seguente.

    echo 'your-json-configuration' | python3 -m json.tool
  2. Verifica che tutte le chiavi di configurazione siano valide per il componente aggiuntivo. amazon-cloudwatch-observability

  3. Riprova l'aggiornamento con il codice JSON corretto.

Cross-account le metriche non compaiono nell'account di monitoraggio

Sintomo: dopo aver configurato la raccolta per più account, le metriche non vengono visualizzate nell'account di monitoraggio centralizzato.

Causa: la policy o le autorizzazioni relative ai ruoli IAM per più account non sono corrette.

Soluzione: completa i seguenti passaggi per risolvere questo problema.

  1. Verifica che la politica di attendibilità nell'account di monitoraggio consenta all'account del carico di lavoro di assumere il ruolo.

  2. Verifica che al ruolo interaccount sia associata la policy CloudWatchAgentServerPolicy gestita.

  3. Verifica la presenza di errori nei registri degli agenti. AssumeRole

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied"
  4. Verifica che il ruolo IAM dell'agente nell'account del carico di lavoro disponga dell'sts:AssumeRoleautorizzazione per il ruolo ARN tra account.