Amazon Web Services ブログ

Amazon CloudWatch RUM、Evidently、ServiceLens によるオブザーバビリティ ジャーニー

このブログは An Observability Journey with Amazon CloudWatch RUM, Evidently, and ServiceLens (ブログ公開日 : 2022 年 1 月 24日) を翻訳したものです。

オブザーバビリティとは、単なる監視ではありません。AWS では、オブザーバビリティは健全で安全な運用に欠かせない要素であると考えています。アプリケーションの健全性と運用に関するオブザーバビリティを強化する Amazon CloudWatch の最新機能の 2 つは、Amazon CloudWatch RUMAmazon CloudWatch Evidently です。このブログでは、これらのツールを使用してアプリケーションをエンドツーエンドでデバッグする方法と、これらが他の CloudWatch サービスとどのように統合されているかを説明し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスの全体像を把握できるようにします。

始める前に、「エンドツーエンド」が実際に何を意味するのかを明確にしておきましょう。真のオブザーバビリティ ストーリーには、エンドユーザーまたはお客様によるアプリケーションの利用が含まれます。このブログでは、エンドユーザーが Eコマースサイトで購入しようとしたときに、技術的な障害が発生する例を挙げて説明します。フロントエンドのウェブアプリケーションから、別のディベロッパーが実行していた A/B テスト、ウェブアプリケーションとのインタラクションを定量化するために使用するツール、そして最後にマイクロサービスのバックエンドに至るまで、ユーザージャーニーの全過程を見ていきます。このブログの Eコマースサイトは架空のものですが、ここで説明する技術や経験はどれも架空のものではありません。このブログでは、AWSが経験した実際のシナリオについて説明しています。

これらの新しいサービスにはどのようなものがありますか?

ディベロッパーやオペレーターは、ログ、トレース、メトリクスをオブザーバビリティの構成要素として説明するのが一般的です。サービスの観点から見ると、Amazon CloudWatch Logs、Amazon CloudWatch メトリックス、および AWS X-Ray を使用してトレースを行っています。CloudWatch には、これら 3 つのデータタイプを照合、取り込み、分析し、洞察を引き出す強力なツールも用意されています。お客様の目的とアプリケーションアーキテクチャに応じて、AWS がサポートすることを約束しているオープンソースベースの代替手段もあります。

In this diagram we see the fundamental instrumentation agents for trace, log, and metric data, with common data collection services to which they correspond.

ここで、新しい AWS オブザーバビリティツールが登場します。このツールは、問題がアプリケーションやインフラストラクチャのさまざまなコンポーネントにまたがるときに、インサイトをコンテキストに基づいてリンクすることで、データの意味を理解するのに役立ちます。マネージドとガイド付きのエクスペリエンスを通じて、お客様が自分で点と点をつなぐ必要がないように、私たちが難しい作業を代行します。これらのサービスを組み合わせることで、アプリケーションパフォーマンスモニタリングプラットフォームが提供されます。

これらのサービスは、Amazon が提供するすべてのサービスやプラットフォームでオブザーバビリティを高めるために使用しているものです。今日、Webアプリケーションとのインタラクションを可視化するためには、これらのツールを組み合わせて使用する必要があります。エンドユーザーのテレメトリを収集してウェブアプリケーションに関するインサイトを得たり、エンドユーザーのページ読み込み時間を測定したり、実験を行ったり、エラー率が高い場合はトグルを使用してアプリケーションの機能を無効にしたりするために、さまざまな機能が必要になる場合があります。

Amazon CloudWatch RUM と Evidently はまさにそれを実現するもので、手間のかかる作業を自分で行う必要はありません。実際のユーザーのアプリケーション体験のデータを簡単に収集し、ユーザーの感情やフラストレーション、エラー、他12種類以上のイベントタイプから解釈できます。さらに、CloudWatch はこれらのニーズを明確にターゲットにした一連の機能を提供します。

Digital Experience Management (DEM)

Amazon CloudWatch DEM では、パフォーマンス、可用性、使いやすさなど、エンドユーザーがアプリケーションをどのように体験しているかを監視できます。たとえば、ユーザーがウェブページを読み込んだ場合、そのページのオブジェクトが読み込まれ、ブラウザがこのページをレンダリングするのを待ってから操作を続行する必要があります。HTML、CSS、画像、JavaScript コード、ページを描画する時間、Web サービスへの非同期呼び出しなど、Web アプリケーションのあらゆる要素がまとめてユーザージャーニーの要素を構成します。CloudWatch DEM ツールはこうしたカスタマーエクスペリエンスをわかりやすく説明し、オブザーバビリティのコアとなる 3 つの基本原則に基づいて構築されており、ディベロッパーがエンドユーザーのアプリケーションに対する不満や喜びを理解するための強力な手段となります。2021年の re: Invent で、CloudWatchは既存のDEMスイートを拡張する2つの新しいサービスを導入しました。

