いかにしてサービスの依存関係を可視化し追跡可能にするか
クラウドネイティブでは、モニタリングだけではなくオブザーバビリティ(可観測性)を実現することがシステム運用の要点となる。モニタリングとは問題発生の有無を観測するためのものだ。一方のオブザーバビリティでは、どんな問題が起きているかだけではなく、なぜ問題が起きたのか、どんな影響がシステムに生じるのかを発見することに重きが置かれる。
では、システムはモノリシックな状態からいかにしてクラウドネイティブな状態へと変遷するのか。池山氏は下図を用いて解説した。
「初期の段階は、図の左端にあるRetain & Optimizeです。オンプレミスなインフラとモノリシックなアプリケーションによってシステムが構築されており、ウォーターフォールモデルによる長いスパンの開発が行われます。また、この段階ではDevチームとOpsチームの間に壁が存在している状態です。
クラウド移行の第一段階として、左から二番目のLift & Shiftになります。サービスのスケーラビリティやサーバー調達の容易性を向上させるため、クラウドの導入がスタートします。インフラ環境をオンプレミスからクラウドIaaSへと移行していくのです。
次のフェーズは、右から二番目のRe-Factorです。マネージドサービスやPaaSなどを活用し、より柔軟にスケールできるアーキテクチャへと変革していきます。ですが、まだアプリケーションコンポーネントの相互依存は強い状態です。
最終段階が、図の右端にあるRe-Architect / Cloud-Nativeです。アプリケーション同士が疎結合になり、サービス単位でのスケールやリリースが可能になります。DevチームとOpsチームが緊密に連携し、DevOpsやSRE(Site Reliability Engineering)と呼ばれるチームがサービスのパフォーマンスや運用の自動化に責任を持つようになるのです。アーキテクチャの変遷とともに技術は複雑化し、運用や監視に求められる要件も大きく変化していきます」と池山氏は語った。
クラウドネイティブ化が進むと、インフラはさまざまなクラウド環境へと分散して配置される。採用されるプログラミング言語やフレームワーク、データベースも多様化し、コンテナなどのリソースは非永続的であるため環境は動的に変化していく。かつ、サービス同士の相互の依存関係を可視化し追跡可能にするため、分散トレーシングやリアルタイム分析が重要になる。オブザーバビリティは、こうした多様かつ動的な環境を運用する上での要になる概念なのだ。
オブザーバビリティでは、メトリクス・トレース・ログという性質の異なるデータを取得・分析することが重要となる。メトリクスは異常検知を行い「システムに何が起きているか」を発見するためのもの。トレースは問題への対処をする上で「どこで問題が起きているのか(アプリケーション・サービスの依存関係や深度も含めて)」を見るためのもの。ログは根本原因を探るために「なぜ問題が発生したのか」を確認するためのものである。では、いかにしてこの三本柱のデータを取得すべきなのだろうか。