[レポート] Container Insight, FireLens, AppMesh を使ってコンテナ環境 (ECS/EKS/Fargate) の可観測性を向上させる #CON328 #reinvent

re:Invent 2019 にて開催された技術セッションのレポートをお送りします。AWS のコンテナ環境において可観測性(Observability)をどう確保するか、という内容が語られました。サードパーティ製の製品・ SaaS を念頭に置きつつ、AWS が提供する Container Insights、FireLens、AppMesh をどう使えば良いかという内容でした。一瞬だけ ServiceLens も登場します。
2019.12.27

re:Invent 2019 にて開催された技術セッションのレポートをお送りします。

本セッションでは標題の通り、AWS のコンテナ環境において可観測性(Observability)をどう確保するか、という内容が語られました。サードパーティ製の製品・ SaaS を念頭に置きつつ、AWS が提供する Container Insights、FireLens、AppMesh をどう使えば良いかという内容でした。一瞬だけ ServiceLens も登場します。
このうち特に、FireLens や Container Insights(と ServiceLens)は登場してそれほど時間も経っていないため、これから使おうとされている方も多いのではないでしょうか。そういった方へもぴったりのセッションだと思います。

なお、本セッションの録画は既に公開されています。特にデモの部分は実際に見て頂いた方が分かりやすいので、興味がわきましたら是非ご確認下さい。

概要

(抄訳)CloudWatch Container Insights, FireLens, そして AWS App Mesh。これらは ECS/EKS/Fargate 環境において横断的な透明性を向上させるツールです。このセッションでは、コンテナ環境を横断して一元的に観測できるアーキテクチャを詳解します。

資料

※登壇者資料(スライド)の公開はないようです

登壇者

  • Akshay Ram - Sr. Product Manager - Technical, Amazon Web Services
  • Shubha Rao - Principal Product Manager, Amazon Web Services
  • Sharanya Devaraj - Software Development Engineer, Amazon Web Services

内容

  • 「可観測性を向上させる」とは?
    • フルスタックの透明性 - 開発者は彼らのスタックのなかの異なるレイヤ、特にアプリケーションレベルの可視性を求めている
    • 既存の各ツールの互換性 - 稼働中のコンテナサービスは、最新のシステムでちゃんと動いて欲しい
    • どこでも動く - ECS, Fargate, ECS, EKS どこでも同じ可観測性を保っていて欲しい
  • フルスタック
    • アプリケーションレベル - 各サービスおよびサービス間
    • コンテナレベル - サービス、タスク、Pod
    • コンピュート (ホスト) レベル - クラスタ、インスタンス
  • 既存のツールセットとの互換性
    • AWS マネージド - CloudWatch, X-Ray ...
    • パートナー製品 - Datadog, Splunk, Sysdig ...
    • 独自管理 (Self-managed) - Prometheus, ELK (Elasticsearch + Logstash + Kibana) ...
  • ツールを変えることのない「run anywhere」な柔軟性
    • アプリケーション - 異なるチーム、言語、プロトコル、デプロイ
    • オーケストレーション - ECS, EKS : デプロイ、スケジューリング、スケーリング、管理
    • コンピュート (ホスト) - EC2, Fargate
  • ここではこれら全てをサポートするものとして、以下を解説する
    • AWS AppMesh
    • FireLens, Fluent Bit
    • Container Insights

AWS AppMesh

  • AppMesh とは - アプリケーション間の通信を管理する
    • チーム間の一貫性
    • 障害の可視化・独立(他への影響がない)
    • 通信のマネジメント
    • キメの細かなデプロイコントロール
    • サービス間の通信をコントロールするサービスメッシュ
      • メトリクス、ログ、トレースも担う
  • CloudWatch ・パートナー製品などと連携
    • CloudWatch <- CWAgent から情報を取得
    • パートナー製品 <- StatsD エージェントから
      • Datadog
      • SignalFx
      • Sysdig
      • fluentd
    • Prometheus + Grafana <- REST API から
      • /var/log/envoy/stats/prometheus
  • トラブルシュートのためのダッシュボード

