Soluzione per il monitoraggio delle applicazioni Kafka con Amazon Managed Grafana - Grafana gestito da Amazon

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

Le applicazioni basate su Apache Kafka hanno esigenze di monitoraggio specializzate. Questa pagina descrive un modello che fornisce una soluzione per il monitoraggio delle applicazioni Kafka in esecuzione su macchine virtuali Java sul tuo cluster AmazonEKS. La soluzione può essere installata utilizzando. AWS Cloud Development Kit (AWS CDK)

Nota

Questa soluzione non supporta il monitoraggio delle applicazioni Amazon Managed Streaming for Apache Kafka. Per informazioni sul monitoraggio delle MSK applicazioni Amazon, consulta Monitorare un MSK cluster Amazon nella Amazon 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 () dal tuo cluster Amazon. JVM EKS

  • Raccolta di parametri e JVM parametri specifici su Kafka 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 JVM i parametri Kafka per la tua applicazione in esecuzione su AmazonEKS, ma non include i parametri Amazon. EKS Puoi utilizzare la soluzione Observability per monitorare Amazon EKS per visualizzare metriche e avvisi per il tuo cluster Amazon. EKS

Informazioni su questa soluzione

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.

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

Costi

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.

  • 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 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. 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 EKS cluster Amazon.

Product 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 editori/amministratori attivi

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 EKS cluster Amazon si trovino nella stessa zona di disponibilità, e. Regione AWS VPN

Prerequisiti

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 API del server impostato in modo da includere l'accesso privato (può anche consentire l'accesso pubblico).

    La modalità di autenticazione deve includere API l'accesso (può essere impostata su una delle due opzioni APIAPI_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 AWS API o AWS CLI): Amazon EKS Pod Identity Agent, Core AWS CNIDNS, Kube-Proxy e Amazon EBS CSI Driver ( AddOns il driver Amazon non AddOn è tecnicamente necessario per la soluzione, ma è richiesto per la maggior parte delle applicazioni Kafka). EBS CSI

    Salva il nome del cluster per specificarlo in seguito. È possibile trovarlo nei dettagli del cluster nella EKS console Amazon.

    Nota

    Per informazioni dettagliate su come creare un EKS cluster Amazon, consulta la sezione Guida introduttiva ad Amazon EKS.

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

  3. Devi creare uno spazio di lavoro Amazon Managed Service for Prometheus nello stesso spazio del tuo cluster Amazon. Account AWS EKS Per i dettagli, consulta la Guida per l'utente di Create a workspace nella Amazon Managed Service for Prometheus User Guide.

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

  4. Devi creare uno spazio di lavoro Amazon Managed Grafana con Grafana versione 9 o successiva, nello stesso del tuo cluster Amazon. Regione AWS EKS Per dettagli sulla creazione di un nuovo spazio di lavoro, consulta. Crea uno spazio di lavoro Amazon Managed Grafana

    Il ruolo dell'area di lavoro deve disporre delle autorizzazioni per accedere ad Amazon Managed Service per Prometheus e Amazon. CloudWatch APIs Il modo più semplice per farlo è utilizzare le autorizzazioni gestite dal servizio e selezionare Amazon Managed Service for Prometheus e. CloudWatch Puoi anche aggiungere manualmente le politiche e al tuo ruolo nell'area di AmazonPrometheusQueryAccesslavoro AmazonGrafanaCloudWatchAccess. IAM

    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 serve URL per l'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.

Utilizzo di questa soluzione

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)

Nota

I passaggi seguenti presuppongono che si disponga di un ambiente con e AWS CLI AWS CDK, e sia Node.js che NPMinstallato. Utilizzerai make e brew semplificherai la compilazione e altre azioni comuni.

Per utilizzare questa soluzione per monitorare un EKS cluster Amazon con AWS CDK
  1. Assicurati di aver completato tutti i passaggi relativi ai prerequisiti.

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

  3. 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_ENDPOINTEKS_CLUSTER, e AMP_ARN con il tuo Regione AWS endpoint di spazio di lavoro Amazon Managed Grafana (nel modulo)http://g-123example.grafana-workspace.us-east-1.amazonaws.com, il nome del EKS cluster Amazon e l'area di lavoro Amazon Managed Service for Prometheus. ARN

    export AWS_REGION=REGION export AMG_ENDPOINT=AMG_ENDPOINT export EKS_CLUSTER_NAME=EKS_CLUSTER export AMP_WS_ARN=AMP_ARN
  4. È 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
  5. Crea un token di account di servizio con ADMIN accesso per chiamare Grafana HTTPAPIs. Per informazioni dettagliate, consultare Usa gli account di servizio per l'autenticazione con Grafana HTTP APIs. È 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 API chiave AWS CDK aggiungendola a AWS Systems Manager con il seguente comando. Sostituiscila AWS_REGION con la regione in cui verrà eseguita la soluzione (nel modulous-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
  6. Esegui il make comando seguente, che installerà tutte le altre dipendenze per il progetto.

    make deps
  7. Infine, esegui il AWS CDK progetto:

    make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
  8. [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 EKS cluster Amazon 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

Questa soluzione raccoglie le metriche dall'applicazione Kafka basata sull'utenteJVM. 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-wait-time-ns-media

  • 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-error-rate

  • kafka.producer. record-retry-rate

  • kafka.producer. record-send-rate

Risoluzione dei problemi

Ci sono alcune cose che possono causare il fallimento della configurazione del progetto. Assicurati di controllare quanto segue.

  • È necessario completare tutti i prerequisiti prima di installare la soluzione.

  • Il cluster deve contenere almeno un nodo prima di tentare di creare la soluzione o accedere alle metriche.

  • Nel EKS cluster Amazon 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 EKS di Amazon pod è scaduta. Questo può accadere se la capacità disponibile dei nodi non è sufficiente. Le cause di questi problemi sono molteplici, tra cui:

    • Il EKS cluster Amazon è stato inizializzato con Fargate anziché Amazon. EC2 Questo progetto richiede AmazonEC2.

    • I nodi sono contaminati e quindi non disponibili.

      È possibile utilizzarlo 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 usando 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'area di lavoro URL corretta. 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 alcun pannello di controllo in Grafana: stai utilizzando una API chiave 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 API chiave 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 API chiave 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 mancante. SSM 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)