View a markdown version of this page

Amazon MSK の統合 - Amazon CloudWatch

Amazon MSK の統合

Amazon CloudWatch マネージド Prometheus コレクターを使用すると、Amazon MSK クラスターから Prometheus メトリクスを自動的に検出および収集できます。Amazon MSK クラスター上で Open Monitoring を有効にすると、Java Management Extensions (JMX) Exporter および Node Exporter を介して Prometheus メトリクスが公開されます。マネージドコレクターは VPC に接続し、DNS ベースのサービス検出を使用してすべてのブローカーからこれらのメトリクスをスクレイプし、CloudWatch に直接配信します。この統合により、エージェントをデプロイせずに、ホストレベルメトリクス、JVM レベルメトリクス、および Kafka ブローカーメトリクスを CloudWatch でモニタリングできます。

注記

Amazon CloudWatch マネージド Prometheus コレクターが Amazon MSK メトリクスを CloudWatch に配信する際、各メトリクスにはその由来を識別するための属性が自動的に付加されます。すべてのメトリクスには、コレクターの計装スコープ、AWS アカウントとリージョンを記録するクラウド属性、およびコレクターがメトリクス名から推測する単位が含まれます。PromQL でメトリクスをクエリする際に、これらの属性でフィルタリングやグループ化を行うことができます。

前提条件

この手順では、Amazon MSK クラスターの管理と Amazon VPC ネットワーキングの概念に関する知識があることを前提としています。

  • プロビジョニングモードの Amazon MSK クラスター(標準または Express ブローカー付き)。マネージドコレクターは Amazon MSK Serverless をサポートしていません。

  • クラスターで Open Monitoring が有効になっていること。詳細については、Amazon MSK デベロッパーガイドの「Open Monitoring with Prometheus」を参照してください。

  • 異なるアベイラビリティーゾーンにある少なくとも 2 つのサブネット

  • コレクターがポート 11001 と 11002 のブローカーに到達できるようにするセキュリティグループ

ステップ 1: Open Monitoring を有効にする

Amazon MSK クラスター上で Open Monitoring を有効にして、Prometheus メトリクスを公開します。Open Monitoring を有効にする手順については、Amazon MSK デベロッパーガイドの「Open Monitoring with Prometheus」を参照してください。

aws kafka update-monitoring \ --cluster-arn "arn:aws:kafka:us-west-2:123456789012:cluster/my-cluster/abc123-def456" \ --current-version "K1A2B3C4D5" \ --open-monitoring '{ "Prometheus": { "JmxExporter": {"EnabledInBroker": true}, "NodeExporter": {"EnabledInBroker": true} } }'
注記

--open-monitoring パラメータのみで、ポート 11001 および 11002 の Prometheus エンドポイントを公開します。PER_TOPIC_PER_PARTITION などの拡張モニタリングティアは、オープンモニタリングとは別であり、追加料金が発生する場合があります。そのため、そのレベルの Amazon MSK メトリクスが必要な場合にのみ設定してください。

ステップ 2: クラスターの DNS 名を取得する

Amazon MSK は、すべてのブローカー IP に解決されるクラスターレベルの DNS 名を提供します。これをサービス検出に使用すると、ブローカーの置き換えやクラスターのスケーリングに対してモニタリングの回復力が高くなります。

クラスターの DNS 名を取得します (b-1.b-2. などのブローカー固有のプレフィックスを削除します)。

aws kafka get-bootstrap-brokers --cluster-arn "arn:aws:kafka:us-west-2:123456789012:cluster/my-cluster/abc123-def456"

例えば、ブートストラップブローカーが b-1.my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com を返す場合、my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com をクラスターの DNS 名として使用します。

ステップ 3: スクレイプ設定を構成する

以下は、Amazon MSK のためのスクレイプ設定の例です。次のステップでスクレイパーを作成する際に、この設定を参照します。 の設定オプションの詳細については、「」を参照してくださいスクレイパー設定

global: scrape_interval: 60s external_labels: cluster_name: my-msk-cluster scrape_configs: - job_name: 'msk-jmx' dns_sd_configs: - names: - my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com type: A port: 11001 relabel_configs: - source_labels: [__meta_dns_name] target_label: broker_dns - source_labels: [__address__] target_label: instance - target_label: compute_platform replacement: 'msk' - job_name: 'msk-node' dns_sd_configs: - names: - my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com type: A port: 11002 relabel_configs: - source_labels: [__meta_dns_name] target_label: broker_dns - source_labels: [__address__] target_label: instance - target_label: compute_platform replacement: 'msk'

ステップ 4: スクレイパーを作成する

