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

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.
-
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
API
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 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.
-
Devi eseguire un'applicazione Apache Kafka su macchine virtuali Java sul tuo cluster Amazon. EKS
-
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.
-
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 esempiohttps://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
Per utilizzare questa soluzione per monitorare un EKS cluster Amazon con AWS CDK
-
Assicurati di aver completato tutti i passaggi relativi ai prerequisiti.
-
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.
-
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
, eAMP_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. ARNexport AWS_REGION=
REGION
export AMG_ENDPOINT=AMG_ENDPOINT
export EKS_CLUSTER_NAME=EKS_CLUSTER
export AMP_WS_ARN=AMP_ARN
-
È 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=trueSostituisci
<resource-type>
e<resource-value>
con i valori corretti per il tuo sistema. Ad esempio, per annotare lafoo
distribuzione, il primo comando sarebbe:kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
-
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 -
Esegui il
make
comando seguente, che installerà tutte le altre dipendenze per il progetto.make deps
-
Infine, esegui il AWS CDK progetto:
make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
-
[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
per controllare le macchie. QuindiNODENAME
| grep Taintskubectl taint node
per rimuovere le macchie. Assicurati di includere il nomeNODENAME
TAINT_NAME
--
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 1h2mUtilizzate il nome dell'operatore nel seguente comando:
kubectl logs
grafana-operator-1234abcd5678ef90
-n grafana-operatorMessaggi 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)