Prometheus CloudWatch エクスポータを使用して AWS CloudWatch 指標を収集する

このドキュメントでは、オープンソースの Prometheus CloudWatch エクスポータと Compute Engine インスタンスで実行されている Ops エージェントを使用して、AWS CloudWatch 指標を収集し、Google Cloud プロジェクトに保存する方法について説明します。

このドキュメントは、AWS CloudWatch の指標を収集する必要があるデベロッパーとシステム管理者を対象としています。このドキュメントでは、AWS CloudWatch 指標を収集するように Prometheus CloudWatch エクスポータを設定する方法について説明します。

Cloud Monitoring を使用すると、Google Cloud の指標と同じコンテキストで AWS の指標を表示できます。たとえば、Amazon EC2 インスタンスと Compute Engine インスタンスの CPU 使用率を表示するグラフを含むダッシュボードを作成できます。AWS 指標をモニタリングするアラート ポリシーを作成することもできます。詳しくは、以下のセクションをご覧ください。

準備

Prometheus CloudWatch エクスポータを使用して AWS CloudWatch 指標を収集するには、次のものが必要です。

  • 次の操作を行う権限を持つ Google Cloud プロジェクト。
    • VM の作成
    • Cloud Logging にログを書き込む
    • Cloud Monitoring に指標を書き込む
  • Prometheus エクスポータが指標の取得に使用できる AWS 認証情報を持つ AWS アカウント。詳細については、Prometheus エクスポータを実行するをご覧ください。

Compute Engine VM を作成する

Ops エージェントと Prometheus CloudWatch エクスポータの実行用として Linux Compute Engine VM を作成することをおすすめします。この VM は、すべての AWS 指標の収集サイトとして機能します。

  1. 指定したゾーンに aws-exporter-test という名前の Debian Linux VM を作成するには、次のコマンドを実行します。

    gcloud compute instances create \
      --image-project debian-cloud \
      --image-family debian-11 \
      --zone ZONE \
      aws-exporter-test
    

    コマンドを次のように構成します。

    • ZONE は、新しい VM のゾーンに置き換えます。
    • 省略可。aws-exporter-test は、VM の別の名前に置き換えます。

    このコマンドの詳細については、gcloud compute instances create リファレンスをご覧ください。

  2. Prometheus CloudWatch エクスポータと Ops エージェントをインストールできるように VM にアクセスするには、次のコマンドを使用します。

    gcloud compute ssh --zone ZONE  --project PROJECT_ID  aws-exporter-test
    

    コマンドを次のように構成します。

    • ZONE は、VM を作成したゾーンに置き換えます。
    • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
    • VM を別の名前で作成した場合は、aws-exporter-test を置き換えます。

    このコマンドの詳細については、gcloud compute ssh リファレンスをご覧ください。

Prometheus CloudWatch エクスポータを設定する

以降のセクションでは、Compute Engine VM に Prometheus CloudWatch エクスポータをダウンロード、インストール、構成する手順について説明します。

Prometheus エクスポータと JRE をダウンロードする

Prometheus CloudWatch Exporter を実行するには、エクスポータと Java Runtime Environment(JRE)バージョン 11 以降をダウンロードする必要があります。

  1. Prometheus CloudWatch エクスポータを含む JAR ファイルをダウンロードするには、Compute Engine インスタンスで次のコマンドを実行します。

    curl -sSO https://github.com/prometheus/cloudwatch_exporter/releases/download/v0.15.1/cloudwatch_exporter-0.15.1-jar-with-dependencies.jar
    
  2. JRE をインストールするには、次のようなコマンドを使用します。

    sudo apt install default-jre
    

Prometheus エクスポータを構成する

Prometheus CloudWatch エクスポータを構成するには、指標を収集する AWS サービスまたはサービスの構成ファイルを作成します。一般的な情報については、Prometheus CloudWatch エクスポータの構成ドキュメントをご覧ください。

  • ユーザーの移行: 既存の AWS CloudWatch 指標を Prometheus CloudWatch エクスポータに移行する場合は、Prometheus CloudWatch エクスポータの構成で構成ファイルを使用できます。これらの構成ファイルは、既存の指標をできるだけ忠実に複製するように設計されていますが、AWS サービスに Prometheus CloudWatch エクスポータを使用して利用可能なすべての指標を収集するわけではありません。

  • 新規ユーザー: 既存の指標を移行しない場合は、移行構成を使用しないことをおすすめします。他のサービスのエクスポータ構成を定義する方法については、AWS CloudWatch サービスのドキュメントをご覧ください。Prometheus CloudWatch エクスポータの GitHub リポジトリで、追加のサンプルを確認することもできます。

複数の AWS サービスの構成を 1 つの構成ファイルにまとめることができます。このドキュメントの例では、構成ファイルの名前が config.yml であると想定しています。

Prometheus エクスポータを実行する

