Partager via


Collecter les métriques Apache Kafka à l’aide du service managé pour Prometheus

Apache Kafka est une plateforme open source de diffusion en continu d’événements distribuées utilisée par des pipelines de données hautes performances, l’analytique de streaming, l’intégration des données et des applications stratégiques.

Cet article explique comment configurer le service managé Azure Monitor pour Prometheus avec Azure Kubernetes Service (AKS) et Kubernetes avec Azure Arc pour surveiller les clusters Kafka en supprimant les métriques Prometheus.

Prérequis

Installer l’exportateur Kafka

Installez Prometheus Kafka Exporter à l’aide du graphique Helm :

helm install azmon-kafka-exporter --namespace=azmon-kafka-exporter --create-namespace --version 2.10.0 prometheus-community/prometheus-kafka-exporter --set kafkaServer="{kafka-server.namespace.svc:9092,.....}" --set prometheus.serviceMonitor.enabled=true --set prometheus.serviceMonitor.apiVersion=azmonitoring.coreos.com/v1

Vous pouvez configurer le graphique Helm de l’exportateur Kafka avec des valeurs. Spécifiez les adresses de serveur appropriées où les serveurs Kafka peuvent être atteints. Définissez les adresses du serveur à l’aide de l’argument kafkaServer.

Remarque

Une configuration de moniteur de pod/service Prometheus managée avec installation à l’aide du graphique Helm est prise en charge uniquement avec la version du graphique Helm 2.10.0 ou supérieure. Si vous souhaitez configurer d’autres moniteurs de service ou de pod, suivez ces instructions.

Importer le tableau de bord Grafana

Pour importer le tableau de bord Grafana (ID 7589) dans l’exportateur Kafka à l’aide de l’ID ou du json, suivez les instructions fournies dans Importer un tableau de bord à partir de Grafana Labs.

Déployer des règles

  1. Téléchargez le fichier de modèle et le fichier de paramètres pour les règles d’alerte.

  2. Modifiez les valeurs suivantes dans le fichier de paramètres.

    Paramètre Valeur
    azureMonitorWorkspace ID de ressource de l’espace de travail Azure Monitor. Récupérez-le à partir de la vue JSON dans la page Vue d’ensemble de l’espace de travail Azure Monitor.
    location Emplacement de l’espace de travail Azure Monitor. Récupérez-le à partir de la vue JSON dans la page Vue d’ensemble de l’espace de travail Azure Monitor.
    clusterName Nom du cluster Kubernetes avec AKS ou Azure Arc. Récupérez-le à partir de la vue JSON sur la page Vue d’ensemble du cluster.
    actionGroupId ID de ressource pour le groupe d’actions d’alerte. Récupérez-le à partir de la vue JSON sur la page Vue d’ensemble du groupe d’actions. En savoir plus sur les groupes d’actions.
  3. Déployez le modèle à l’aide de n’importe quelle méthode standard pour installer des modèles Azure Resource Manager. Pour obtenir des conseils, consultez les exemples de modèles Resource Manager pour Azure Monitor.

  4. Après avoir déployé le modèle, vous pouvez afficher les règles dans le portail Azure, comme décrit dans Afficher les groupes de règles Prometheus. Révisez les seuils d’alerte pour vous assurer qu’ils correspondent à votre cluster et charges de travail. Mettez à jour les seuils en conséquence.

    Remarque

    Les règles ne sont pas limitées à un cluster. Si vous souhaitez étendre les règles à un cluster spécifique, consultez Limitation des règles à un cluster spécifique.

Vous pouvez en savoir plus sur les alertes Prometheus. Si vous souhaitez utiliser d’autres règles d’alerte/enregistrement Prometheus open source, utilisez az-prom-rules-converter pour créer les règles Prometheus équivalentes à Azure.

Obtenir d’autres métriques JMX Exporter à l’aide de Strimzi

Si vous utilisez l'opérateur Strimzi pour déployer les clusters Kafka, déployez les moniteurs de pods pour obtenir plus de métriques JMX Exporter.

Les métriques doivent être exposées par les déploiements de cluster Kafka, comme les exemples dans GitHub. Reportez-vous aux fichiers kafka-.*-metrics.yaml pour configurer les métriques à exposer.

Ici, les moniteurs de pod supposent également que l’espace de noms où la charge de travail Kafka est déployée est kafka. Mettez-le à jour en conséquence si les charges de travail sont déployées dans un autre espace de noms.

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

Configurer des alertes à l’aide de Strimzi

Vous pouvez configurer un ensemble complet d’alertes basées sur les métriques Strimzi en faisant référence à ces exemples.

Remarque

Si vous utilisez un autre moyen d’exposer l’exportateur JMX sur votre cluster Kafka, suivez les instructions pour configurer le pod ou les moniteurs de service en conséquence.

Afficher les tableaux de bord Grafana pour plus de métriques JMX à l’aide de Strimzi

Pour afficher les tableaux de bord des métriques exposées par l’opérateur Strimzi, consultez l’emplacement GitHub des tableaux de bord Grafana pour Strimzi.

Résolution des problèmes

Lorsque les moniteurs de service ou les moniteurs de pod sont correctement appliqués, si vous souhaitez vous assurer que le module complémentaire récupère les cibles du moniteur de service, suivez ces instructions.