Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Anwendungen, die auf Apache
Anmerkung
Diese Lösung unterstützt nicht die Überwachung von Amazon Managed Streaming for Apache Kafka Kafka-Anwendungen. Informationen zur Überwachung von Amazon MSK-Anwendungen finden Sie unter Überwachen eines Amazon MSK-Clusters im Amazon Managed Streaming for Apache Kafka Developer Guide.
Diese Lösung konfiguriert:
-
Ihr Amazon Managed Service for Prometheus Workspace zum Speichern von Kafka- und Java Virtual Machine (JVM) -Metriken aus Ihrem Amazon EKS-Cluster.
-
Erfassung spezifischer Kafka- und JVM-Metriken mithilfe des CloudWatch Agenten sowie eines Agenten-Add-ons. CloudWatch Die Metriken sind so konfiguriert, dass sie an den Amazon Managed Service for Prometheus Workspace gesendet werden.
-
Ihr Amazon Managed Grafana-Workspace, um diese Metriken abzurufen und Dashboards zu erstellen, mit denen Sie Ihren Cluster überwachen können.
Anmerkung
Diese Lösung bietet JVM- und Kafka-Metriken für Ihre Anwendung, die auf Amazon EKS ausgeführt wird, beinhaltet jedoch keine Amazon EKS-Metriken. Sie können die Observability-Lösung für die Überwachung von Amazon EKS verwenden, um Metriken und Warnungen für Ihren Amazon EKS-Cluster zu sehen.
Informationen zu dieser Lösung
Diese Lösung konfiguriert einen Amazon Managed Grafana-Workspace, um Metriken für Ihre Apache Kafka-Anwendung bereitzustellen. Die Metriken werden verwendet, um Dashboards zu generieren, die Ihnen helfen, Ihre Anwendung effektiver zu betreiben, indem sie Einblicke in die Leistung und Arbeitslast der Kafka-Anwendung bieten.
Die folgende Abbildung zeigt ein Beispiel für eines der Dashboards, die mit dieser Lösung erstellt wurden.

