次の方法で共有


Prometheus のマネージド サービスを使用して Apache Kafka メトリックを収集する

Apache Kafka は、高パフォーマンスのデータ パイプライン、ストリーミング分析、データ統合、ミッション クリティカルなアプリケーションで使用されるオープンソースの分散イベント ストリーミング プラットフォームです。

この記事では、 Prometheus メトリックをスクレイピングして Kafka クラスターを監視するように、Azure Kubernetes Service (AKS) と Azure Arc 対応 Kubernetes を使用して Prometheus 用の Azure Monitor マネージド サービスを構成する方法について説明します。

前提条件

Kafka エクスポーターをインストールする

Helm チャートを使用して Prometheus Kafka Exporter をインストールします。

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

Kafka Exporter Helm チャートは 、値を使用して構成できます。 Kafka サーバーに到達できる適切なサーバー アドレスを指定します。 引数 kafkaServerを使用して、サーバー アドレスを設定します。

メモ

Helm チャートのインストールを使用したマネージド Prometheus サービス/ポッド モニター構成は、Helm チャート バージョン 2.10.0 以降でのみサポートされます。 他のサービスまたはポッド モニターを構成する場合は、次の 手順に従います。

Grafana ダッシュボードをインポートする

ID または JSON を使用して Kafka エクスポーターに Grafana ダッシュボード (ID 7589) をインポートするには、「 Grafana Labs からダッシュボードをインポートする」の手順に従います。

ルールをデプロイする

  1. アラート ルール用の テンプレート ファイルパラメーター ファイル をダウンロードします。

  2. パラメーター ファイルで次の値を編集します。

    パラメーター
    azureMonitorWorkspace Azure Monitor ワークスペースのリソース ID。 Azure Monitor ワークスペースの [概要] ページの JSON ビューから取得します。
    ___location Azure Monitor ワークスペースの場所。 Azure Monitor ワークスペースの [概要] ページの JSON ビューから取得します。
    clusterName AKS または Azure Arc 対応 Kubernetes クラスターの名前。 クラスターの [概要] ページの JSON ビューから取得します。
    actionGroupId アラート アクション グループのリソース ID。 アクション グループの [概要] ページの JSON ビューから取得します。 アクション グループの詳細を確認します。
  3. Azure Resource Manager テンプレートをインストールするための標準的な方法を使用して、テンプレートをデプロイします。 ガイダンスについては、 Azure Monitor の Resource Manager テンプレートのサンプルを参照してください。

  4. テンプレートをデプロイした後、「 Prometheus ルール グループの表示」の説明に従って、Azure portal でルールを表示できます。 アラートのしきい値を確認して、クラスターとワークロードに合っていることを確認します。 それに応じてしきい値を更新します。

    メモ

    ルールのスコープはクラスターに限定されません。 ルールのスコープを特定のクラスターに設定する場合は、「ルール を特定のクラスターに制限する」を参照してください。

Prometheus アラートの詳細を確認できます。 他のオープンソースの Prometheus アラート/記録ルールを使用する場合は、 az-prom-rules-converter を使用して、Azure と同等の Prometheus ルールを作成します。

Strimzi を使用して JMX エクスポーター メトリックをさらに取得する

Kafka クラスターのデプロイに Strimzi オペレーター を使用している場合は、ポッド モニターをデプロイして、 JMX エクスポーター メトリックをさらに取得します。

メトリックは、 GitHub の例のように、Kafka クラスターのデプロイによって公開される必要があります。 公開するメトリクスを構成するには、kafka-.*-metrics.yaml ファイルを参照してください。

ここでポッドモニターは、Kafka ワークロードがデプロイされている名前空間が kafkaされていることを前提としています。 ワークロードが別の名前空間に展開されている場合は、必要に応じてこれを更新します。

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

Strimzi を使用してアラートを構成する

これらの例を参照することで、Strimzi メトリックに基づいて豊富なアラート セットを構成できます。

メモ

Kafka クラスターで JMX エクスポーターを公開する他の方法を使用している場合は、それに応じて ポッドまたはサービス モニターを構成する手順 に従ってください。

Strimzi を使用して Grafana ダッシュボードを表示し、JMX メトリックをさらに表示する

Strimzi オペレーターが公開するメトリックのダッシュボードを表示するには、 Strimzi の Grafana ダッシュボードの GitHub の場所を参照してください。

トラブルシューティング

サービス モニターまたはポッド モニターが正常に適用されたら、アドオンがサービス モニター ターゲットを確実に選択できるようにする場合は、 次の手順に従います。