[レポート] ANT332 Amazon ElasticsearchService を使ったコンテナアプリケーションの可視化とモニタリング #ANT332 #reinvent
はじめに
この記事はANT332 Use Amazon ES to visualize and monitor containerized applicationsのレポートです。 ワークショップの内容は http://eseksworkshop.com/en/ で公開されています。またCloudformationテンプレートやkubernates、Logstashなどの設定ファイルは以下のリポジトリで公開されています。
ワークショップの概要
A modern application service consists of many microservices working together. But how do you get visibility on their environment, their connection to a larger application service, and how well they are working together? How can you outwit entropy? The answer is logs, plus a strong and automated log analyzer. In this lab, you deploy a containerized application on Amazon Elasticsearch Service. You use a combination of Fluentd and Beats to send your instance, container, and application logs to Amazon ES. You then explore these logs with Kibana, building a dashboard to gain visibility and monitor key parameters of your application.
スピーカー
- Anoop Sunke - Senior Solutions Architect, Amazon Web Services
- Saad Rana - Security Operations Engineer II, Ring Inc., Amazon Devices
アジェンダ
ワークショップは次のように冒頭にスライドによる説明、後半にラボ(演習)という流れでした。
- Amazon Elasticsearch Service の紹介
- Kubernatesのコンセプト
- コンテナモニタリングのパターン
- ワークショップの説明
Amazon Elasticsearch Serviceの紹介
Elasticsearchとは
- オープンソース
- 導入が迅速
- データの投入、可視化が容易
- ハイパフォーマンスで分散可能
- 分析と検索用途に優れている
- テキスト検索
- ストリーム処理
- 分析
コンテナモニタリングのパターン
- ログ収集パイプラインを選択する
- エージェント/フォワーダー(e.g. fluentbit, beats)
- プロセッサ(e.g. Amazon Kinesis data Firehorse, fluentd, logstash)
- デプロイ方法を選択する
ワークショップ
シナリオ
- EKSクラスタ内のpodsとコンテナのメトリクスとログを可視化するダッシュボードをKibanaに作成する
- ログとメトリクスの関連を検索する
- パフォーマンス問題やエラーを発生させ原因を調査する
モニタリング対象のシステム
Kubernates上に構築されたWebとRedisからなるゲストブックアプリケーションをモニタリングしました。
- Redisはシングルマスタ、マルチリードレプリカ構成
- Webは複数インスタンス
環境
- kubernates, Elasticsearchの環境はAWS上に作成
- kubernatesの操作はCloud9上のコンソールから行う
メトリクス収集基盤の作成
ワークショップの前半では下記のツールのセットアップをしました。
- Cloud9 とAmazon ESクラスタ
- 以下をkubernates上に構築(モニタリング系はfluentbitはsidecar、他はDeamonSet)
- ゲストブックアプリケーション(web + redis)
- Logstash: filebeat, metricbeatからデータをElasticsearchに転送
- filebeat: kubeletのログを収集
- metricbeat: システムとkubernates自体のメトリクス収集
- fluentd: fluentbitから集約したデータをElasticsearchに転送
- fluentbit: redis、 apache、kubernatesのログ、メトリクス収集
kibana上のダッシュボードの作成とMYSTERY HUNT
後半はkibana上にVisualizeを作成したり、MYSTERY HUNTを解きました。 MYSTERY HUNTはアプリケーションに発生した問題をkibana上のメトリクスやログを参考にしながら解決したり、原因を特定するものです。
- MYSTERY HUNT #1 謎のスクリプトを実行して何が発生したか? => 答えは「webアプリのレプリカセットが大量に起動されていた」
- MYSTERY HUNT #2 404エラーが大量に起きてるけど何があった? => ログでどのURLが404となっているかを確認
- MYSTERY HUNT #3 Redisのパフォーマンスが悪い! => mem_fragmentation_ratioが高くなっているのを確認
作成したダッシュボード
まとめ
知識としては知っていたkubernatesのDeamonSetやSidecarパターンを実際に使ってアプリとミドルウェア、モニタリングツールを組み合わせて構築することで実際に運用する場合のイメージがつかめた気がします。 またこうして使ってみてElasticsearch、Logstash、Kibanaのスタックは改めて強力だなと思いました。