[レポート] Container Insight, FireLens, AppMesh を使ってコンテナ環境 (ECS/EKS/Fargate) の可観測性を向上させる #CON328 #reinvent
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
- トラブルシュートのためのダッシュボード
- サービス毎のダッシュボード
- サービス間のダッシュボード
- トレースのダッシュボード
- X-Ray, ServiceLens
まとめ: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 など、新しいサービスを活用していきたいですね。