まとめ:AppMesh が対応可能なところ

  • スタック
    • [✓] アプリケーション
    • [_] コンテナサービス
    • [_] コンピュート(ホスト)
  • コンパチビリティ
    • [✓] AWS マネージド
    • [✓] パートナー製品
    • [✓] 独自管理(セルフマネージド)
  • プラットフォーム
    • [✓] Amazon ECS
    • [✓] Amazon EKS
    • [✓] Amazon EC2 モード
    • [✓] AWS Fargate
    • [✓] AWS Outposts

FireLens and AWS for Fluent Bit

  • チャレンジ
    • 幅広い解析とストレージツールのサポート
    • 構成とテレメトリ (測定) ソフトウェアにおけるライフサイクル管理の分離
  • 解決策(ソリューション)
    • 構成とテレメトリソフトウェアのライフサイクルを独立させる
    • Fluentd と互換性のある広範な Fluent Bit 開発コミュニティ
    • Fluent Bit の Docker イメージを AWS がライフサイクル管理する

  • FireLens は、ほぼあらゆる送信先へログを送信できる

まとめ:FireLens が対応可能なところ

  • スタック
    • [✓] アプリケーション
    • [✓] コンテナサービス
    • [✓] コンピュート(ホスト)
  • コンパチビリティ
    • [_] AWS マネージド
    • [✓] パートナー製品
    • [✓] 独自管理(セルフマネージド)
  • プラットフォーム
    • [✓] Amazon ECS
    • [✓] Amazon EKS
    • [✓] Amazon EC2 モード
    • [✓] AWS Fargate
    • [✓] AWS Outposts

Container Insights

  • 不可知論者のコンテナプラットフォーム
  • チャレンジ
    • チーム毎に好みの異なるコンテナサービスプロダクトがある
    • 監視においてはフルマネージドと独自管理のサービスを混在させる
    • 環境を横断して一貫性のあるモニタリング UI を提供
  • 解決策(ソリューション)
    • ECS, EKS, Fargate にてContainer Insights を起動する
  • CloudWatch Container Insights(とは)
    • コンテナアプリとマイクロサービスに対して提供されるフルマネージドの可観測性サービス
      • モニタリング
      • トラブルシュート
      • アラート通知
    • 確実でセキュアなメトリックとログの収集
    • 自動的な集計と解析
    • メトリクス、ログ、トレースをまたぐ可観測性体験
    • 予め用意されたダッシュボード

ユースケース

  • インフラレベルでのデバッグ
    • クラスタ、ノード、インスタンスのリソース消費、ステータス
    • 例:クラスタ CPU、メモリの消費
  • コンテナサービスレベルでのデバッグ
    • サービス、タスク、Pod、コンテナレベルでのメトリクスとログ
    • 例:サービスタスク数、タスク/Pod のメモリ消費
  • アプリケーションレベルでのデバッグ
    • CloudWatch によるアプリケーションログ
    • AppMesh - Envoy のメトリクス
    • 例:アプリ固有の情報をクエリする

まとめ:Container Insights が対応可能なところ

  • スタック
    • [_] アプリケーション
    • [✓] コンテナサービス
    • [✓] コンピュート(ホスト)
  • コンパチビリティ
    • [✓] AWS マネージド
    • [_] パートナー製品
    • [_] 独自管理(セルフマネージド)
  • プラットフォーム
    • [✓] Amazon ECS
    • [✓] Amazon EKS
    • [✓] Amazon EC2 モード
    • [✓] AWS Fargate
    • [✓] AWS Outposts

デモ

(動画 28:32〜。Container Insights の操作は 34:10 頃から)

  • Frontend : Ruby on Rails / Fargate
  • Backend 1 : Crystal / Fargate
  • Backend 2 : Node.js / EKS
  • 3 AZ
  • ab (Apache Bench) で負荷をかける
  • CloudWatch Container Insights によるメトリクス確認
  • タスクの CPU 負荷が高いため、タスク定義を変更しローリングデプロイ
  • ログの確認 -> CloudWatch Logs Insights でクエリ文実行
    • タスクのパフォーマンスログ
    • アプリケーションログ
  • レイテンシが下がったことを確認

まとめ

AWS のコンテナ環境において可観測性(Observability)をどう確保するか、というセッションでした。Container Insights や FireLens など、新しいサービスを活用していきたいですね。