Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie überwachung und Netzwerk für einen Kafka-Cluster auf Azure Kubernetes Service (AKS) konfigurieren.
Überwachung mit Azure Managed Prometheus und Grafana
Strimzi implementiert die Überwachung, indem JMX-Metriken über den Prometheus JMX-Exporter verfügbar werden, der die internen Leistungsdaten von Kafka in ein Format transformiert, das Prometheus sammeln und analysieren kann. Diese Überwachungspipeline ermöglicht die Echtzeitsicht in:
- Gesundheits- und Leistungsmetriken des Brokers.
- Hersteller- und Verbraucherdurchsatz.
- Partitionsführungsverteilung.
- Replikationsverzögerung und potenzielle Risiken von Datenverlust.
- Ressourcenauslastungsmuster.
Azure Managed Prometheus bietet ein vollständig verwaltetes, skalierbares Überwachungs-Back-End ohne den betriebstechnischen Aufwand für die Verwaltung Ihrer eigenen Prometheus-Instanzen. Wenn Sie mit Azure Managed Grafana gekoppelt sind, erhalten Sie Zugriff auf umfassende Visualisierungsfunktionen mit vordefinierten Dashboards, die speziell für die Kafka-Überwachung entwickelt wurden.
PodMonitor erstellen
PodMonitors sind benutzerdefinierte Kubernetes-Ressourcen, die Prometheus mitteilen, von welchen Pods Metriken zu sammeln sind und wie sie zu sammeln sind. Für die Kafka-Überwachung müssen Sie PodMonitors definieren, die auf verschiedene Strimzi-Komponenten abzielen.
Stellen Sie vor dem Fortfahren sicher, dass Ihr Kafka-Cluster mit der JMX Exporter-Konfiguration bereitgestellt wurde. Ohne diese Konfiguration stehen Metriken für die Sammlung nicht zur Verfügung.
Erstellen Sie die PodMonitor-Ressourcen mithilfe des
kubectl applyBefehls.Hinweis
Bei Verwendung von Azure Managed Prometheus:
- Die PodMonitor apiVersion muss
azmonitoring.coreos.com/v1an Stelle des Standardsmonitoring.coreos.com/v1sein. - Die Namespaceauswahl in den folgenden Beispielen geht davon aus, dass Ihre Kafka-Workloads im
kafkaNamespace bereitgestellt werden. Ändern Sie entsprechend, wenn Sie einen anderen Namespace verwenden.
kubectl apply -f - <<EOF --- apiVersion: azmonitoring.coreos.com/v1 kind: PodMonitor metadata: name: azmon-cluster-operator-metrics labels: app: strimzi spec: selector: matchLabels: strimzi.io/kind: cluster-operator namespaceSelector: matchNames: - kafka podMetricsEndpoints: - path: /metrics port: http --- apiVersion: azmonitoring.coreos.com/v1 kind: PodMonitor metadata: name: azmon-entity-operator-metrics labels: app: strimzi spec: selector: matchLabels: app.kubernetes.io/name: entity-operator namespaceSelector: matchNames: - kafka podMetricsEndpoints: - path: /metrics port: healthcheck --- apiVersion: azmonitoring.coreos.com/v1 kind: PodMonitor metadata: name: azmon-bridge-metrics labels: app: strimzi spec: selector: matchLabels: strimzi.io/kind: KafkaBridge namespaceSelector: matchNames: - kafka podMetricsEndpoints: - path: /metrics port: rest-api --- apiVersion: azmonitoring.coreos.com/v1 kind: PodMonitor metadata: name: azmon-kafka-resources-metrics labels: app: strimzi spec: selector: matchExpressions: - key: "strimzi.io/kind" operator: In values: ["Kafka", "KafkaConnect", "KafkaMirrorMaker", "KafkaMirrorMaker2"] namespaceSelector: matchNames: - kafka podMetricsEndpoints: - path: /metrics port: tcp-prometheus relabelings: - separator: ; regex: __meta_kubernetes_pod_label_(strimzi_io_.+) replacement: $1 action: labelmap - sourceLabels: [__meta_kubernetes_namespace] separator: ; regex: (.*) targetLabel: namespace replacement: $1 action: replace - sourceLabels: [__meta_kubernetes_pod_name] separator: ; regex: (.*) targetLabel: kubernetes_pod_name replacement: $1 action: replace - sourceLabels: [__meta_kubernetes_pod_node_name] separator: ; regex: (.*) targetLabel: node_name replacement: $1 action: replace - sourceLabels: [__meta_kubernetes_pod_host_ip] separator: ; regex: (.*) targetLabel: node_ip replacement: $1 action: replace EOF- Die PodMonitor apiVersion muss
Hochladen von Grafana-Dashboards für die Kafka-Überwachung
Strimzi bietet einsatzbereite Grafana-Dashboards im GitHub-Repository strimzi/strimzi-kafka-operator , das speziell für die Überwachung von Kafka-Clustern entwickelt wurde. Diese Dashboards visualisieren die Metriken, die vom zuvor konfigurierten JMX Prometheus Exporter verfügbar gemacht werden.
Implementieren Sie die Kafka-Überwachung mit Grafana mithilfe der folgenden Schritte:
- Wählen Sie Dashboards aus dem GitHub-Repository basierend auf Ihren spezifischen Überwachungsanforderungen aus.
- Laden Sie die JSON-Dashboarddateien aus dem Repository herunter.
- Importieren Sie die Dashboards über die Grafana-Benutzeroberfläche in Ihre Azure Managed Grafana-Instanz.
Konfigurieren von Kafka-Exporter zum Aktivieren erweiterter Prometheus-Metriken
Während der JMX Prometheus Exporter interne Kafka-Metriken bereitstellt, ergänzt der Kafka-Exporter dies, indem er sich auf die Überwachung der Verbraucherlatenz und Einblicke auf Themenebene konzentriert. Dieser Exporter:
- Verfolgt die Offsets der Konsumentengruppe und berechnet Verzögerungsmetriken.
- Überwacht den Themenstatus einschließlich unterreplizierter Partitionen.
- Stellt Metriken für die Anzahl und Größe von Themennachrichten bereit.
Diese zusätzlichen Metriken können für Produktionsumgebungen wichtig sein, in denen die Überwachung der Verbraucherleistung und die Verarbeitung von Datenverarbeitungs-SLAs unerlässlich sind.
Ein Helm-Chart steht zur Verfügung, um den Kafka-Exporter zusammen mit Ihrer vorhandenen Monitoring-Pipeline bereitzustellen.
Erstellen Sie einen Namespace zum Bereitstellen des Kafka-Exporters mithilfe des
kubectl create namespaceBefehls. Sie können auch bei Bedarf einen vorhandenen Namespace verwenden.kubectl create namespace azmon-kafka-exporterFügen Sie das Prometheus-Community-Helm-Repository hinzu und aktualisieren Sie es mithilfe der
helm repo addundhelm repo updateBefehle.helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo updateErstellen Sie eine
values.yamlDatei, um bestimmte Konfigurationen für das Helm-Diagramm außer Kraft zu setzen. Der kafka bootstrap-Endpunkt muss aktualisiert werden, bevor das Skript ausgeführt wird:cat <<EOF > values.yaml kafkaServer: - <kafka-bootstrap-fqdn-or-privateip>:9092 #additional kafka clusters can be added to the list prometheus: serviceMonitor: namespace: azmon-kafka-exporter #ensure namespace is the same as in step 1 enabled: true apiVersion: azmonitoring.coreos.com/v1 EOFInstallieren Sie den Strimzi Cluster Operator mit dem
helm installBefehl.helm install azmon-kafka-exporter prometheus-community/prometheus-kafka-exporter \ --version 2.11.0 \ --namespace azmon-kafka-exporter \ --values values.yamlLaden Sie das Kafka Exporter Dashboard nach Grafana hoch.
Hinweis
Dieses Grafana-Dashboard verwendet das AngularJS-Plug-In, das in zukünftigen Versionen von Grafana veraltet sein wird. Weitere Informationen finden Sie unter Abkündigung der Angular-Unterstützung. Kafka Exporter-Metriken sind weiterhin verfügbar, aber möglicherweise müssen Sie Ihre Dashboards selbst erstellen, sobald die Außerbetriebnahme erfolgt.
Clientkonnektivität mit Kafka-Cluster
Strimzi bietet flexible Optionen zum Verfügbarmachen Ihres Kafka-Clusters für Kunden über Listener. Jeder Listener definiert, wie Clients mithilfe bestimmter Protokolle, Authentifizierungsmethoden und Netzwerkexpositionsmuster eine Verbindung mit Ihren Kafka-Brokern herstellen.
Eine Listenerkonfiguration definiert Folgendes:
- Auf welchem Port Kafka Verbindungen akzeptiert.
- Das Sicherheitsprotokoll (Plain, TLS, SASL).
- Wie der Verbindungsendpunkt verfügbar gemacht wird (Kubernetes-Diensttyp).
Kafka verwendet einen zweistufigen Verbindungsprozess, der beeinflusst, wie Sie Netzwerke konfigurieren sollten. Beim Konfigurieren von Listenern für Ihre Strimzi Kafka-Bereitstellung auf AKS ist es wichtig, den folgenden Prozess zu verstehen:
- Phase 1: Der Client stellt eine Verbindung mit dem Bootstrap-Dienst dar, der dann eine Verbindung mit einem der Broker herstellt, um Metadaten abzurufen. Die Metadaten enthalten Informationen zu den Themen, deren Partitionen und den Brokern, die sie hosten.
- Phase 2: Der Client stellt dann mithilfe der angekündigten Adresse, die aus den Metadaten abgerufen wurde, eine neue Verbindung direkt mit einem einzelnen Broker her.
Dies bedeutet, dass Ihre Netzwerkarchitektur sowohl den Bootstrap-Dienst als auch die individuelle Brokerkonnektivität berücksichtigen muss.
Weitere Informationen finden Sie in der Strimzi-Dokumentation zum Konfigurieren des Clientzugriffs.
Option 1: Interner Clusterzugriff (ClusterIP)
Für Anwendungen, die innerhalb desselben Kubernetes-Clusters wie der Kafka-Cluster ausgeführt werden, machen Sie Kafka über ClusterIP verfügbar:
listeners:
- name: internal
port: 9092
type: internal
tls: true
Dadurch werden ein ClusterIP für den Bootstrap-Dienst und Broker erstellt, auf die nur innerhalb des Kubernetes-Netzwerks zugegriffen werden kann.
Option 2: Externer Zugriff über public Load Balancer
Für externe Clients erstellt der loadbalancer Listenertyp eine Azure Load Balancer-Konfiguration mit öffentlichen IP-Adressen:
listeners:
- name: external
port: 9094
type: loadbalancer
tls: false
Bei Verwendung dieser Konfiguration:
- Für jeden Broker und den Bootstrap-Dienst wird ein Kubernetes LoadBalancer-Dienst erstellt.
- Azure stellt öffentliche IP-Adressen für jeden Dienst fest.
Wenn Sie benutzerdefinierte DNS-Namen verwenden möchten, müssen Sie den advertisedHost für jeden Broker und den alternativeNames Bootstrap-Dienst konfigurieren. Dies ist erforderlich, um sicherzustellen, dass Kafka den benutzerdefinierten Hostnamen für jeden Broker ordnungsgemäß an einen Client weitergibt. Außerdem werden dem jeweiligen Broker- oder Bootstrap-Zertifikat die Informationen hinzugefügt, damit es für die ÜBERPRÜFUNG des TLS-Hostnamens verwendet werden kann.
listeners:
- name: external
port: 9094
type: loadbalancer
tls: true
configuration:
bootstrap:
alternativeNames:
- kafka-bootstrap.example.com
brokers:
- broker: 0
advertisedHost: kafka-broker-0.example.com
Option 3: Externer Zugriff über privates Lastenausgleichsmodul
Wenn Sie auf den Kafka-Cluster außerhalb des AKS-Clusters, aber in einem virtuellen Azure-Netzwerk zugreifen möchten, können Sie den Bootstrap-Dienst und die Broker über einen internen Lastenausgleich mit privaten IP-Adressen verfügbar machen:
listeners:
- name: private-lb
port: 9094
type: loadbalancer
tls: true
configuration:
bootstrap:
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
brokers:
- broker: 0
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
- broker: 1
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
- broker: 2
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Von Bedeutung
Wenn Sie Ihrem Cluster neue Broker hinzufügen, müssen Sie die Listenerkonfiguration mit entsprechenden Anmerkungen für jeden neuen Broker aktualisieren. Andernfalls werden diese Broker mit öffentlichen IP-Adressen offengelegt.
Wenn Sie benutzerdefinierte DNS-Namen verwenden möchten, müssen Sie den advertisedHost für jeden Broker und den alternativeNames Bootstrap-Dienst konfigurieren. Dies ist erforderlich, um sicherzustellen, dass Kafka den benutzerdefinierten Hostnamen für jeden Broker ordnungsgemäß an einen Client weitergibt. Außerdem werden dem jeweiligen Broker- oder Bootstrap-Zertifikat die Informationen hinzugefügt, damit es zur ÜBERPRÜFUNG des TLS-Hostnamens verwendet werden kann.
listeners:
- name: private-lb
port: 9094
type: loadbalancer
tls: true
configuration:
bootstrap:
alternativeNames:
- kafka-bootstrap.example.com
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
brokers:
- broker: 0
advertisedHost: kafka-broker-0.example.com
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Option 4: Externer Zugriff über den privaten Linkdienst
Um interne Netzwerke sicherer zu machen oder über virtuelle Azure-Netzwerke ohne Peers zuzugreifen, können Sie Ihren Kafka-Cluster über Azure Private Link Services verfügbar machen:
listeners:
- name: private-link
port: 9094
type: loadbalancer
tls: true
configuration:
bootstrap:
alternativeNames:
- kafka-bootstrap.<privatedomain-pe>.com
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-pls-create: "true"
service.beta.kubernetes.io/azure-pls-name: "pls-kafka-bootstrap"
brokers:
- broker: 0
advertisedHost: kafka-broker-0.<privatedomain-pe>.com
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-pls-create: "true"
service.beta.kubernetes.io/azure-pls-name: "pls-kafka-broker-0"
- broker: 1
advertisedHost: kafka-broker-1.<privatedomain-pe>.com
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-pls-create: "true"
service.beta.kubernetes.io/azure-pls-name: "pls-kafka-broker-1"
- broker: 2
advertisedHost: kafka-broker-2.<privatedomain-pe>.com
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-pls-create: "true"
service.beta.kubernetes.io/azure-pls-name: "pls-kafka-broker-2"
Diese Konfiguration:
- Erstellt interne Lastenausgleichsdienste mit privaten IPs für alle Komponenten.
- Richtet einen privaten Linkdienst für den Bootstrap-Dienst bzw. die einzelnen Broker ein. Dies ermöglicht die Verbindung über private Endpunkte aus anderen virtuellen Netzwerken.
- Konfiguriert die
alternativeNames. Dies ist erforderlich, um sicherzustellen, dass Strimzi dem TLS-Zertifikat die alternativen Bootstrap-Dienstnamen hinzufügt, damit sie für die ÜBERPRÜFUNG des TLS-Hostnamens verwendet werden können. - Konfiguriert die
advertisedHost. Dies ist erforderlich, um sicherzustellen, dass Kafka den privaten DNS-Eintrag des privaten Endpunkts ankündigen, der für jeden Broker konfiguriert ist. DasadvertisedHostZertifikat wird auch dem Brokerzertifikat hinzugefügt, sodass es für die ÜBERPRÜFUNG des TLS-Hostnamens verwendet werden kann.
Von Bedeutung
Wenn Sie Ihrem Cluster neue Broker hinzufügen, müssen Sie die Listenerkonfiguration mit entsprechenden Anmerkungen für jeden neuen Broker aktualisieren. Andernfalls werden diese Broker mit öffentlichen IP-Adressen offengelegt.
Sie können service.beta.kubernetes.io/azure-pls-name: in einen beliebigen Namen Ihrer Wahl ändern.
Führen Sie nach der Bereitstellung dieser Konfiguration die Schritte zum Erstellen eines privaten Endpunkts für den privaten Azure Load Balancer Private Link Service aus.
Beitragende
Microsoft verwaltet diesen Artikel. Die folgenden Mitwirkenden haben es ursprünglich geschrieben:
- Sergio Navar | Senior Customer Engineer
- Erin Schaffer | Inhaltsentwickler 2