前のステップで作成した Amazon MSK ブローカー用のスクレイプ設定を使用して、CloudWatch を送信先とするスクレイパーを作成します。

AWS API

CreateScraper API オペレーションを使用して、CloudWatch 送信先を持つスクレーパーを作成します。サブネット、セキュリティグループ、データセット情報を独自の值に置き換えます。

POST /scrapers HTTP/1.1 { "alias": "msk-metrics-scraper", "source": { "vpcConfiguration": { "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"], "securityGroupIds": ["sg-security-group-id"] } }, "destination": { "cloudWatchConfiguration": { "datasetArn": "arn:aws:cloudwatch:us-west-2:123456789012:dataset/default" } }, "scrapeConfiguration": { "configurationBlob": "base64-encoded-blob" } }
AWS CLI

create-scraper コマンドを使用して、CloudWatch 送信先を持つスクレーパーを作成します。サブネット、セキュリティグループ、データセット情報を独自の值に置き換えます。

aws amp create-scraper \ --alias "msk-metrics-scraper" \ --source '{ "vpcConfiguration": { "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"], "securityGroupIds": ["sg-security-group-id"] } }' \ --scrape-configuration configurationBlob=$(cat msk-config.yaml | base64 -w 0) \ --destination '{ "cloudWatchConfiguration": { "datasetArn": "arn:aws:cloudwatch:us-west-2:123456789012:dataset/default" } }'

使用可能なメトリクス

  • JMX Exporter (ポート 11001) – トピックメトリクス、パーティションメトリクス、リクエストレート、コンシューマー遅延、レプリケーション不足パーティションなど、Kafka ブローカーの内部情報を示します。

  • Node Exporter (ポート 11002) – CPU、メモリ、ディスク I/O、ネットワークスループットなど、ホストレベルメトリクスを示します。

利用可能なメトリクスの完全なリストについては、Amazon Managed Service for Prometheus デベロッパーガイドの「マネージドコレクターによって収集される MSK メトリクス」を参照してください。

メトリクスの収集を検証する

コレクターが JMX および Node Exporter の両方のメトリクスを配信していることを確認するには、クエリスタジオで CloudWatch の次のクエリを実行します。各クエリがデータポイントを返す場合、コレクターは対応するエクスポーターから正常にスクレイプを行っています。

次のクエリは、JMX Exporter (ポート 11001) からブローカーレベルの Kafka メトリクスを返します。これは、メッセージやバイト数など、ブローカーを介してフローするトピックアクティビティの平均速度を報告します。データポイントは、コレクターが Kafka ブローカーメトリクスをスクレイプしていることを確認します。

kafka_server_BrokerTopicMetrics_MeanRate

次のクエリは、Node Exporter (ポート 11002) からホストレベルの CPU 使用率を返します。これは、5 分間のウィンドウにおける平均アイドル CPU 速度を 100 から差し引くことで、ブローカーが使用している CPU の割合を示します。データポイントは、コレクターがホストレベルメトリクスをスクレイプしていることを確認します。

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

自動ダッシュボードを表示する

コレクターが Amazon MSK メトリクスを CloudWatch に配信し始めると、CloudWatch コンソールには MSK OTel という名前の自動ダッシュボードが提供されます。それを開くには、MSK OTel を参照するか、AWS マネジメントコンソールにサインインし、CloudWatch コンソールを開いて、ナビゲーションペインで [ダッシュボード] を選択し、[自動ダッシュボード] を選択してから、MSK OTel を選択します。ウィジェットやダッシュボードを自分で作成せずに、クラスターのモニタリングを開始できます。

自動ダッシュボードが要件を満たしている場合は、そのまま使用できます。カスタマイズしたモニタリングエクスペリエンスを構築するには、そのウィジェットのいずれかをカスタムダッシュボードに追加できます。カスタムダッシュボードの詳細については、「CloudWatch ダッシュボードの使用」を参照してください。

クロス アカウント オブザーバビリティ

クロスアカウントの Amazon MSK モニタリングでは、Amazon CloudWatch メトリクスの一元化を使用することをお勧めします。詳細については、「CloudWatch メトリクスの一元化」を参照してください。

ロールチェーンを使用した代替のクロスアカウントスクレイパー設定については、Amazon Managed Service for Prometheus ユーザーガイドの「クロスアカウント Amazon MSK 統合」を参照してください。

現在の制限事項

  • マネージドコレクターは、Amazon MSK Serverless クラスターをサポートしていません。

  • マネージドコレクターは、パブリックアクセスと KRaft メタデータモードの組み合わせをサポートしていません。

  • Amazon MSK クラスターと CloudWatch データセットの各組み合わせには、1 つのコレクターが必要です。