Amazon CloudWatch ソリューション: Amazon EC2 での Prometheus メトリクス収集
このソリューションでは、独自の収集インフラストラクチャを実行またはスケーリングせずに、Amazon EC2 インスタンスから Prometheus 互換メトリクスを収集できます。インスタンス上で 1 つ以上の Prometheus エクスポーターを実行すると、Amazon CloudWatch マネージド Prometheus コレクターが VPC 内のターゲットを検出し、それらの /metrics エンドポイントをスクレイプして、メトリクスを CloudWatch に配信します。すべての CloudWatch オブザーバビリティソリューションの一般的な情報については、「CloudWatch オブザーバビリティソリューション」を参照してください。マネージドコレクターの詳細については、「Amazon CloudWatch マネージド Prometheus コレクター」を参照してください。
トピック
要件
このソリューションは、以下の条件に適しています。
-
コンピューティング: 1 つ以上の Prometheus エクスポーターを実行する Amazon EC2 インスタンス。
-
DNS が有効化された Amazon VPC と、コレクター用の異なるアベイラビリティーゾーンにある少なくとも 2 つのサブネット。
-
コレクターがインスタンス上のエクスポーターポートに到達できるようにするセキュリティグループ。
Prometheus エクスポーターを有効にする
Prometheus エクスポーターは、HTTP Prometheus エンドポイントで /metrics 表記形式のメトリクスを公開するプロセスです。モニタリングしたいワークロードと一致するエクスポーターを実行します。Amazon EC2 上で一般的に使用されるエクスポーターを以下に示します:
-
Node Exporter – CPU、メモリ、ディスク、ネットワークなどのホストレベルのインフラストラクチャメトリクス (デフォルトポート 9100)。詳細については、GitHub の「Node Exporter
リポジトリ」を参照してください。 -
JMX Exporter – Java ワークロード向けの JVM および Java アプリケーションメトリクス。詳細については、GitHub の「JMX Exporter
リポジトリ」を参照してください。 -
NGINX Prometheus Exporter – NGINX ウェブサーバーおよびリバースプロキシメトリクス。詳細については、GitHub の「NGINX Prometheus Exporter
リポジトリ」を参照してください。 -
DCGM Exporter – 機械学習トレーニングや推論などの GPU ワークロード向けの NVIDIA GPU メトリクス (デフォルトポート 9400)。詳細については、GitHub の「DCGM Exporter
リポジトリ」を参照してください。 -
HAProxy Exporter – HAProxy ロードバランサーメトリクス。詳細については、GitHub の「HAProxy Exporter
リポジトリ」を参照してください。 -
Apache Exporter – Apache HTTP Server メトリクス。詳細については、GitHub の「Apache Exporter
リポジトリ」を参照してください。
各エクスポーターを、その公式ドキュメントに従って、インスタンス上にインストールして実行します。スクレイプ構成でこれらのポートを参照するので、各エクスポーターがリッスンするポートを書き留めます。利用可能なエクスポーターの完全なカタログについては、Prometheus ドキュメントの「エクスポーターと統合
エクスポーターを起動した後、インスタンスからエンドポイントをクエリして、メトリクスが公開されていることを確認します。
curl http://localhost:port-number/metrics
ステップ 1: スクレイプ構成をセットアップする
次の例では、インスタンスのプライベート DNS 名を持つ static_configs を使用して、Amazon EC2 インスタンス上のサンプルアプリケーション (ポート 8080) と Node Exporter (ポート 9100) をスクレイプします。relabel_configs セクションでは、サービス間でクエリおよびフィルターを実行できるように、メトリクスに一貫したラベルを追加します。サポートされている構成オプションの完全なセットについては、「スクレイパー設定」を参照してください。
global: scrape_interval: 30s scrape_timeout: 10s scrape_configs: - job_name: 'ec2-metrics' static_configs: - targets: - ip-ip-address.us-west-2.compute.internal:8080 metrics_path: '/metrics' relabel_configs: - source_labels: [__address__] target_label: instance replacement: 'ec2-metrics-instance' - target_label: service replacement: 'ec2-metrics' - target_label: environment replacement: 'dev' metric_relabel_configs: - source_labels: [__name__] regex: '.*' action: keep - job_name: ec2-node-exporter static_configs: - targets: - ip-ip-address.us-west-2.compute.internal:9100
ステップ 2: スクレーパーをセットアップする
インスタンスをスクレイプし、メトリクスを CloudWatch データセットに配信する VPC 接続マネージドコレクターを作成します。コレクターがエクスポーターポートに到達できるようにするサブネットとセキュリティグループを指定します。
GetDefaultScraperConfiguration を使用して、汎用スクレーパー設定を取得するか、独自のものを提供できます。
マネージドコレクターを作成すると、Amazon Managed Service for Prometheus は、VPC リソースへのアクセスと CloudWatch データセットへの書き込みを行うためのアクセス許可をコレクターに付与するサービスにリンクされたロールを自動的に作成します。
メトリクスの収集を検証する
数分以内に、メトリクスが CloudWatch データセットに流れ始めます。メトリクスが到着していることを確認するには、Query Studio を使用して CloudWatch でアドホッククエリを実行します。例えば、次のクエリは ec2-metrics ジョブのメトリクスを返します。
{job="ec2-metrics"}
カスタムダッシュボードを構築する
コレクターが Amazon EC2 メトリクスを CloudWatch に配信し始めたら、それらを可視化するためのカスタム CloudWatch ダッシュボードを構築できます。カスタムダッシュボードでは、Prometheus エクスポーターからのメトリクスをウィジェットに組み合わせ、PromQL ベースのクエリを追加し、モニタリングニーズに合わせてウィジェットを整理できます。詳細については、「CloudWatch ダッシュボードの使用」を参照してください。
コスト
Prometheus コレクターについては時間単位で課金され、CloudWatch OpenTelemetry メトリクスの取り込み料金が適用されます。CloudWatch の料金の詳細については、「Amazon CloudWatch の料金