

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
<a name="container-insights-eks-otel-advanced"></a>

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
<a name="container-insights-eks-otel-advanced-prereqs"></a>

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
+ `kubectl`configurato per comunicare con il cluster di destinazione
+ Autorizzazioni IAM: `eks:UpdateAddon``eks:DescribeAddon`, e `iam:AttachRolePolicy` (richieste per la configurazione tra più account)

## Schema di configurazione generale
<a name="container-insights-eks-otel-advanced-pattern"></a>

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
<a name="container-insights-eks-otel-advanced-log-filtering"></a>

È 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
   ```

1. 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
<a name="container-insights-eks-otel-advanced-multi-account"></a>

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
<a name="container-insights-eks-otel-advanced-multi-account-setup"></a>

**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"
       }
     ]
   }
   ```

1. 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
   ```

1. 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
<a name="container-insights-eks-otel-advanced-dimensions"></a>

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
   ```

1. 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
<a name="container-insights-eks-otel-advanced-resource-tuning"></a>

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
   ```

1. 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
   ```

1. 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
<a name="container-insights-eks-otel-advanced-verify"></a>

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 sia`ACTIVE`. 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
   ```

1. 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
<a name="container-insights-eks-otel-advanced-troubleshoot"></a>

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

### Add-on l'aggiornamento non riesce con ConfigurationConflict
<a name="container-insights-eks-otel-advanced-ts-config-conflict"></a>

**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
   ```

1. Verifica che tutte le chiavi di configurazione siano valide per il componente aggiuntivo. `amazon-cloudwatch-observability`

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

### Cross-account le metriche non compaiono nell'account di monitoraggio
<a name="container-insights-eks-otel-advanced-ts-cross-account"></a>

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

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

1. 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"
   ```

1. Verifica che il ruolo IAM dell'agente nell'account del carico di lavoro disponga dell'`sts:AssumeRole`autorizzazione per il ruolo ARN tra account.