Amazon CloudWatch RUM は、ウェブアプリケーションのクライアント側の問題を特定・デバッグし、エンドユーザーのデジタル体験を向上させるのに役立つ、リアルユーザーモニタリング機能です。CloudWatch RUM により、アプリケーション開発者と DevOps エンジニアは、クライアント側のパフォーマンス問題を解決するまでの平均時間 (MTTR) を短縮できます。

Evidently はディベロッパーがアプリケーションコードに実験や機能管理を簡単に導入できるようにする新しい Amazon CloudWatch の機能です。CloudWatch Evidently は、機能フラグとも呼ばれるシャドーローンチの実装と A/B テストという、似ているが異なる 2 つのユースケースに使用できます。

実際のサポート体験を通して、実感しましょう

エンドユーザーがお気に入りの Eコマースサイトで「購入を完了する」ボタンをクリックしたところ、ページの読み込みに時間がかかり、エラーメッセージが表示されました。

A typical error message as seen on a web site

この状況は良いカスタマーエクスペリエンスではありません! しかし、Eコマースアプリケーションはすでに CloudWatch RUM にオンボードされているので、このエラーが表示された直後に、RUM ウェブクライアントはエラー、ページID、セッションID、アプリケーショントレースID、その他いくつかの重要な統計を分析のため CloudWatch RUM に報告しています。お客様が辛抱強く購入を再試行している間に、何が問題だったのかを知るためのデータはすでに収集されているのです。

そして残念なことに、今日購入に失敗したのはこのお客様だけではありませんでした! このトランザクションやその他の誤ったトランザクションから収集されたデータを使用して、問題を効果的にデバッグし、今後のトランザクションに影響を与えないようにすることができます。これが重要なポイントですよね? ここで問題となるのは、これがどれくらい早くできるかということです。このお客様に起こったことを切り分け、そもそも起こらないようにするにはどうすればよいでしょうか。しかし、先走ることなく、目の前の問題に集中しましょう。

購入ページを管理する開発チームには、購入ページでステータスコード 502 が急増しているというアラームがいくつか届きます。これは問題があることを示す最初の兆候です。同時に、CloudWatch メトリックスで購入が成功した回数が急落していることもわかりました。

Correlating with the rise in 502 errors, we see a drop in successful purchases

ディベロッパーは、購入を試みた後にテキストを書き換えて表示する実験が行われていることを理解しており、最近のデプロイが問題になっているのではないかと疑っています。最初に立ち寄るのは CloudWatch RUM コンソールで、アプリケーション全体のユーザーエクスペリエンスの重要な統計情報を表示できます。結局のところ、すべてはお客様から始まります!

The CloudWatch RUM console displays a graphical heatmap of which times of day over the previous week have experienced the best customer experience

明らかに、問題が発生しています!ページの平均読み込み時間が大きな問題を引き起こしていることがわかったため、ディベロッパー はエラーとセッションのページから詳細情報を確認します。

The overview screen in CloudWatch RUM shows a world map, Apdex, page load speed, error counts, and other high-level statistics

ディベロッパー は世界中で発生している問題を明確に把握できるため、問題が特定の地域に限定されている可能性を排除できます。また、エラーが複数のデバイスで発生していることも確認できます。つまり、特定種類のデバイスに関連するコードの問題ではないことがわかりました。素晴らしい! ここで問題を大幅に絞り込み、これはネットワークの問題ではないことを理解しました(あちこちで見かけるので)。これで、アプリケーションのパフォーマンスに集中できます。

サービスマップを通じて、ディベロッパーはエラー状態にあるいくつかのリソースを確認し、またアラーム状態であることも確認しました。

A screenshot of ServiceLens Map shows the error flags on the purchase-service Lambda functions

これらのリソースでトレースを調べると、502という同じアプリケーション エラーが見つかり、Lambda 関数のアプリケーションからのログと相関関係もわかります。さらにログを調べてみると、コード内の型変換が誤って処理されたというバグがすぐに見つかります。

Examining a trace through these resources reveals the same application error of 502, and also correlates the logs from the application on the Lambda function

ディベロッパーはほんの数分で多くのことを理解しました。

  • 特定の地域や特定タイプのデバイスで発生している問題ではありません。
  • ネットワークの問題ではないようです。
  • コードにバグがあります。
  • 購入の 50% が失敗しています。
  • そして、サイト上のエンドユーザーの体験が悪いです。

しかし、この問題を解決するために本番環境への緊急デプロイ(他のリスクを招く手順)を行う代わりに、アプリケーションログから興味深い情報を見つけました。組織内の別のチームが購入ページで新しい機能を試すための実験を行っており、この実験を含むようにお客様のコアワークフローを更新していたようです。ディベロッパー が Amazon Eviently コンソールを開くと、実験的なページビューに送られたユーザーの数が表示されます。

In this view, we see that both the “standard” and “holiday” variations of a feature on the application are being displayed to different users

