

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

# Soluzione per il monitoraggio delle applicazioni Kafka con Amazon Managed Grafana
<a name="solution-kafka"></a>

[Le applicazioni basate su Apache Kafka hanno esigenze di monitoraggio specializzate.](https://kafka.apache.org) Questa pagina descrive un modello che fornisce una soluzione per il monitoraggio delle applicazioni Kafka in esecuzione su macchine virtuali Java sul tuo cluster Amazon EKS. La soluzione può essere installata utilizzando. [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**Nota**  
Questa soluzione non supporta il monitoraggio delle applicazioni Amazon Managed Streaming for Apache Kafka. Per informazioni sul monitoraggio delle applicazioni Amazon MSK, consulta [Monitorare un cluster Amazon MSK nella Amazon](https://docs.aws.amazon.com/msk/latest/developerguide/monitoring.html) *Managed Streaming for Apache Kafka Developer Guide*.

Questa soluzione configura:
+ Il tuo spazio di lavoro Amazon Managed Service for Prometheus per archiviare i parametri di Kafka e Java Virtual Machine (JVM) dal tuo cluster Amazon EKS.
+ Raccolta di metriche specifiche di Kafka e JVM utilizzando l'agente, oltre a un componente aggiuntivo dell'agente. CloudWatch CloudWatch Le metriche sono configurate per essere inviate all'area di lavoro Amazon Managed Service for Prometheus.
+ Il tuo spazio di lavoro Amazon Managed Grafana per raccogliere questi parametri e creare dashboard per aiutarti a monitorare il tuo cluster.

**Nota**  
Questa soluzione fornisce parametri JVM e Kafka per l'applicazione in esecuzione su Amazon EKS, ma non include i parametri di Amazon EKS. Puoi utilizzare la [soluzione Observability per monitorare Amazon EKS](solution-eks.md) per visualizzare metriche e avvisi per il tuo cluster Amazon EKS.

## Informazioni su questa soluzione
<a name="solution-kafka-about"></a>

Questa soluzione configura uno spazio di lavoro Amazon Managed Grafana per fornire parametri per la tua applicazione Apache Kafka. Le metriche vengono utilizzate per generare dashboard che ti aiutano a utilizzare l'applicazione in modo più efficace fornendo informazioni sulle prestazioni e sul carico di lavoro dell'applicazione Kafka.

L'immagine seguente mostra un esempio di uno dei dashboard creati da questa soluzione.

![Un'immagine che mostra un esempio di cartella dashboard Grafana creata utilizzando questa soluzione.](http://docs.aws.amazon.com/it_it/grafana/latest/userguide/images/kafka-solution-cluster-overview.png)


Le metriche vengono elaborate con un intervallo di scraping di 1 minuto. I dashboard mostrano le metriche aggregate a 1 minuto, 5 minuti o più, in base alla metrica specifica.

Per un elenco delle metriche tracciate da questa soluzione, consulta. [Elenco delle metriche tracciate](#solution-kafka-metrics)

## Costi
<a name="solution-kafka-costs"></a>

Questa soluzione crea e utilizza risorse nell'area di lavoro. Ti verrà addebitato l'utilizzo standard delle risorse create, tra cui:
+ Accesso agli spazi di lavoro Amazon Managed Grafana da parte degli utenti. Per ulteriori informazioni sui prezzi, consulta i prezzi di [Amazon Managed Grafana](https://aws.amazon.com/grafana/pricing/).
+ Acquisizione e archiviazione delle metriche di Amazon Managed Service for Prometheus e analisi dei parametri (elaborazione di esempi di query). Il numero di parametri utilizzati da questa soluzione dipende dalla configurazione e dall'utilizzo dell'applicazione.

  *Puoi visualizzare i parametri di ingestione e archiviazione in Amazon Managed Service for Prometheus utilizzando Per CloudWatch ulteriori informazioni, consulta i parametri [CloudWatchnella](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) Guida per l'utente di Amazon Managed Service for Prometheus.*

  Puoi stimare il costo utilizzando il calcolatore dei prezzi nella pagina dei prezzi di [Amazon Managed Service for Prometheus](https://aws.amazon.com/prometheus/pricing/). Il numero di parametri dipenderà dal numero di nodi del cluster e dai parametri prodotti dalle applicazioni.
+ Costi di rete. È possibile che vengano addebitati costi AWS di rete standard per diverse zone di disponibilità, regioni o altro traffico.

I calcolatori dei prezzi, disponibili nella pagina dei prezzi di ciascun prodotto, possono aiutarti a comprendere i costi potenziali della tua soluzione. Le seguenti informazioni possono aiutare a calcolare un costo base per la soluzione in esecuzione nella stessa zona di disponibilità del cluster Amazon EKS.


| Prodotto | Metrica della calcolatrice | Valore | 
| --- | --- | --- | 
| Amazon Managed Service per Prometheus | Serie Active | 95 (per cialda Kafka) | 
|  | Intervallo di raccolta medio | 60 (secondi) | 
| Grafana gestito da Amazon | Numero di attivi editors/administrators | 1 (o più, in base ai tuoi utenti) | 

Questi numeri sono i numeri base per una soluzione che esegue Kafka su Amazon EKS. In questo modo otterrai una stima dei costi base. Man mano che aggiungerete i pod Kafka alla vostra applicazione, i costi aumenteranno, come mostrato. Questi costi escludono i costi di utilizzo della rete, che varieranno a seconda che l'area di lavoro Amazon Managed Grafana, l'area di lavoro Amazon Managed Service for Prometheus e il cluster Amazon EKS si trovino nella stessa zona di disponibilità e la VPN. Regione AWS

## Prerequisiti
<a name="solution-kafka-prerequisites"></a>

Questa soluzione richiede che tu abbia effettuato le seguenti operazioni prima di utilizzarla.

1. Devi avere o **creare un cluster Amazon Elastic Kubernetes Service** che desideri monitorare e il cluster deve avere almeno un nodo. Il cluster deve avere l'accesso agli endpoint del server API impostato in modo da includere l'accesso privato (può anche consentire l'accesso pubblico).

   La [modalità di autenticazione](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) deve includere l'accesso all'API (può essere impostata su una delle due `API` opzioni`API_AND_CONFIG_MAP`). Ciò consente all'implementazione della soluzione di utilizzare le voci di accesso.

   Nel cluster deve essere installato quanto segue (vero per impostazione predefinita quando si crea il cluster tramite la console, ma deve essere aggiunto se si crea il cluster utilizzando l' AWS API o AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS e Amazon EBS CSI AddOns Driver (il driver Amazon EBS CSI non è tecnicamente necessario per la soluzione Kube-proxy , ma è richiesto per la maggior parte delle applicazioni Kafka). AddOn 

   *Salva* il nome del cluster per specificarlo in un secondo momento. È possibile trovarlo nei dettagli del cluster nella console Amazon EKS.
**Nota**  
Per informazioni dettagliate su come creare un cluster Amazon EKS, consulta [Guida introduttiva ad Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Devi eseguire un'applicazione Apache Kafka su macchine virtuali Java sul tuo cluster Amazon EKS.

1. Devi **creare uno spazio di lavoro Amazon Managed Service for Prometheus** nello stesso Account AWS spazio del tuo cluster Amazon EKS. Per i dettagli, consulta la Guida per l'[utente di Create a workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) nella *Amazon Managed Service for Prometheus User* Guide.

   *Salva l'ARN dell'area di lavoro Amazon Managed Service for Prometheus per specificarlo in seguito.*

1. Devi **creare uno spazio di lavoro Amazon Managed Grafana con** Grafana versione 9 o successiva, nello stesso del tuo cluster Amazon EKS Regione AWS . Per dettagli sulla creazione di un nuovo spazio di lavoro, consulta. [Crea uno spazio di lavoro Amazon Managed Grafana](AMG-create-workspace.md)

   Il ruolo dell'area di lavoro deve disporre delle autorizzazioni per accedere ad Amazon Managed Service for Prometheus e alle API di Amazon. CloudWatch Il modo più semplice per farlo è utilizzare [Service-managedle autorizzazioni](AMG-manage-permissions.md) e selezionare Amazon Managed Service for Prometheus e. CloudWatch Puoi anche aggiungere manualmente le [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)politiche [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)e al tuo ruolo IAM nel tuo spazio di lavoro.

   *Salva l'ID e l'endpoint dell'area di lavoro Amazon Managed Grafana per specificarli in un secondo momento.* L'ID è nel modulo. `g-123example` L'ID e l'endpoint sono disponibili nella console Amazon Managed Grafana. L'endpoint è l'URL dell'area di lavoro e include l'ID. Ad esempio, `https://g-123example.grafana-workspace.<region>.amazonaws.com/`.

**Nota**  
Sebbene non sia strettamente necessario per configurare la soluzione, devi configurare l'autenticazione degli utenti nel tuo spazio di lavoro Amazon Managed Grafana prima che gli utenti possano accedere ai dashboard creati. Per ulteriori informazioni, consulta [Autentica gli utenti nelle aree di lavoro Amazon Managed Grafana](authentication-in-AMG.md).

## Utilizzo di questa soluzione
<a name="solution-kafka-use"></a>

Questa soluzione configura l' AWS infrastruttura per supportare i parametri di reporting e monitoraggio di un'applicazione Kafka in esecuzione in un cluster Amazon EKS. Puoi installarlo usando. [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**Nota**  
I passaggi seguenti presuppongono che tu abbia un ambiente con AWS CLI, and AWS CDK, e entrambi [Node.js](https://nodejs.org/)e [NPM](https://docs.npmjs.com/) installati. Utilizzerai `make` e `brew` semplificherai la compilazione e altre azioni comuni.

**Utilizzare questa soluzione per monitorare un cluster Amazon EKS con AWS CDK**

1. Assicurati di aver completato tutti i passaggi relativi ai [prerequisiti](#solution-kafka-prerequisites).

1. Scarica tutti i file per la soluzione da Amazon S3. I file si trovano in `s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac` e puoi scaricarli con il seguente comando Amazon S3. Esegui questo comando da una cartella nel tuo ambiente a riga di comando.

   ```
   aws s3 sync s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   Non è necessario modificare questi file.

1. Nell'ambiente a riga di comando (dalla cartella in cui sono stati scaricati i file della soluzione), esegui i comandi seguenti.

   Imposta le variabili di ambiente necessarie. Sostituisci {{REGION}} {{AMG\_ENDPOINT}}{{EKS\_CLUSTER}}, e {{AMP\_ARN}} con il tuo Regione AWS endpoint dell'area di lavoro Amazon Managed Grafana (nel modulo)`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`, il nome del cluster Amazon EKS e l'ARN dell'area di lavoro Amazon Managed Service for Prometheus.

   ```
   export AWS_REGION={{REGION}}
   export AMG_ENDPOINT={{AMG_ENDPOINT}}
   export EKS_CLUSTER_NAME={{EKS_CLUSTER}}
   export AMP_WS_ARN={{AMP_ARN}}
   ```

1. È necessario creare annotazioni che possano essere utilizzate dalla distribuzione. Puoi scegliere di annotare un namespace, una distribuzione, uno statefulset, un daemonset o direttamente i tuoi pod. La soluzione Kafka richiede cinque annotazioni. Utilizzerai `kubectl` per annotare le tue risorse con i seguenti comandi:

   ```
   kubectl annotate {{<resource-type>}} {{<resource-value>}} instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate {{<resource-type>}} {{<resource-value>}} cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   kubectl annotate {{<resource-type>}} {{<resource-value>}} cloudwatch.aws.amazon.com/inject-jmx-kafka=true
   kubectl annotate {{<resource-type>}} {{<resource-value>}} cloudwatch.aws.amazon.com/inject-jmx-kafka-producer=true
   kubectl annotate {{<resource-type>}} {{<resource-value>}} cloudwatch.aws.amazon.com/inject-jmx-kafka-consumer=true
   ```

   Sostituisci {{<resource-type>}} e {{<resource-value>}} con i valori corretti per il tuo sistema. Ad esempio, per annotare la `foo` distribuzione, il primo comando sarebbe:

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Crea un token di account di servizio con accesso ADMIN per chiamare le API HTTP Grafana. Per informazioni dettagliate, vedi [Utilizzo degli account di servizio](v12-authenticating-grafana-apis.md#v12-service-accounts). È possibile utilizzare il AWS CLI con i seguenti comandi per creare il token. Dovrai sostituirlo {{GRAFANA\_ID}} con l'ID del tuo spazio di lavoro Grafana (sarà nel modulo). `g-123example` Questa chiave scadrà dopo 7.200 secondi o 2 ore. È possibile modificare l'ora (`seconds-to-live`), se necessario. L'implementazione richiede meno di un'ora.

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id {{GRAFANA_ID}} \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Rendi disponibile la chiave API AWS CDK aggiungendola a AWS Systems Manager con il seguente comando. Sostituiscila {{AWS\_REGION}} con la regione in cui verrà eseguita la soluzione (nel modulo`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-kafka-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region {{AWS_REGION}} \
     --overwrite
   ```

1. Esegui il `make` comando seguente, che installerà tutte le altre dipendenze per il progetto.

   ```
   make deps
   ```

1. Infine, esegui il AWS CDK progetto:

   ```
   make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
   ```

1. [Facoltativo] Una volta completata la creazione dello stack, puoi utilizzare lo stesso ambiente per creare più istanze dello stack per altre applicazioni Kafka in esecuzione su cluster Amazon EKS nella stessa regione, purché soddisfi gli altri prerequisiti per ciascuna (inclusi spazi di lavoro Amazon Managed Grafana e Amazon Managed Service for Prometheus separati). Dovrai ridefinire i comandi con i nuovi parametri. `export`

Una volta completata la creazione dello stack, il tuo spazio di lavoro Amazon Managed Grafana verrà popolato con una dashboard che mostra i parametri per l'applicazione e il cluster Amazon EKS. La visualizzazione delle metriche richiederà alcuni minuti, man mano che le metriche vengono raccolte.

## Elenco delle metriche tracciate
<a name="solution-kafka-metrics"></a>

Questa soluzione raccoglie le metriche dall'applicazione Kafka. JVM-based Queste metriche vengono archiviate in Amazon Managed Service for Prometheus e quindi visualizzate nelle dashboard di Amazon Managed Grafana.

Con questa soluzione vengono tracciate le seguenti metriche.
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.è trascorso
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.committed
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.committed
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.committed
+ jvm.threads.count
+ kafka.message.count
+ kafka.request.count
+ kafka.request.fallito
+ kafka.request.time.total
+ kafka.request.time.50p
+ kafka.request.time.99p
+ kafka.request.time.avg
+ kafka.network.io
+ kafka.purgatory.size
+ kafka.partition.count
+ kafka.partition.offline
+ kafka.partition.under\_replicated
+ kafka.isr.operation.count
+ kafka.max.lag
+ kafka.controller.active.count
+ kafka.leader.election.rate
+ kafka.unclean.election.rate
+ kafka.request.queue
+ kafka.logs.flush.time.count
+ kafka.logs.flush.time.median
+ kafka.logs.flush.time.99p
+ kafka.consumer.fetch-rate
+ kafka.consumer.records-lag-max
+ kafka.consumer.total.bytes-consumed-rate
+ kafka.consumer.total.fetch-size-avg
+ kafka.consumer.total.records-consumed-rate
+ kafka.consumer.bytes-consumed-rate
+ kafka.consumer.fetch-size-avg
+ kafka.consumer.records-consumed-rate
+ kafka.producer.io-time-ns-avg
+ kafka.producer.outgoing-byte-rate
+ kafka.producer.request-latency-avg
+ kafka.producer.request-rate
+ kafka.producer.response-rate
+ kafka.producer.byte-rate
+ kafka.producer.compression-rate
+ kafka.producer.record-rate
+ kafka.producer.record-retry-rate
+ kafka.producer.record-rate

## Risoluzione dei problemi
<a name="solution-kafka-troubleshooting"></a>

Ci sono alcune cose che possono far fallire la configurazione del progetto. Assicurati di controllare quanto segue.
+ È necessario completare tutti i [prerequisiti](#solution-kafka-prerequisites) prima di installare la soluzione.
+ Il cluster deve contenere almeno un nodo prima di tentare di creare la soluzione o accedere alle metriche.
+ Nel cluster Amazon EKS devono essere installati `AWS CNI` `CoreDNS` `kube-proxy` i componenti aggiuntivi. Se non sono installati, la soluzione non funzionerà correttamente. Vengono installati per impostazione predefinita, quando si crea il cluster tramite la console. Potrebbe essere necessario installarli se il cluster è stato creato tramite un AWS SDK.
+ L'installazione dei pod Amazon EKS è scaduta. Questo può accadere se la capacità disponibile dei nodi non è sufficiente. Le cause di questi problemi sono molteplici, tra cui:
  + Il cluster Amazon EKS è stato inizializzato con Fargate anziché Amazon EC2. Questo progetto richiede Amazon EC2.
  + I nodi sono [contaminati](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) e quindi non disponibili.

    Puoi usarlo `kubectl describe node {{NODENAME}} | grep Taints` per controllare le macchie. Quindi `kubectl taint node {{NODENAME}} {{TAINT_NAME}}-` per rimuovere le macchie. Assicurati di includere il nome `-` dopo il nome della macchia.
  + I nodi hanno raggiunto il limite di capacità. In questo caso puoi creare un nuovo nodo o aumentare la capacità.
+ Non vedi alcuna dashboard in Grafana: stai utilizzando l'ID dell'area di lavoro Grafana errato.

  Esegui il seguente comando per ottenere informazioni su Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Puoi controllare i risultati per l'URL corretto dell'area di lavoro. Se non è quello che ti aspetti, esegui nuovamente la distribuzione con l'ID dell'area di lavoro corretto.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://{{g-123example}}.grafana-workspace.{{aws-region}}.amazonaws.com
  Status:
    Admin URL:  https://{{g-123example}}.grafana-workspace.{{aws-region}}.amazonaws.com
    Dashboards:
      ...
  ```
+ Non vedi alcuna dashboard in Grafana: stai utilizzando una chiave API scaduta.

  Per cercare questo caso, è necessario contattare l'operatore grafana e verificare la presenza di errori nei log. Ottieni il nome dell'operatore Grafana con questo comando:

  ```
  kubectl get pods -n grafana-operator
  ```

  Questo restituirà il nome dell'operatore, ad esempio:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  {{grafana-operator-1234abcd5678ef90}}   1/1     Running   0          1h2m
  ```

  Utilizzate il nome dell'operatore nel seguente comando:

  ```
  kubectl logs {{grafana-operator-1234abcd5678ef90}} -n grafana-operator
  ```

  Messaggi di errore come i seguenti indicano una chiave API scaduta:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  In questo caso, crea una nuova chiave API e distribuisci nuovamente la soluzione. Se il problema persiste, puoi forzare la sincronizzazione utilizzando il seguente comando prima della ridistribuzione:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ Parametro SSM mancante. Se vedi un errore come il seguente, esegui `cdk bootstrap` e riprova.

  ```
  Deployment failed: Error: aws-observability-solution-kafka-eks-{{$EKS_CLUSTER_NAME}}: SSM 
  parameter /cdk-bootstrap/{{xxxxxxx}}/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```