Prometheus CloudWatch エクスポータを実行する前に、エクスポータに認証情報と認可を指定する必要があります。Prometheus CloudWatch エクスポータは AWS Java SDK を使用します。この SDK には、次の環境変数を使用して認証情報を指定する方法が用意されています。

SDK に認証情報を指定する方法については、AWS SDK for Java 2.x をご覧ください。

また、CloudWatch API を使用して指標を取得する権限も必要です。次の AWS IAM CloudWatch 権限が必要です。

  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricStatistics
  • cloudwatch:GetMetricData

aws_tag_select 機能を使用するには、tag:GetResources AWS IAM 権限も必要です。

AWS サービスへのアクセスを承認する方法については、AWS Identity and Access Management をご覧ください。

Prometheus CloudWatch エクスポータを実行する手順は次のとおりです。

  1. エクスポータの認証情報を指定するには、アクセスキー環境変数を設定します。

    export AWS_ACCESS_KEY=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
    export AWS_SESSION_TOKEN=YOUR_SESSION_TOKEN
    

    YOUR_KEY 変数はアクセスキーに置き換えます。AWS_SESSION_TOKEN 環境変数を設定するのは、一時的な認証情報を使用する場合のみです。

  2. 構成をテストするには、エクスポータを起動して構成ファイルを読み込み、次のコマンドを実行します。

    java -jar cloudwatch_exporter-0.15.1-jar-with-dependencies.jar 9106 config.yml
    

    必要に応じて、ポート(9106)と構成ファイル(config.yml)の値を変更します。

    エクスポータの実行中に config.yml ファイルを変更した場合は、次のコマンドを実行してエクスポータを再読み込みできます。

    curl -X POST localhost:9106/-/reload
    

    本番環境で使用する場合、VM の再起動時に再起動するようにエクスポータを構成できます。たとえば、Debian システムでは、システムとサービス マネージャーの systemd を使用できます。

Ops エージェントを設定する

以降のセクションでは、Ops エージェントをインストール、構成、起動する方法について説明します。これらのセクションでは、Prometheus CloudWatch エクスポータで使用する Ops エージェントの最小限のセットアップ情報について説明します。これらのトピックの詳細については、Ops エージェントの概要をご覧ください。

Ops エージェントをインストール

Ops エージェントをインストールするには、次のコマンドを使用してエージェントのインストール スクリプトをダウンロードして実行します。

curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

Ops エージェントを構成する

Ops エージェントを構成するには、エージェントのユーザー構成ファイルに構成要素を追加します。Linux では、ユーザー構成ファイルは /etc/google-cloud-ops-agent/config.yaml です。

Prometheus CloudWatch エクスポータから AWS 指標を収集するように Ops エージェントを構成する場合は、エージェントの Prometheus レシーバーを使用します。このドキュメントでは、Ops エージェントの 2 つの基本構成について説明します。いずれかの構成を選択し、ユーザー構成ファイルに追加します。

sudo vim /etc/google-cloud-ops-agent/config.yaml

Ops エージェントの基本構成

次の構成は、Ops エージェントの最小構成です。この構成では、次の処理が行われます。

  • prometheus 型の aws という名前のレシーバーを作成します。このレシーバーは、aws_exporter ジョブから指標をスクレイピングするように構成されています。指定するポートは、Prometheus CloudWatch エクスポータが指標をエクスポートするポートと一致している必要があります。Prometheus エクスポータを実行するをご覧ください。

  • aws 指標レシーバーを使用する aws_pipeline という名前のパイプラインを作成します。

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

JVM 指標を削除する構成

次の構成では、基本構成で行うすべての処理に加えて、エクスポータによって生成された JVM 指標を削除する再ラベル付け構成も追加されます。これらの指標を削除すると、取り込まれる指標データは減りますが、エクスポータ独自の指標が取得されないため、エクスポータに関する問題のデバッグが難しくなる可能性があります。

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
            # Drop the exporter's own JVM metrics to reduce noise.
            metric_relabel_configs:
              - source_labels: [ __name__ ]
                regex: 'jvm_.*'
                action: drop
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

Ops エージェントでは、さらに複雑な構成を作成できます。

  • Prometheus レシーバーの構成の詳細については、Prometheus 指標を収集するをご覧ください。
  • Ops エージェントの構成に関する一般的な情報については、構成モデルをご覧ください。

Ops エージェントを再起動する

構成の変更を Ops エージェントに適用するには、エージェントを再起動する必要があります。

  1. エージェントを再起動するには、インスタンスで次のコマンドを実行します。
    sudo service google-cloud-ops-agent restart
    
  2. エージェントが再起動したことを確認するには、次のコマンドを実行して「Metrics Agent」と「Logging エージェント」のコンポーネントが起動したことを確認します。
    sudo systemctl status google-cloud-ops-agent"*"
    

Cloud Monitoring で指標を表示する