皮肉なことに、これはとても良いニュースです!この時点で、新しい購入ページは実験の一部であるため、ディベロッパー はすぐにそれを終了させ、すべてのトラフィックを以前の機能バージョンに戻すことができます。これにより、トラフィックの 100% が購入コードの正常な表示に戻されます。現時点ではデプロイは不要です!

We see the traffic has been visibly dialed-back to 0% of traffic receiving the new variation of the experiment

危機は回避されました!そして、そのエラーが二度と表示されないことを願っています。なぜなら、すべての買い物と選択を行った後にチェックアウトできないなんて、お客さんにとってこれ以上悪いことはないでしょう!

このチームは、Evidently を利用して定期的にアプリケーション機能をテストしており、過去の実験も大成功を収めています。この例では、同じツールを使用して実際の生産上の問題をどのように軽減できるかを見ることができます。

Evidently creates graphs that display how well an experiment is performing against your business objectives

自動化でこれをさらに改善しましょう

上記の例は典型的でありふれたものですが、問題を解決するための手作業による介入が強調されています。これは素晴らしいスタートです!ただし、この種のサービス修正を人間に任せることは最も効率的な方法ではないため、エラーから自動的に回復できるシステムを使用することを強くお勧めします。ここでは、このようなお客様への影響を防ぐことができた 2 つの簡単な更新について説明します。

CloudWatch Synthetics の利用

Amazon CloudWatch Synthetics を使用すると、スケジュールに従って実行される設定可能なスクリプトである Canary を作成し、エンドポイントと API をモニタリングできます。Canary はアプリケーション内で同じルートをたどり、お客様と同じアクションを実行します。これにより、アプリケーションにライブトラフィックがない場合でも、カスタマーエクスペリエンスを継続的に検証できます。Canary を使用することで、お客様より先に問題を発見できます。

A view of an API canary shows the failing of some requests to the payment endpoint

この場合、エラーがお客様の画面に明るみに出る前に Canary が開発チームに問題を警告できたはずです。しかし、これよりもさらに多くの自動化を実現できます!

CloudWatch Evidently の利用

今回説明したアクションは、エンドユーザーが観察した環境の健全性に基づいて、プログラム的に、そして動的に操作できる Evidently を介して行われます。失敗した実験や機能の公開を自動的に終了させる最も簡単な方法は、AWS が収集するメトリクスを利用して終了させることです。CloudWatch RUM は、実際のユーザーが体験した ウェブページのパフォーマンスを自動的に測定します。アプリケーションに不安定性や劣化が見られる場合は、実験を中止してみてはいかがでしょうか。

これは、CloudWatch アラーム、メトリクス、実験を削除する Lambda 関数を含むシンプルなパイプラインで行うことができます。これにより、アプリケーションのデフォルトの動作が復元されます。

Here we see visualized the interplay with Amazon Evidently experiments, AWS RUM, CloudWatch alarms and a Lambda function that will terminate this experiment

データ収集を自動化するだけでなく、アプリケーションの動作をプロアクティブかつダイナミックに調整するこのアプローチを使用することで、本番環境のエラーを観察し、修正するまでの時間を短縮できます。かつては何時間もかかっていたことが、わずか数分で自動的に達成できるようになりました。また、この実験をすぐに終了しても、開発チームは何が起こったのかについての可視性や洞察を失うことはありません。本番環境へ暫定的な予定外の変更を行うのではなく、事後分析とエラー修正を安全な方法で行うことができるのです。

次のステップ

上記のシナリオは、私たち自身の経験から導き出されたもので、私たちのお客様が日々直面している現実的な問題を表しています。Amazon CloudWatch RUM と Evidently は、オブザーバビリティを迅速に進め、アプリケーションの状態に関するインサイトを得るのに役立つ新しいサービスですが、オブザーバビリティの話はそれだけではありません。ログ、メトリクス、トレースに関する洞察を提供する一連のサービスが揃っていますが、このブログは表面的なものにすぎません。

One Observability Workshop を確認し、合成テスト、ログの相関、カスタムメトリクス、高度なダッシュボード、異常検出モデルなどについて、さらに多くの例や詳細を確認することをお勧めします。

著者について:

Sudeeptha Jothiprakash

Sudeeptha Jothiprakash は Amazon CloudWatch チームのPrincipal Product Managerで、オブザーバビリティとモニタリングの分野で 6 年以上の経験があります。彼女はユーザーがアプリケーションを可視化し、中断を減らして、mean time to resolution(MTTR)を削減できるようにする直感的なソリューションの構築に情熱を注いでいます。

Rich McDonough

Rich McDonough は、トロントを拠点とする AWS のSr. WW CloudOps Specialist Solutions Architect です。彼の主な焦点はクラウドオペレーションで、お客様が AWS を安全かつ確実に利用できるよう支援し、お客様がオブザーバビリティのプラクティスとサービスを運用できるよう指導しています。2018 年に AWS に入社する前は、顧客のクラウドへの移行を支援することを専門としていました。

翻訳はテクニカルアカウントマネージャーの日平が担当しました。原文はこちらです。