可観測性 : Adobe が Epsagon と Fastly のログ機能でパフォーマンスの向上と平均復旧時間 (MTTR) の短縮を実現した方法
Fastly のブログでゲスト記事を公開することはめったにないのですが、この度 Fastly のパートナーで、マイクロサービスの可視化を専門とする Epsagon から、Adobe と共に Fastly を利用して平均復旧時間を短縮するソリューションを開発した話を聞いた際、これはぜひ Fastly のブログでも紹介したいと思いました。
Epsagon と Adobe の共同プロジェクト Project Helix のチームは、Fastly VCL の解析機能を利用して、 Fastly のプラットフォームを通過するリクエストとレスポンスのすべての過程で作成、更新、または削除された変数を表示するトレースステートメントを生成する便利な統合ソリューションを開発しました。Fastly と Epsagon では正式なログ機能の統合がないにもかかわらず、Project Helix は Fastly の柔軟なリアルタイムログストリーミング機能を活用して、トレースステートメントを Epsagon に送信することに成功しました。
Epsagon システムに取り込まれたログによって、リクエストとレスポンスのサイクル全体を明確に可視化できるようになりました。一昔前までは、大規模なモノリシックアプリでの問題は Apache アクセスログをテーリングすることで簡単に原因を突き止めることができました。しかし、サーバーレスのコンポーネントやマイクロサービスに加えて、複数のサードパーティサービスやクラウドプロバイダーで構成される、複雑化した現在のアーキテクチャでは、問題の診断により高度なツールが必要です。
このプロジェクトの素晴らしい点は、最先端のソフトウェアスタックでは多様なツールが必要であることを実証しただけでなく、お客様が自分の手で自由に構築できるプラットフォームを提供する Fastly のアプローチの有用性が証明されたことです。さらに、パートナー同士のコラボレーションによって素晴らしいものが生み出されることは、私たちにとっても非常に喜ばしいことです。
では早速 Adobe の Lars Trieloff 氏と Epsagon の Ran Ribenzaft 氏にプロジェクトを紹介していただきましょう。
分散されたアプリケーションやマイクロサービス パターンの構築によって、よりアジャイルなソフトウェアの配信と管理が可能になります。これは、キャッシング、決済、ユーザー管理、ストレージなどのサービスを通じてアプリケーションを強化するマネージド SaaS プロバイダーを使用する場合でも同じです。
しかし、何十、または何百にも及ぶサービスやコンポーネントによって構成されているアプリケーションのモニタリングやトラブルシューティングは容易なことではありません。特に自分の手で管理・コントロールできないサービスでアプリが構成されている場合は、なおさらです。
この記事では、可観測性を高めるための戦略、Fastly や OpenWhisk を活用した Adobe のユースケース、そして Epsagon を使って可観測性を実現した方法をご紹介します。
Project Helix
Project Helix は、カスタムコードの実行を可能にする Adobe の Apache OpenWhisk ベースのサーバーレスランタイムである Adobe I/O Runtime を利用し、高度なコンテンツ管理システム (CMS) やデジタル体験の作成、管理、配信を実現する方法を探る Adobe のリサーチプロジェクトです。
Project Helix ではサーバーレス機能 (OpenWhisk では「アクション」と呼ばれる) を使用し、検索インデックスの更新や Web サイトの同期的なレンダリングなど、非同期コンテンツを処理しています。このような同期的な処理において発生するレイテンシは、リクエスト処理、画像 最適化、キャッシュ、エッジでの処理を Fastly のエッジプラットフォームで行うことで回避できます。Adobe が Fastly を選んだ理由は、素晴らしい評価結果とチームによる継続的な手厚いサポートでした。
チームは現在、以下のような課題に取り組んでいます。
Fastly、OpenWhisk、Microsoft APIs、Google APIs、GitHub、そのほかのサードパーティ API による個別のリクエストフローの理解
エンドツーエンドパフォーマンスのボトルネックや問題
スタック全体におけるイベントの特定と分析 (ユーザーエクスペリエンスの問題に関連したイベントの特定など)
分散化されている遷移型のサーバーレスアプリは、従来のエージェントベースのトレーシングや大規模なログには向いていません。Fastly のサービスはリアルタイムの可視性が得られる優れた機能を提供しますが、Fastly や OpenWhisk のプラットフォームはダッシュボードやデータの視覚化を意図したものではないため、Project Helix では可観測性ソリューションを求めていました。
最先端アプリの可観測性
これらの課題を解決する鍵となるのが、可観測性です。従来型のシンプルなモニタリングとは異なり、可観測性を実現するためにはすべてのメトリクス、ログ、トレースデータを一元化した場所にまとめる必要があります。
可観測性を実現することで、本番環境のワークロード、カスタマージャーニー、全体的なユーザーエクスペリエンス、パフォーマンスの問題などを把握することができます。では、どうすれば優れた可観測性を実現することができるのでしょうか。その鍵を握るのが、相関関係です。
可観測性とは、単にコンポーネントの集合体をモニタリングすることではありません。メトリクスによってしきい値ベースの 5xx エラーアラートを確認できたとしても、ログとの相関関係が特定できなければ意味がありません。そうなると、問題を理解してデバッグを行うためにエンジニアは、手作業でデータの相関関係を探らなければいけません。しかし、この作業を10種類もの異なるサービスに対して行うのは極めて困難です。
メトリクス、ログ、トレースの相関関係を理解することで、何が起こったか (メトリクス)、なぜ起こったか (ログ)、そしてどこで起こったか (トレース) を把握することが可能です。これは容易なことではありません。そこで Epsagon の出番です。
Epsagon で可観測性を実現
それでは先ほど挙げた課題の対処方法を、一つずつ見ていきましょう。
カスタマージャーニーを理解することは、非常に困難な場合があります。カスタマージャーニーに関する情報は分散された非同期のデータであるほか、サードパーティ API から収集されることもあります。
Epsagon のトレースライブラリ (この場合は Node.js 用) は、発生したアクションすべてのコールやペイロードを収集します。OpenWhisk アクションをラップし、ランタイムでコールを計測し (例えば HTTP コールなど)、ボディやヘッダーなどのメタデータを抽出します。
Fastly のリアルタイムログとプログラム可能なプラットフォームを利用し、Epsagon と統合可能な計測ライブラリを構築することができました。VCL (HTTP 処理を行う Fastly の DSL) の新バージョンを有効化する前に、Project Helix のサーバーレスアクションが VCL コードを解析し、クリティカルステートの遷移とヘッダー値を特定し、インジェクトされたログステートメントが Epsagon にランタイムでトレースデータを送信します。Fastly のリアルタイムログがデータを収集し、バッチ化してフォーマットし (JSON など)、Epsagon の HTTPS エンドポイントにデータを送信するわけです。
イベント、トレース、メトリクス、ログなどのパラメーターを結合することで Epsagon フローが形成され、このようにリクエストの流れに関する詳しい情報を追跡できるようになります。
Epsagon による Helix のトレースフローの例
次に、カスタマーエクスペリエンスとパフォーマンスを向上させるために、アプリケーションの全体的なパフォーマンスを調べます。このような分散化された非同期の情報は、ログ、メトリクス、グラフのみでは完全に理解することは不可能です。このような情報には、タイムライン形式が適しています。
Epsagon による Helix のトレースタイムラインの例
最終的に、スタック全体でイベントを特定したり、集約できるようにする必要がありました。
ペイロードを自動的にインデックス化する Epsagon の機能を利用することで、所有者やリポジトリなど、特定のパラメーターに基づきコールをフィルタリングできます。それによって関連するイベントのみをトラブルシューティングし、このサブセットのパフォーマンス (リクエスト、エラー、レイテンシなど) を把握することができます。
Epsagon による特定のイベントのフィルタリング
概要
マイクロサービス、複数のフレームワーク、サードパーティ API、そのほかの SaaS アプリなどで構成されている最先端アプリケーションの可観測性の実現は、エンジニアリングチームにとって非常に重要な課題です。
優れた可観測性ソリューションと、Fastly のようなエッジクラウドプラットフォームから得られるリアルタイムのインサイトを併せて利用することで、より効率的なトラブルシューティングを実現できる ほか、優れたプロダクトやエクスペリエンスの構築に専念することが可能になります。また、Epsagon などのマネージドソリューションを採用することで、エンジニアリングチームを手間のかかる作業や定期的なメンテナンスなどから解放することができます。