Cloud Monitoring では、他の指標と同様に AWS CloudWatch 指標をクエリしてグラフを作成できます。Metrics Explorer インターフェースでは、PromQL、Monitoring Query Language(MQL)、またはクエリビルダー インターフェースを使用できます。詳細については、Metrics Explorer でグラフを作成するをご覧ください。

保持するグラフを作成した場合は、カスタム ダッシュボードに保存できます。詳細については、ダッシュボードの概要をご覧ください。

次のグラフは、AWS VM の aws_ec2_cpuutilization_sum 指標の PromQL クエリを示しています。

このグラフは、PromQL を使用して AWS VM の aws_ec2_cpuutilization_sum 統計情報を取得した結果を示しています。

PromQL を使用して、Cloud Monitoring の任意の指標をクエリできます。詳細については、Cloud Monitoring の指標を PromQL にマッピングするをご覧ください。

Prometheus 指標をクエリするには、PromQL を使用するか、Monitoring Query Language(MQL)などの Cloud Monitoring ツールを使用します。Prometheus 指標が Cloud Monitoring に取り込まれると、各指標は標準を使用して変換されます。OpenTelemetry から Prometheus への変換 が、Cloud Monitoring の prometheus_targetモニタリング対象リソースタイプにマッピングされます。変換には次の変更が含まれます。

  • 指標名には接頭辞 prometheus.googleapis.com/ が付けられます。
  • 指標名に含まれるピリオド(.)などの英数字以外の文字は、アンダースコア(_)に置き換えられます。
  • 指標名には、/gauge/counter などの指標の種類を示す文字列が末尾に付加されます。

MQL を使用して Prometheus aws_ec2_cpuutilization_sum 指標をクエリするには、指標を prometheus.googleapis.com/aws_ec2_cpuutilization_sum/gauge として参照し、prometheus_target モニタリング対象リソースタイプを指定します。

fetch prometheus_target :: 'prometheus.googleapis.com/aws_ec2_cpuutilization_sum/gauge'

次のグラフは、Prometheus aws_ec2_cpuutilization_sum 指標の MQL クエリの結果を示しています。

このグラフは、MQL を使用して AWS VM の aws_ec2_cpuutilization_sum 統計情報を取得した結果を示しています。

指標の動作に関するアラート

Cloud Monitoring では、[alerting policies][alert-intro] を作成して AWS CloudWatch 指標をモニタリングし、指標値の急増、低下、傾向を通知できます。

複数のリージョンをモニタリングする

Prometheus CloudWatch エクスポータの構成では、構成ファイルごとに 1 つのリージョンのみを使用できます。複数のリージョンをモニタリングする必要がある場合は、Prometheus エクスポータの複数のインスタンスを実行することをおすすめします。これは、モニタリングするリージョンごとに 1 つ構成します。複数のエクスポータを 1 つの VM で実行することも、VM 間で分散することもできます。この場合、Prometheus エクスポータの Docker イメージが役立つ場合があります。

Compute Engine VM で実行されている Ops エージェントを構成して、複数の Prometheus エンドポイントをスクレイピングできます。Prometheus エクスポータの複数のインスタンスを構成する場合は、スクレイピング構成を異なる job 名として使用することをおすすめします。これにより、トラブルシューティングを行う必要がある場合、必要に応じてエクスポータ インスタンスを区別できます。

Ops エージェントと Prometheus レシーバーの構成については、Ops エージェントを構成するをご覧ください。

費用

Amazon は、CloudWatch API リクエストごとに、またはリクエストする CloudWatch 指標ごとに料金を請求します。現在の料金については、Amazon CloudWatch の料金をご覧ください。Prometheus CloudWatch エクスポータには、Amazon の費用に影響する可能性がある次のクエリ特性があります。

  • GetMetricStatistics メソッド(デフォルト)を使用する場合、すべての指標に 1 つの API リクエストが必要です。1 つのリクエストに複数の統計情報を含めることができます。
  • aws_dimensions を使用する場合、エクスポータは API リクエストを実行して、リクエストする指標を決定する必要があります。通常、ディメンション リクエストの数は、指標リクエストの数と比較して無視できるほど少数です。

Cloud Monitoring では、Prometheus エクスポータからの AWS CloudWatch 指標については、取り込まれたサンプル数ごとに課金されます。現在の料金については、Monitoring の料金の概要をご覧ください。

移行のための Prometheus CloudWatch エクスポータの構成

このセクションでは、AWS 指標リストに記載されている AWS サービス指標をできるだけ忠実に複製する構成について説明します。これらの構成ファイルは、従来のソリューションから Prometheus CloudWatch エクスポータに移行するお客様を対象としています。Prometheus CloudWatch エクスポータを移行ユーザーではなく新規ユーザーとして設定して、これらの構成を使用する場合、Prometheus CloudWatch エクスポータで利用可能な AWS 指標すべては収集されません。

AWS CloudWatch 指標のサンプル構成ファイルを表示するには、次のいずれかのセクションを開きます。