Amazon Web Services ブログ
AWS App Mesh から Amazon CloudWatch への Envoy メトリクスの送信
この記事は、Sending Envoy metrics from AWS App Mesh to Amazon CloudWatch を翻訳したものです。
Amazon ECS や Amazon EKS で AWS App Mesh を利用している AWS のお客様から、以下のリクエストを多くいただきます。この記事では Envoy からメトリクスを収集し、 CloudWatch に送信するメカニズムを示します。
「当社では、ECS および EKS クラスター内で動作するマイクロサービス向けに、アプリケーションレベルネットワーキングのサービスメッシュソリューションとして、 AWS App Mesh を採用しました。App Mesh の Envoy サイドカーによって収集されたメトリクスが Amazon CloudWatch に送信できるかどうかを知りたいと思います。Amazon CloudWatch コンソールで、App Meshの Envoy サイドカーから取得した TLS、Ingress、Egress、Cluster Manager などのさまざまなメトリクスの恩恵を受けたいと考えています。また、革新的な CloudWatch ダッシュボードを作成して、メトリクスを調査し、より多くの洞察を得るためのメカニズムも望んでいます。これを達成する方法や、詳細の手順はありますか?」
はじめに:
AWS App Mesh をアプリケーションレベルネットワーキングのサービスメッシュソリューションとして採用しているお客様は、モニタリングとアラートを生成するために App Mesh からメトリクスを取り込み、集約し、CloudWatch にメトリクスを送信する必要があります。ECS または EKS クラスターで実行されている、AWS App Mesh を利用したマイクロサービス用のサービスメッシュにて、App Mesh から CloudWatch へのメトリクスを取り込み、集約して、自分たちのワークロードにおけるアプリケーションレベルのネットワーキングのステータスを確認します。AWS App Mesh は ECS タスク内または EKS の Pod 内のアプリケーションコンテナの横に Envoy サイドカーを注入します。Envoy サイドカーは多くのメトリクスを収集します。ECS タスクまたは EKS の Pod 内に CloudWatch Agent をデプロイすることで、App Mesh の Envoy サイドカーから収集されたすべてのメトリクスを CloudWatch に送信できます。これはモニタリングやアラートを行うための CloudWatch ダッシュボードの作成に役立ちます。
- ECS タスクまたは EKS の Pod でメトリクスを転送するために必要な Envoy コンテナの設定
- ECS タスクまたは EKS の Pod へ CloudWatch Agent コンテナのインストール
- App Mesh / Envoy Stats を使用した CloudWatch ダッシュボードの設定
アーキテクチャ概要:
上の図は、App Mesh によって展開される Application コンテナと Envoy サイドカーコンテナを持つ既存の ECS タスクのアーキテクチャを示しています。これにより、ECS タスクの Envoy コンテナは、Application コンテナからメトリクスを収集します。Envoy コンテナは、収集されたメトリクスを localhost:8125
に送信するように設定されます。新しい CloudWatch Agent を ECS タスクにデプロイします。このタスクは localhost:8125
で Listen します。CloudWatch Agent は収集されたすべてのメトリクスを Amazon CloudWatch に送信し、コンソールで表示します。
デモ:
Step 0: 前提条件:
- ECS または EKS クラスターで AWS App Mesh が動作している
Note: このソリューションの実装を開始するには、App Mesh レベルで設定を行う必要はありません。
Step 1: ECS Envoy コンテナの設定 :
- 最初のステップは、環境変数
ENABLE_ENVOY_DOG_STATSD
(値 1) をタスク定義の Envoy コンテナに追加します。これにより、localhost:8125 へのstatsd
の転送が設定されます。 - また、メッシュと仮想ノードのタグをメトリクスに追加する
ENABLE_ENVOY_STATS_TAGS=1
を追加することをお勧めします。
Note: EKS を使用している場合、同じ手順を EKS の Pod の Envoy サイドカーコンテナに適用します。
Step 2: ECS CloudWatch Agent コンテナのデプロイ:
- Envoy サイドカーがすでに localhost:8125 にメトリクスを転送するように設定されている場合は、localhost: 8125 で Listen する CloudWatch Agent が必要になります。このデモでは、CloudWatch メトリクスの名前空間を
AppMeshExample/gateway-envoy/StatsD
と命名しています。 - 次のオプションを使用して、localhost: 8125 で Listen する新しい CloudWatch Agent をタスク定義に追加します:
- Name:
cw-agent
- Image:
amazon/cloudwatch-agent:latest
- Essential:
true
- Container Port:
8125 (udp)
- Environment variables:
- Name:
CW_CONFIG_CONTENT
- Value:
{ "metrics": { "namespace":"AppMeshExample/gateway-envoy/StatsD", "metrics_collected": { "statsd": { "metrics_aggregation_interval": 0}}}}
- Name:
- Name:
- 上記の環境変数の値は、AWS マネジメントコンソールを使用して CloudWatch Agent をタスク定義に追加すると正常に動作します。CloudFormation テンプレートを更新して CloudWatch Agent のコンテナ定義を追加する場合は、以下のコードスニペットに従ってください。
- Name: cw-agent
Image: amazon/cloudwatch-agent:latest
Essential: true
User: '1337'
PortMappings:
- ContainerPort: 8125
Protocol: udp
HostPort: 8125
Environment:
- Name: CW_CONFIG_CONTENT
Value: "{ \"metrics\": { \"namespace\":\"AppMeshExample/gateway-envoy/StatsD\", \"metrics_collected\": { \"statsd\": { \"metrics_aggregation_interval\": 0}}}}"
- タスク定義を更新し、CloudWatch Agent コンテナを ECS タスクにデプロイします。また、 IAM コンソールで ECS タスクロールに
CloudWatchAgentServerPolicy
を追加します。 - CloudWatch にメトリクスを送信するための最後のステップは、ECS サービスを更新するか、新しい ECS サービスを作成することです。この新しい ECS サービスは、上記の手順で更新した ECS タスク定義を利用します。
- CloudWatch の「メトリクス」に移動します。収集されたすべてのメトリクスは、名前空間の
AppMeshExample/gateway-envoy/StatsD
に表示されます。これは、上記の環境変数CW_CONFIG_CONTENT
で変更できます。
Note: EKS クラスターでもサポートされます。環境変数を envoy
コンテナに追加し、cw-agent
コンテナを pod/deployment spec に追加し、CloudWatchAgentServerPolicy
ポリシーを EKS の IAM ロールに追加します。
Step 3: CloudWatch ダッシュボードの設定
- github リポジトリのスクリプトを使用して、App Mesh / Envoy Stats で上記の CloudWatch ダッシュボードを作成できます。以下ののコマンドに実行してリポジトリをクローンします。
git clone https://github.com/aws/aws-app-mesh-examples.git
cd aws-app-mesh-examples/blogs/envoy-cw-dashboards
deploy-dash.sh
の以下の部分を、環境に合わせて変更してください。
CLOUDWATCH_NAMESPACE="AppMeshExample/gateway-envoy/StatsD"
MESH_NAME="<Name of your AppMesh>"
VIRTUAL_NODE_NAME="<Name of your Virtual Node"
- ダッシュボードスクリプトの
deploy-dash.sh
を実行します。これにより CloudFormation テンプレートがデプロイされ、CloudWatch ダッシュボードが作成されます。
まとめ
上記のデモから、コンテナワークロードの App Mesh で Envoy サイドカーを使用し、収集されたメトリクスを CloudWatch に送信するメカニズムを確認できます。これを使用して、コンテナワークロードのアプリケーションの監視とアラートを改善できることを願っています。GitHub でホストされている AWS App Mesh Roadmap と AWS Containers Roadmap を確認し、この機能やロードマップについてのご意見、新しい機能を提案などをお聞かせください。
Next Steps
Ingress、Egress、TLS などのさまざまなメトリクスを詳しく調べ、データを探索することで、ワークロードのアプリケーションレベルのネットワーキングに関するより多くの知見を得ることができます。
翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。