Amazon Web Services ブログ
AWS Distro for OpenTelemetry Collector を使用したクロスアカウントの Amazon ECS メトリクス収集
この記事は、Using AWS Distro for OpenTelemetry Collector for cross-account metrics collection on Amazon ECS を翻訳したものです。
2020 年 11 月、AWS は AWS Distro for OpenTelemetry (ADOT) による OpenTelemetry のサポートを発表しました。これは AWS がサポートする Cloud Native Computing Foundation (CNCF) OpenTelemetry プロジェクトのセキュアかつプロダクションレディなディストリビューションです。ADOT を使用すると、相関性のあるアプリケーションメトリクスやトレースを Amazon Managed Service for Prometheus (AMP) やパートナーの監視ソリューションなど複数の AWS ソリューションに送信し、計測できます。
多くのお客様はアプリケーションを別々の AWS アカウントや別々の AWS リージョンで実行しつつ、アプリケーションの可観測性を一箇所で管理したいと考えています。以前の記事では、Amazon Elastic Kubernetes Service (Amazon EKS) を使用して複数アカウントにまたがってメトリクスを収集する方法を紹介しました。シナリオは似ていますが、今回は ADOT エージェントを使用して、AWS ネイティブなコンテナオーケストレーションプラットフォームである Amazon Elastic Container Service (Amazon ECS) で実行されているワークロードのアプリケーションおよびプラットフォームのメトリクスを AMP ワークスペースに収集します。
セットアップの概要
課題を解決するために次のような構成にします。
ワークロードを実行するアカウント(以下、ワークロードアカウント):
- Amazon ECS のタスクで使用する IAM ロールを作成
モニタリングを実行するセントラルのアカウント(以下、モニタリングアカウント):
- AMP ワークスペースを作成
- AMP へのクロスアカウントアクセスを許可する IAM ロールの作成
ワークロードアカウント:
- クロスアカウントの IAM ロールを引き受けるための Amazon ECS のタスクロールの作成
- アプリケーションと AWS Distro for OpenTelemetry エージェントのセットアップ
- Amazon ECS クラスターの作成とアプリケーションの実行
モニタリングアカウント:
- Amazon Managed Service for Grafana (AMG) によるメトリクスの可視化
全体のアーキテクチャは以下のようになります。
ワークロードアカウント: ECS のロールのセットアップ
ワークロードアカウントにログインし、のちに Amazon ECS のタスクで使用する IAM ロールを作成します。このロールはモニタリングを実行するモニタリングアカウントで信頼され、assume-role の権限を与えられます。
モニタリングアカウントのセットアップ
ワークロードアカウントにログインし、AWS CLI を使用した以下のコマンドで AMP ワークスペースを作成します。
もしくは AWS コンソールを使って AMP サービスに移動することもできます。
以下のコマンドで AMP ワークスペースへの書き込み権限を持つ IAM ロールを作成できます。複数のアカウントに権限を付与するには “AWS”
配列に適切な IAM ロールの ARN を入力します。
ワークロードアカウント
注:このセクションの説明は、必要な数のワークロードアカウントに対して繰り返します。
ワークロードアカウントにログインして、先に作成したロールに assumeRole
権限を付与します。
ワークロードの設定
次に、Prometheus のメトリクスを公開するサンプルアプリケーションを設定します。
- アプリケーションと ECS のメトリクスをスクレイピングするため
aws-otel-collector
を設定します。 - Docker イメージをビルドし、Amazon Elastic Container Registry (Amazon ECR) 上でホストします。
ecs-cli
を使用して、Amazon ECS クラスターの設定、作成、実行などを行います。
レイアウトは以下のように構成します。
Amazon ECS をセットアップするには、要件として Docker と ecs-cli が必要です。Linux の場合、ecs-cli
は以下のようにインストールできます。
それでは、/metrics
の Prometheus エンドポイント を公開するサンプルアプリケーションを作成してみましょう。
アプリケーション用の Dockerfile を作成します。
最後に、以下のスクリプトで ECR リポジトリを作成し、アプリケーションのコンテナイメージをビルドして Amazon ECR にプッシュします。
それでは、AWS Distro for OpenTelemetry Collector の設定を行っていきます。ここでは Pipeline と呼ばれるデータ収集のためのカスタム設定を作成します。Pipeline ではデータの受信から始まり、処理や修正、最後にエクスポーターを経由して Collector を出るまでの、データが Collector 内でたどる経路を定義します。
ここでは、/metrics エンドポイントを持つアプリケーションからデータを収集し、ecs-metrics-receiver
を使用して ECS タスクメタデータエンドポイントから様々な ECS タスクメタデータをスクレイピングします。ecs-metrics-receiver やその他の設定オプションの詳細についてはドキュメントをご覧ください。
awsprometheusremotewrite
exporters の設定を使用して、監視用のアカウントで作成された AMP ワークスペースに、収集したメトリクスをエクスポートします。AMP の remote_write エンドポイントと、ロールを引き受けるための IAM ロール (ここでは ECS-AMP-Central-Role
) の両方を用意します。
変数の WORKSPACE_ID
および CENTRAL_ACCOUNT_ID
を編集し、以下のスクリプトを実行してパイプラインを作成します。
aws-otel-collector
の最新バージョンを使用して、カスタムの設定を持つコンテナイメージを Amazon ECR に作成します。
最後に、コンテナイメージをビルドしてプッシュします。
アプリケーションの実行: Amazon ECS のセットアップ
Amazon ECS はタスクを実行するための権限セットであるタスク実行ロールを必要とします。以下のスクリプトを実行して作成します。
WORKLOAD_ACCOUNT_ID
変数を設定し、以下のスクリプトを実行して docker-compose
ファイルを作成します。
ecs-cli
を使って Amazon ECS クラスターを作成します。
数分後、必要な関連リソースをすべて備えた ECS クラスターが作成されます。前述のコマンドから VPC_ID
を設定し、その VPC に関連付けられたデフォルトのセキュリティグループを取得します。
ecs-cli
が必要とする ecs-params.yml
ファイルを編集し、前のコマンドで出力されたサブネット ID とセキュリティグループに置き換えます。
最後に、以下のスクリプトを実行してアプリケーションをデプロイします。
数分後、Amazon ECS サービスが起動して実行されるはずです。Amazon CloudWatch Logs コンソールで aws-otel-collector
のログを、ロググループ ecs-xaccount-metrics-demo
で確認できます。
モニタリングアカウント: メトリクスの可視化
モニタリングアカウントに戻って、Amazon Managed Service for Grafana (AMG) のワークスペースを使ってメトリクスを可視化してみましょう。AMG の設定についてはドキュメントを参照してください。
アプリケーションのエンドポイントからのメトリクスを見ることができます。
Amazon ECS クラスターのメトリクス:
後片付け
ワークロードアカウント
モニタリングアカウント
まとめ
この記事では、AWS Distro for OpenTelemetry (ADOT) エージェントを使用して、Amazon ECS 上で動作するワークロードのアプリケーションおよびプラットフォームのメトリクスを収集する方法を説明しました。
ADOT は Amazon EKS、Amazon Elastic Compute Cloud (Amazon EC2)、またはオンプレミスなどの他のプラットフォームでも使用できます。さらに ADOT を使用して分散型トレース情報を収集し、複数の異なるワークロードアカウントがメトリクスを AMP や他のプラットフォームに一元的に送信することができます。また必要に応じて VPC エンドポイントや VPC ピアリングによるプライベート接続を設定することも可能です。
詳しくは ADOT、AMP、AMGのサイトをご覧ください。
翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。