Apache Kafka は、高パフォーマンスのデータ パイプライン、ストリーミング分析、データ統合、ミッション クリティカルなアプリケーションで使用されるオープンソースの分散イベント ストリーミング プラットフォームです。
この記事では、 Prometheus メトリックをスクレイピングして Kafka クラスターを監視するように、Azure Kubernetes Service (AKS) と Azure Arc 対応 Kubernetes を使用して Prometheus 用の Azure Monitor マネージド サービスを構成する方法について説明します。
前提条件
- AKS または Azure Arc 対応 Kubernetes で実行されている Kafka クラスター - AKS で実行されている Kafka クラスターをデプロイする
- クラスターで有効になっている Azure Managed prometheus - AKS で Azure Managed Prometheus を有効にする
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 からダッシュボードをインポートする」の手順に従います。
ルールをデプロイする
アラート ルール用の テンプレート ファイル と パラメーター ファイル をダウンロードします。
パラメーター ファイルで次の値を編集します。
パラメーター 値 azureMonitorWorkspace
Azure Monitor ワークスペースのリソース ID。 Azure Monitor ワークスペースの [概要] ページの JSON ビューから取得します。 ___location
Azure Monitor ワークスペースの場所。 Azure Monitor ワークスペースの [概要] ページの JSON ビューから取得します。 clusterName
AKS または Azure Arc 対応 Kubernetes クラスターの名前。 クラスターの [概要] ページの JSON ビューから取得します。 actionGroupId
アラート アクション グループのリソース ID。 アクション グループの [概要] ページの JSON ビューから取得します。 アクション グループの詳細を確認します。 Azure Resource Manager テンプレートをインストールするための標準的な方法を使用して、テンプレートをデプロイします。 ガイダンスについては、 Azure Monitor の Resource Manager テンプレートのサンプルを参照してください。
テンプレートをデプロイした後、「 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 の場所を参照してください。
トラブルシューティング
サービス モニターまたはポッド モニターが正常に適用されたら、アドオンがサービス モニター ターゲットを確実に選択できるようにする場合は、 次の手順に従います。