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}}}}
  • 上記の環境変数の値は、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 RoadmapAWS Containers Roadmap を確認し、この機能やロードマップについてのご意見、新しい機能を提案などをお聞かせください。

Next Steps

Ingress、Egress、TLS などのさまざまなメトリクスを詳しく調べ、データを探索することで、ワークロードのアプリケーションレベルのネットワーキングに関するより多くの知見を得ることができます。

翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。