Die Metriken werden mit einem Scrape-Intervall von 1 Minute gescrapt. Die Dashboards zeigen Metriken, die auf der Grundlage der jeweiligen Metrik auf 1 Minute, 5 Minuten oder mehr aggregiert sind.
Eine Liste der von dieser Lösung erfassten Messwerte finden Sie unter. Liste der erfassten Metriken
Kosten
Diese Lösung erstellt und verwendet Ressourcen in Ihrem Workspace. Ihnen wird die Standardnutzung der erstellten Ressourcen in Rechnung gestellt, einschließlich:
-
Zugriff auf Amazon Managed Grafana-Workspace durch Benutzer. Weitere Informationen zur Preisgestaltung finden Sie unter Amazon Managed Grafana-Preise
. -
Amazon Managed Service für die Erfassung und Speicherung von Metriken mit Prometheus sowie die metrische Analyse (Verarbeitung von Abfragebeispielen). Die Anzahl der von dieser Lösung verwendeten Metriken hängt von Ihrer Anwendungskonfiguration und -nutzung ab.
Sie können die Aufnahme- und Speichermetriken in Amazon Managed Service for Prometheus unter Weitere Informationen finden Sie unter CloudWatch CloudWatchMetriken im Amazon Managed Service for Prometheus User Guide.
Sie können die Kosten mit dem Preisrechner auf der Preisseite von Amazon Managed Service für Prometheus
abschätzen. Die Anzahl der Metriken hängt von der Anzahl der Knoten in Ihrem Cluster und den Metriken ab, die Ihre Anwendungen erzeugen. -
Netzwerkkosten. Möglicherweise fallen AWS Standardnetzwerkgebühren für zonenübergreifenden, regionalen oder anderen Datenverkehr an.
Mithilfe der Preisrechner, die auf der Preisseite für jedes Produkt verfügbar sind, können Sie sich ein Bild über die potenziellen Kosten Ihrer Lösung machen. Die folgenden Informationen können Ihnen helfen, die Grundkosten für die Lösung zu ermitteln, die in derselben Availability Zone wie der Amazon EKS-Cluster ausgeführt wird.
Produkt | Metrik für den Rechner | Wert |
---|---|---|
Amazon Managed Service für Prometheus |
Aktive Serie |
95 (pro Kafka-Pod) |
Durchschnittliches Erfassungsintervall |
60 (Sekunden) |
|
Amazon Managed Grafana |
Anzahl der aktiven Editoren/Administratoren |
1 (oder mehr, basierend auf Ihren Benutzern) |
Diese Zahlen sind die Basiszahlen für eine Lösung, die Kafka auf Amazon EKS ausführt. Auf diese Weise erhalten Sie eine Schätzung der Grundkosten. Wenn Sie Ihrer Anwendung Kafka-Pods hinzufügen, steigen die Kosten, wie in der Abbildung dargestellt. Bei diesen Kosten sind die Kosten für die Netzwerknutzung nicht berücksichtigt. Diese hängen davon ab, ob sich der Amazon Managed Grafana-Workspace, der Amazon Managed Service for Prometheus Workspace und der Amazon EKS-Cluster in derselben Availability Zone befinden AWS-Region, und VPN.
Voraussetzungen
Für diese Lösung müssen Sie vor der Verwendung der Lösung Folgendes getan haben.
-
Sie müssen über einen Amazon Elastic Kubernetes Service Service-Cluster verfügen oder einen solchen erstellen, den Sie überwachen möchten, und der Cluster muss mindestens einen Knoten haben. Für den Cluster muss der Zugriff auf den API-Serverendpunkt so eingerichtet sein, dass er privaten Zugriff beinhaltet (er kann auch öffentlichen Zugriff zulassen).
Der Authentifizierungsmodus muss API-Zugriff beinhalten (er kann entweder auf
API
oder eingestellt werdenAPI_AND_CONFIG_MAP
). Dadurch kann die Lösungsbereitstellung Zugriffseinträge verwenden.Folgendes sollte im Cluster installiert sein (standardmäßig wahr, wenn der Cluster über die Konsole erstellt wird, muss aber hinzugefügt werden, wenn Sie den Cluster mithilfe der AWS API erstellen oder AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS, Kube-Proxy und Amazon EBS CSI-Treiber AddOns (der Amazon EBS CSI-Treiber AddOn ist für die Lösung technisch nicht erforderlich, aber für die meisten Kafka-Anwendungen erforderlich).
Speichern Sie den Clusternamen, um ihn später anzugeben. Dies finden Sie in den Cluster-Details in der Amazon EKS-Konsole.
Anmerkung
Einzelheiten zum Erstellen eines Amazon EKS-Clusters finden Sie unter Erste Schritte mit Amazon EKS.
-
Sie müssen eine Apache Kafka-Anwendung auf Java Virtual Machines auf Ihrem Amazon EKS-Cluster ausführen.
-
Sie müssen einen Amazon Managed Service for Prometheus Workspace in derselben Umgebung AWS-Konto wie Ihr Amazon EKS-Cluster erstellen. Einzelheiten finden Sie unter Einen Workspace erstellen im Amazon Managed Service for Prometheus Benutzerhandbuch.
Speichern Sie den Workspace-ARN von Amazon Managed Service for Prometheus, um ihn später anzugeben.
-
Sie müssen einen Amazon Managed Grafana-Workspace mit Grafana-Version 9 oder neuer erstellen, genau AWS-Region wie Ihr Amazon EKS-Cluster. Einzelheiten zum Erstellen eines neuen Workspace finden Sie unter. Erstellen Sie einen Amazon Managed Grafana-Arbeitsbereich
Die Workspace-Rolle muss über Berechtigungen für den Zugriff auf Amazon Managed Service für Prometheus und Amazon verfügen. CloudWatch APIs Der einfachste Weg, dies zu tun, besteht darin, vom Service verwaltete Berechtigungen zu verwenden und Amazon Managed Service für Prometheus und auszuwählen. CloudWatch Sie können die AmazonGrafanaCloudWatchAccessRichtlinien AmazonPrometheusQueryAccessund auch manuell zu Ihrer Workspace-IAM-Rolle hinzufügen.
Speichern Sie die Amazon Managed Grafana-Workspace-ID und den Endpunkt, um sie später anzugeben. Die ID ist im Formular
g-123example
. Die ID und der Endpunkt befinden sich in der Amazon Managed Grafana-Konsole. Der Endpunkt ist die URL für den Workspace und enthält die ID. Beispiel,https://g-123example.grafana-workspace.<region>.amazonaws.com/
.
Anmerkung
Die Einrichtung der Lösung ist zwar nicht unbedingt erforderlich, Sie müssen jedoch die Benutzerauthentifizierung in Ihrem Amazon Managed Grafana-Arbeitsbereich einrichten, bevor Benutzer auf die erstellten Dashboards zugreifen können. Weitere Informationen finden Sie unter Authentifizieren Sie Benutzer in Amazon Managed Grafana-Arbeitsbereichen.
Verwenden Sie diese Lösung
Diese Lösung konfiguriert die AWS Infrastruktur so, dass sie Berichts- und Überwachungsmetriken aus einer Kafka-Anwendung unterstützt, die in einem Amazon EKS-Cluster ausgeführt wird. Sie können es installieren mit. AWS Cloud Development Kit (AWS CDK)
Anmerkung
Um diese Lösung zur Überwachung eines Amazon EKS-Clusters zu verwenden mit AWS CDK
-
Stellen Sie sicher, dass Sie alle erforderlichen Schritte abgeschlossen haben.
-
Laden Sie alle Dateien für die Lösung von Amazon S3 herunter. Die Dateien befinden sich unter
s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac
, und Sie können sie mit dem folgenden Amazon S3 S3-Befehl herunterladen. Führen Sie diesen Befehl in einem Ordner in Ihrer Befehlszeilenumgebung aus.aws s3 sync s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac/ .
Sie müssen diese Dateien nicht ändern.
-
Führen Sie in Ihrer Befehlszeilenumgebung (aus dem Ordner, in den Sie die Lösungsdateien heruntergeladen haben) die folgenden Befehle aus.
Richten Sie die benötigten Umgebungsvariablen ein. Ersetzen Sie
REGION
,AMG_ENDPOINT
EKS_CLUSTER
, undAMP_ARN
durch Ihren AWS-Region Amazon Managed Grafana-Workspace-Endpunkt (im Formularhttp://g-123example.grafana-workspace.us-east-1.amazonaws.com
), den Amazon EKS-Clusternamen und den Amazon Managed Service for Prometheus Workspace-ARN.export AWS_REGION=
REGION
export AMG_ENDPOINT=AMG_ENDPOINT
export EKS_CLUSTER_NAME=EKS_CLUSTER
export AMP_WS_ARN=AMP_ARN
-
Sie müssen Anmerkungen erstellen, die von der Bereitstellung verwendet werden können. Sie können wählen, ob Sie einen Namespace, ein Deployment, ein Statefulset, ein Daemonset oder Ihre Pods direkt mit Anmerkungen versehen möchten. Die Kafka-Lösung erfordert fünf Anmerkungen. Sie werden verwenden
kubectl
, um Ihre Ressourcen mit den folgenden Befehlen zu kommentieren: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=trueErsetzen Sie
<resource-type>
und<resource-value>
durch die richtigen Werte für Ihr System. Um beispielsweise Ihrefoo
Bereitstellung mit Anmerkungen zu versehen, wäre Ihr erster Befehl:kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
-
Erstellen Sie ein Dienstkonto-Token mit ADMIN-Zugriff für den Aufruf von Grafana HTTP APIs. Details hierzu finden Sie unter Verwenden Sie Dienstkonten, um sich mit dem Grafana-HTTP zu authentifizieren APIs. Sie können das AWS CLI mit den folgenden Befehlen verwenden, um das Token zu erstellen. Sie müssen das durch die
GRAFANA_ID
ID Ihres Grafana-Workspace ersetzen (sie wird im Formular angegebeng-123example
). Dieser Schlüssel läuft nach 7.200 Sekunden oder 2 Stunden ab. Sie können die Uhrzeit (seconds-to-live
) bei Bedarf ändern. Die Bereitstellung dauert weniger als eine Stunde.# 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)Stellen Sie den API-Schlüssel für die zur Verfügung, AWS CDK indem Sie ihn AWS Systems Manager mit dem folgenden Befehl hinzufügen.
AWS_REGION
Ersetzen Sie es durch die Region, in der Ihre Lösung ausgeführt werden soll (im Formularus-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 -
Führen Sie den folgenden
make
Befehl aus, der alle anderen Abhängigkeiten für das Projekt installiert.make deps
-
Führen Sie abschließend das AWS CDK Projekt aus:
make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
-
[Optional] Nach Abschluss der Stack-Erstellung können Sie dieselbe Umgebung verwenden, um weitere Instanzen des Stacks für andere Kafka-Anwendungen zu erstellen, die auf Amazon EKS-Clustern in derselben Region ausgeführt werden, sofern Sie die anderen Voraussetzungen für jede Anwendung erfüllen (einschließlich separater Amazon Managed Grafana- und Amazon Managed Service for Prometheus-Arbeitsbereiche). Sie müssen die Befehle mit den neuen Parametern neu definieren.
export
Wenn die Stack-Erstellung abgeschlossen ist, wird Ihr Amazon Managed Grafana-Workspace mit einem Dashboard gefüllt, das Metriken für Ihre Anwendung und Ihren Amazon EKS-Cluster anzeigt. Es dauert einige Minuten, bis die Metriken angezeigt werden, da die Metriken gesammelt wurden.
Liste der erfassten Metriken
Diese Lösung sammelt Metriken aus Ihrer JVM-basierten Kafka-Anwendung. Diese Metriken werden in Amazon Managed Service for Prometheus gespeichert und dann in Amazon Managed Grafana-Dashboards angezeigt.
Die folgenden Metriken werden mit dieser Lösung erfasst.
jvm.classes.loaded
jvm.gc.collections.count
jvm.gc.collections.elapsed
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.gebraucht
jvm.memory.pool.committed
jvm.threads.count
kafka.message.count
kafka.request.count
kafka.request.ist fehlgeschlagen
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_repliziert
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.verbraucher. 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.produzent. io-wait-time-ns-durchschnittlich
kafka.produzent. outgoing-byte-rate
kafka.produzent. request-latency-avg
kafka.producer.request-rate
kafka.producer.Antwortrate
kafka.producer.byte-rate
kafka.producer.com/Kompressionsrate
kafka.producer. record-error-rate
kafka.produzent. record-retry-rate
kafka.produzent. record-send-rate
Fehlerbehebung
Es gibt einige Dinge, die dazu führen können, dass die Einrichtung des Projekts fehlschlägt. Stellen Sie sicher, dass Sie Folgendes überprüfen.
-
Sie müssen alle Voraussetzungen erfüllen, bevor Sie die Lösung installieren können.
-
Der Cluster muss mindestens einen Knoten enthalten, bevor Sie versuchen können, die Lösung zu erstellen oder auf die Metriken zuzugreifen.
-
In Ihrem Amazon EKS-Cluster müssen die
AWS CNI
CoreDNS
undkube-proxy
Add-Ons installiert sein. Wenn sie nicht installiert sind, funktioniert die Lösung nicht richtig. Sie werden standardmäßig installiert, wenn der Cluster über die Konsole erstellt wird. Möglicherweise müssen Sie sie installieren, wenn der Cluster über ein AWS SDK erstellt wurde. -
Bei der Installation der Amazon EKS-Pods wurde das Zeitlimit überschritten. Dies kann passieren, wenn nicht genügend Knotenkapazität verfügbar ist. Es gibt mehrere Ursachen für diese Probleme, darunter:
-
Der Amazon EKS-Cluster wurde mit Fargate statt mit Amazon initialisiert. EC2 Für dieses Projekt ist Amazon erforderlich EC2.
-
Die Knoten sind beschädigt und daher nicht verfügbar.
Sie können sie verwenden
kubectl describe node
, um die Makel zu überprüfen. DannNODENAME
| grep Taintskubectl taint node
um die Flecken zu entfernen. Stellen Sie sicher, dass SieNODENAME
TAINT_NAME
--
nach dem Namen des Makels den Namen angeben. -
Die Knoten haben die Kapazitätsgrenze erreicht. In diesem Fall können Sie einen neuen Knoten erstellen oder die Kapazität erhöhen.
-
-
Sie sehen in Grafana keine Dashboards: Sie verwenden die falsche Grafana-Workspace-ID.
Führen Sie den folgenden Befehl aus, um Informationen über Grafana zu erhalten:
kubectl describe grafanas external-grafana -n grafana-operator
Sie können die Ergebnisse auf die richtige Workspace-URL überprüfen. Wenn es sich nicht um die erwartete handelt, führen Sie die Bereitstellung erneut mit der richtigen Workspace-ID durch.
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: ... -
In Grafana werden keine Dashboards angezeigt: Sie verwenden einen abgelaufenen API-Schlüssel.
Um nach diesem Fall zu suchen, müssen Sie den Grafana-Operator aufrufen und die Protokolle auf Fehler überprüfen. Rufen Sie den Namen des Grafana-Operators mit diesem Befehl ab:
kubectl get pods -n grafana-operator
Dadurch wird der Name des Operators zurückgegeben, zum Beispiel:
NAME READY STATUS RESTARTS AGE
grafana-operator-1234abcd5678ef90
1/1 Running 0 1h2mVerwenden Sie den Operatornamen im folgenden Befehl:
kubectl logs
grafana-operator-1234abcd5678ef90
-n grafana-operatorFehlermeldungen wie die folgenden weisen auf einen abgelaufenen API-Schlüssel hin:
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
Erstellen Sie in diesem Fall einen neuen API-Schlüssel und stellen Sie die Lösung erneut bereit. Wenn das Problem weiterhin besteht, können Sie vor der erneuten Bereitstellung die Synchronisation mithilfe des folgenden Befehls erzwingen:
kubectl delete externalsecret/external-secrets-sm -n grafana-operator
-
Fehlender SSM-Parameter. Wenn Sie einen Fehler wie den folgenden sehen, führen Sie ihn aus
cdk bootstrap
und versuchen Sie es erneut.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)