マイクロサービスとコンテナの監視 - Adrian Cockcroft氏が指摘する課題

Adrian Cockcroft氏がGlueCon 2015で,マイクロサービスとコンテナベースのアプリケーション監視に必要なルールのリストを公表した。これらガイドラインに加えてCockcroft氏は,クラウドネイティブなコンテナベースのアプリケーションを監視する上での問題点にも着目し,自身が開発した‘Spigo’というツールを紹介した。マイクロサービスのシミュレーションと可視化を行うことで,大規模なマイクロサービス監視のテストを支援するツールだ。

Battery Venturesの技術員であるCockcroft氏の講演は,マイクロサービスとコンテナを監視する上で必要な,一連のルールを紹介することから始まった。この内容は,Monitorama 2014で最初に公開したルールの改訂版だ。

  1. メトリックスの収集や移動,保存,表示を行うコードよりも,分析のためのコード開発により多くの時間を使うこと
  2. 重要なビジネスメトリックスの遅延時間を,人の注意力の範囲(10秒以内)にまで短縮すること
  3. 計測システムの正確性と精度が十分であることの検証,および応答時間のヒストグラム収集
  4. 監視システムは,監視対象のシステム(およびサービス)以上のアベイラビリティとスケーラビリティを有する必要がある
  5. 分散で短寿命な,'クラウドネイティブ’なコンテナ型マイクロサービスを監視するための最適化
  6. 関係性を理解するために,メトリックスをモデルに適応させる(今回の新たなルール)

インフラストラクチャ,データフロー,所有構造や組織構造は,その多くが直交するものであると同時に,メトリックスを理解するためのリンクが必要である。そのためには新たなルールとして,‘メトリックスをモデルに適応させる’ことが不可欠だ,とCockcroft氏は主張する。マイクロサービスを“境界を持ったコンテキストによる疎結合サービス指向アーキテクチャ”であると定義した上で,氏は次に,マイクロサービスとコンテナ技術(Dockerのような)を監視する上での,一連の問題点に関する詳細な議論へと進んだ。

最初に挙げられた問題点は‘複雑さ’だ。モノシリックなアプリケーション内部の依存性には制限がないため,明示的な可視性を持つマイクロサービスの依存性に比較すると,はるかに複雑なものになる可能性がある,とCockcroft氏は言う。このような外部依存性を,すべて把握するのは至難の業だ。第2の問題は‘変化の早さ’だ。これはコンテナベースのマイクロサービスが継続的デプロイメントによって可能にした,変化のペースに伴う難しさである。

1分間に1回のCPU使用率測定は,コンテナでは意味を持ちません ... 変化速度に対応することは,監視ツールの大きな課題です。

第3の課題として挙げられているのは‘規模’だ。これには単純な実行コンテナやマシン数といったものに限らず,リージョンやアベイラビリティゾーンといった‘クラウドネイティブ’な概念を考慮しなければならない。サービス自体が並行動作するのみならず,複数のバージョンが混在する可能性もあるからだ。

‘データフロー’もまたマイクロサービスアーキテクチャ固有の課題である,とCockcroft氏は言う。NetflixのAtlan(および関連ツール)やAppDynamicsのApplication Performance Management,TwitterのZipkinといったツールは,限定された数のサービスに対して要求フローを表示する機能を備えている。しかしながら,高度なアーキテクチャの中には,多数のサービスを備えているものもあり,これが可視化を極めて難しいものにしている。

‘障害’の可能性は,マイクロサービスアプリケーションには常に存在する問題だ。クラウド環境で発生する障害によって,この問題はさらに複雑化する。例えばアベイラビリティゾーンのパーティションや障害が発生した場合,監視/分析プラットフォームは何を報告すればよいのか?クラウドネイティブなアプリケーションは,その設計上,アベイラビリティゾーンの部分的な障害が起きても動作を継続する。したがってそれ自体は必ずしも‘障害’ではない。とはいえ,システムオペレータには通知すべきであろうし,アプリケーションのデプロイが停止する可能性もある。

ここでの問題は,マイクロサービスの一般的な障害パターンを理解し,それを伝えることです。

マイクロサービスのテストやコンテナ監視を行うツールは,規模が大きくなると非常に高価なものになる。実行可能な代案として推奨されるのが,シミュレーションを利用する方法だ。Cockcroft氏は自身の‘spigo’(あるいは‘simianviz’)というマイクロサービスシミュレータを紹介している。これは対象とするマイクロサービスアーキテクチャのモデリングと視覚化を可能にするツールだ。

Spigo/simianvizはマイクロサービスシステムの模造とテストが可能な,Go/D3.jsベースのアプリケーションである。大規模システムのコンフィギュレーションもシミュレーションすることも可能で,実際の監視ツールのストレステストをサポートすることが最終的な目標である。Cockcroft氏はさらに,動的に変化するコードのプッシュや自動コンフィギュレーション,ゾーンやリージョン障害に対するNetflixのchaos gorillaのモデリング,spigoとsimianvizディスプレイ間のWebSocket接続などのサポートを追加する計画だ。

私のテーマは,“あなたのシステムのアーキテクチャをSpigoで構築すること”です。それにはストレス監視ツールも含まれます。マイクロサービスの監視に役立ててください!

Adrian Cockcroft氏のGlueConでの講演に関する情報やスライドは,Cockcroft氏のSlideShareアカウントで参照することができる。Spigo/simianvizのコードはGitHubで入手可能だ。GlueConはクラウドやDevOps,モバイル,API,ビッグデータなどを中心に,毎年開催される開発者のカンファレンスである。詳細な情報はGlueConのWebサイトで確認できる。