AWS Distro for Open Telemetry を使用して Amazon ECS からのメトリクスの取り込みを設定する - Amazon Managed Service for Prometheus

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Distro for Open Telemetry を使用して Amazon ECS からのメトリクスの取り込みを設定する

このセクションでは、Amazon Elastic Container Service (Amazon ECS) からメトリクスを収集し、 AWS Distro for Open Telemetry (ADOT) を使用して Amazon Managed Service for Prometheus に取り込む方法について説明します。また、Amazon Managed Grafana でメトリクスを視覚化する方法についても説明します。

前提条件

重要

開始する前に、 AWS Fargate クラスター上のデフォルト設定の Amazon ECS 環境と、Amazon Managed Service for Prometheus ワークスペースおよび Amazon Managed Grafana ワークスペースが必要です。ユーザーがコンテナのワークロード、Amazon Managed Service for Prometheus、Amazon Managed Grafana に精通していることを前提としています。

詳細については、以下のリンクを参照してください。

  • Fargate クラスターにデフォルト設定で Amazon ECS 環境を作成する方法については、「Amazon ECS デベロッパーガイド」の「クラスターの作成」を参照してください。

  • Amazon Managed Service for Prometheus ワークスペースを作成する方法については、「Amazon Managed Service for Prometheus ユーザーガイド」の「ワークスペースの作成」を参照してください。

  • Amazon Managed Grafana ワークスペースを作成する方法については、「Amazon Managed Grafana User Guide」の「Creating a workspace」を参照してください。

ステップ 1: カスタム ADOT コレクターコンテナイメージを定義する

以下の設定ファイルをテンプレートとして使用して、独自の ADOT コレクターコンテナイメージを定義します。my-remote-URLmy-region は、使用中の endpointregion の値に置き換えます。設定を adot-config.yaml というファイルに保存します。

注記

この設定では、sigv4auth 拡張機能を使用して Amazon Managed Service for Prometheus への呼び出しを認証します。sigv4auth の構成方法の詳細については、GitHub の「Authenticator - Sigv4」を参照してください。

receivers: prometheus: config: global: scrape_interval: 15s scrape_timeout: 10s scrape_configs: - job_name: "prometheus" static_configs: - targets: [ 0.0.0.0:9090 ] awsecscontainermetrics: collection_interval: 10s processors: filter: metrics: include: match_type: strict metric_names: - ecs.task.memory.utilized - ecs.task.memory.reserved - ecs.task.cpu.utilized - ecs.task.cpu.reserved - ecs.task.network.rate.rx - ecs.task.network.rate.tx - ecs.task.storage.read_bytes - ecs.task.storage.write_bytes exporters: prometheusremotewrite: endpoint: my-remote-URL auth: authenticator: sigv4auth logging: loglevel: info extensions: health_check: pprof: endpoint: :1888 zpages: endpoint: :55679 sigv4auth: region: my-region service: aps service: extensions: [pprof, zpages, health_check, sigv4auth] pipelines: metrics: receivers: [prometheus] exporters: [logging, prometheusremotewrite] metrics/ecs: receivers: [awsecscontainermetrics] processors: [filter] exporters: [logging, prometheusremotewrite]

ステップ 2: ADOT コレクターコンテナイメージを Amazon ECR リポジトリにプッシュする

Dockerfile を使用して、コンテナイメージを作成して Amazon Elastic Container Registry (ECR) リポジトリにプッシュします。

  1. Dockerfile をビルドして、コンテナイメージをコピーして OTEL Docker イメージに追加します。

    FROM public.ecr.aws/aws-observability/aws-otel-collector:latest COPY adot-config.yaml /etc/ecs/otel-config.yaml CMD ["--config=/etc/ecs/otel-config.yaml"]
  2. Amazon ECR リポジトリを作成します。

    # create repo: COLLECTOR_REPOSITORY=$(aws ecr create-repository --repository aws-otel-collector \ --query repository.repositoryUri --output text)
  3. コンテナイメージを作成します。

    # build ADOT collector image: docker build -t $COLLECTOR_REPOSITORY:ecs .
    注記

    コンテナのビルドは、そのコンテナが実行される環境と同じ環境で行うことを前提としています。そうでない場合、イメージのビルド時に --platform パラメータの使用が必要になることがあります。

  4. Amazon ECR リポジトリにサインインします。my-region は、使用中の region の値に置き換えます。

    # sign in to repo: aws ecr get-login-password --region my-region | \ docker login --username AWS --password-stdin $COLLECTOR_REPOSITORY
  5. コンテナイメージをプッシュします。

    # push ADOT collector image: docker push $COLLECTOR_REPOSITORY:ecs

ステップ 3: Amazon ECS タスク定義を作成して Amazon Managed Service for Prometheus をスクレイピングする

Amazon Managed Service for Prometheus をスクレイピングする Amazon ECS タスク定義を作成します。タスク定義には、adot-collector という名前のコンテナと、prometheus という名前のコンテナを含める必要があります。prometheus はメトリクスを生成し、adot-collectorprometheus をスクレイピングします。

注記

Amazon Managed Service for Prometheus はサービスとして実行され、コンテナからメトリクスを収集します。この場合のコンテナは、Prometheus をエージェントモードでローカルで実行し、ローカルのメトリクスを Amazon Managed Service for Prometheus に送信します。

例: タスク定義

以下の例は、タスク定義がどのようなものかを示しています。この例をテンプレートとして使用して、独自のタスク定義を作成できます。adot-collectorimage の値は、リポジトリの URL とイメージタグ ($COLLECTOR_REPOSITORY:ecs) に置き換えます。adot-collectorprometheusregion の値は、使用中の region の値に置き換えます。

{ "family": "adot-prom", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "adot-collector", "image": "account_id.dkr.ecr.region.amazonaws.com/image-tag", "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/ecs-adot-collector", "awslogs-region": "my-region", "awslogs-stream-prefix": "ecs", "awslogs-create-group": "True" } } }, { "name": "prometheus", "image": "prom/prometheus:main", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/ecs-prom", "awslogs-region": "my-region", "awslogs-stream-prefix": "ecs", "awslogs-create-group": "True" } } } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "1024" }

ステップ 4: Amazon Managed Service for Prometheus にアクセスする許可をタスクに付与する

スクレイピングされたメトリクスを Amazon Managed Service for Prometheus に送信するには、Amazon ECS タスクに AWS API オペレーションを呼び出すための正しいアクセス許可が必要です。タスク用の IAM ロールを作成し、そのロールに AmazonPrometheusRemoteWriteAccess ポリシーをアタッチする必要があります。このロールを作成してポリシーをアタッチする方法の詳細については、「タスク用の IAM ロールとポリシーの作成」を参照してください。

IAM ロールに AmazonPrometheusRemoteWriteAccess をアタッチし、そのロールをタスクに使用したら、スクレイピングされたメトリクスを Amazon ECS によって Amazon Managed Service for Prometheus に送信できます。

ステップ 5: Amazon Managed Grafana でメトリクスを視覚化する

重要

開始する前に、Amazon ECS タスク定義に対して Fargate タスクを実行する必要があります。そうしないと、Amazon Managed Service for Prometheus でメトリクスを使用することができません。

  1. Amazon Managed Grafana ワークスペースのナビゲーションペインで、 AWS アイコンの下にあるデータソースを選択します。

  2. [データソース] タブの [サービス] で、[Amazon Managed Service for Prometheus] を選択し、[デフォルトのリージョン] を選択します。

  3. [データソースの追加] を選択します。

  4. ecs および prometheus プレフィックスを使用して、メトリクスのクエリと表示を行います。