[レポート] ANT332 Amazon ElasticsearchService を使ったコンテナアプリケーションの可視化とモニタリング #ANT332 #reinvent

2019.12.30

はじめに

この記事は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のスタックは改めて強力だなと思いました。