ElasticオブザーバビリティでのAPM相関付け:低速または失敗したトランザクションの考えられる原因を自動的に特定

blog-thumbnail-apm-waterfall.png

DevOpsエンジニアやSREは、複雑な問題を調査しなければならない局面に多く直面します。たとえば、アプリケーションのパフォーマンスに関する不可解な問題が断続的に発生したり、アプリケーショントラフィックの特定の部分でのみ発生したりするなどの場合が考えられます。そのような問題はエンドユーザーだけでなく、会社の財務目標にも潜在的に影響を及ぼします。数百、場合によっては数千にも上るトランザクションやスパンを丁寧に確認しようとすると、煩雑で時間もかかる手動での調査を強いられてしまいます。クラウドネイティブ環境または分散マイクロサービス環境では、問題がさらに複雑になるため、根本原因を特定するまでに長い時間がかかってしまいます。 

このような一見複雑に見える問題から、一般的なパターンを見つけ出して解き明かし、根本原因の分析と修復を高速化してみませんか。 

便利なElasticオブザーバビリティでのAPM相関付け

ElasticのAPM相関付け機能は、APMデータセットの属性のうち、高遅延エラーを起こしたトランザクションと相関性があるものと、サービスパフォーマンス全体に最も顕著な影響を与えているものを自動的に明らかにします。

APMの問題に関する調査ワークフローは、通常はAPMビューのトランザクションタブから始まります。調査対象が遅延の多いトランザクションであっても、失敗したトランザクションであっても、まずはその特定のトランザクショングループの遅延に関する分布図の外れ値を視覚化します。遅延の多いトランザクションは図の右側に表示され、遅延および失敗したトランザクションのラベルによって影響の範囲が示されます。さらに、95パーセンタイルを示す注釈が図に表示されるので、真の外れ値が視覚的に分かりやすくなっています。

次に、それらの外れ値と最も深い相関関係を備えるデータ内の属性と要因を調査して、影響を受けるサブグループをデータセット全体から絞り込みます。つまり、低速またはエラーのあるトランザクションで異常な結果がでている属性を探します。これらの属性には、ラベル、タグ、トレース属性のほか、各種メタデータ(サービスのバージョン、地理情報、デバイスの種類、インフラ識別子のほか、フロントエンドサービスのアベイラビリティゾーン、OS、クライアントの種類などのクラウド固有のラベル、その他の属性のホストなど)が含まれます。これらの属性は、異常なトランザクションを各属性の観点から説明できるようにするために使用されます。たとえば、"遅延の多いトランザクションのほとんどはKubernetesのPod xで発生している"、"shoppingCartVolumeHighというラベルのトランザクションとサービスバージョンa.bが失敗している"などのように説明できることがあります。

これらの(ときには数百にものぼる)属性をすべて手動で確認して、パフォーマンスの外れ値を説明できそうな属性を探り当てなければならないとしたら、あまりにも大変な作業です。

Elasticオブザーバビリティは、遅延とエラーが多い属性をトランザクションセット全体と自動的に比較し、準最適トランザクションで"不自然に共通している"タグとメタデータを識別します。つまり、トランザクションセット全体よりも準最適トランザクションにおいて明らかに共通している要素を特定するのです。次に、相関関係を提示するだけでなく、相関関係が最も高い属性も最初に提示します。相関値(範囲は0 - 1.00で、1.00 は完全な相関を示します)は、一致の範囲をすばやく判断するのに便利です。任意の属性をクリックすると、その属性を持つトランザクションが色分けされて分布図に表示され、重複状況が一層わかりやすく視覚化されます。

相関する要因を特定できたら、それらのトランザクションに絞り込んで調査を続けます。フィルタの[+]または[-]ボタンをクリックして、その属性の値を持つトランザクションのみを選択するか、そのトランザクションを除外して、興味のあるトランザクションを更に詳しく調査します。通常はこの後、遅延の多いトランザクションのうち、特定できた相関関係のある属性を併せ持っているもののトレースサンプルを調べると、遅延の原因が判明します。たとえば、トレース内の関数呼び出しが遅いことなどです。

根本原因を確認できたら、ロールバック、ソフトウェアのパッチ適用、アップグレードなどの機能を活用した修復と復元のプロセスを開始できます。

次に、トランザクションが失敗したときのシナリオを考えてみましょう。以下の例を見てみると、"checkoutService"の"/jp/hipstershop.CheckoutService/PlaceOrder"というトランザクショングループで、トランザクションの失敗率が高くなっています。

相関付け機能を使用すると、以下の図のとおり、南アメリカのユーザーのトランザクションが失敗していることが示されます。

フィルターの[+]をクリックすると、この特定のサブセットに焦点を絞って、例のとおりエラーのあるトランザクションが表示されます。

[View related error](関連するエラーの表示)をクリックすると、ユーザーは関連するエラーの詳細ページ(以下を参照)にリダイレクトされ、このエンドポイントに関連するさまざまな種類のエラーがハイライトされているのを確認できます。エラー発生のスタックトレースもこのページで利用でき、より詳細なデバッグ情報が提供されます。

上記からわかるように、APM相関付け付け機能は、低速なトランザクションやエラーのあるトランザクションのグループを絞り込むという方法でユーザーの負荷を軽減しています。こうして、平均検出時間と問題解決までの時間が大幅に短縮されるのです。

相関関係の分析の高速化に必要な入力とデータ

APM相関付け機能を使用すると、母集団の一部にのみ影響している問題の根本原因分析を大幅に高速化できます。ここで、アプリ、サービス、トランザクション、インフラストラクチャー、クライアントを説明するメタデータが多いほど、分析は充実し、準最適トトランザクションを明確に説明できる属性が見つかる可能性が高くなります。相関付け機能では、データ内に存在するすべてのフィールドとラベルが使用されます。

概要のページから、統合の追加用のワークフローを使用することで、環境にデプロイされているさまざまなアプリケーション、インフラストラクチャー、依存関係用のエージェント機能やデータインジェスト機能を追加できます。クラウドベースのKubernetesなどをはじめとするクラウドネイティブ環境や、Lambdaなどのサーバーレステクノロジーなどとのネイティブ統合も可能です。さまざまなテレメトリーソースを特定したら、Logstashまたは直接APMエージェントを経由して、受信データをさらに拡充できます。Elasticは、OpenTelemetryとシームレスな統合が可能であり、そのデータに対する包括的なネイティブサポートも備えています(手動インストルメンテーションもサポートしています)。 

クライアント側の情報は、リアルユーザー監視(RUM)データから取り込むことができます。Elastic RUMエージェントを使用する場合、分散トレーシングはデフォルトで有効になります。また、オリジン間リクエストのトレースとトレース状態の伝播は、distributedTracingOriginsというオプションを設定することで簡単に構成できます。このように、APMとRUMを組み合わせると、ブラウザーのバージョン、クライアントOS、ユーザーコンテクストなどのクライアント側の情報が豊富に追加され、そのすべてのデータが相関関係の判断時に自動的に含まれるようになります。 

このデータをElasticに流し込むことで、APM相関付けが開始され、明確なインサイトが得られるうえ、あらゆる状況の根本原因を短時間で特定できるようになります。 

APM相関付けで根本原因の特定までの時間を劇的に短縮できる状況

定義上の話をすれば、複雑な複数の問題のすべてを、ひとつの特徴だけで説明できるようなことはほとんどありません。APMの問題の多くは、未知の問題をいくつか抱えているものであり、結局のところ複雑なのです。逆に、未知の問題が見当たらないのであれば、いくつかの既知の問題しかないため、調査するべき箇所はすぐにわかり、問題をすぐに整理できます。 

ただし、複雑な問題であっても、調査ツールキットのAPM相関付け機能を使用すれば、環境内の特定の領域にすばやく焦点を絞り、根本原因を特定または検証できる場合が多くあります。主に考慮するべきは、問題が環境全体に影響を与えるのか、それとも一部の部分集団にのみ影響を与えるのかということです。たとえば、すべてのトランザクションで遅延が多くなっているのでしょうか。それとも、一部のトランザクションで遅延が多くなっているだけで、他は予想される範囲内で実行されているように見えるでしょうか。問題がトランザクション全体に波及していない場合は、APM相関付け機能の使用を検討して、対象のトランザクションの特徴付けに役立つ属性のサブセットがないか確認する必要があります。そのような属性を使用してフィルタリングすることで、よりサイズが小さく管理しやすいトランザクションセットを作成し、それらのトレースから根本原因を明らかにしたり、トランザクションパフォーマンスの問題を引き起こしているインフラストラクチャーの依存関係を確認したりできます。 

APM相関付け機能が特に効果的であると考えられる状況の例は次のとおりです。

ハードウェアのパフォーマンスの問題:特に、特定のハードウェアによる特定の負荷の分散が行われている場合、ハードウェアのパフォーマンスが低下した際に、特定のユーザーグループまたはアプリケーションの一部で遅延が多くなる場合があります。APM相関付けは、ラベルと識別子を通じて、ハードウェアの特定のインスタンスをすばやく分離するのに役立ちます。

使用される入力データ:

  • 分散トレース内で収集されたAPMエージェントからのグローバルラベル
  • APM相関付け機能を利用した後も調査を継続できるようにするためのElastic AgentまたはMetricbeatからのインフラストラクチャーメトリクス

ハイパースケーラーのテナンシーまたはマルチクラウド環境関連の問題:ハイパースケーラーを採用した場合、アプリケーション環境はさらに複雑さを増します。マルチクラウドとハイブリッドクラウドは、ますます一般的な環境になりつつあります。アプリケーションの一部のみに影響を与える問題をトラブルシューティングする場合、ハイパースケーラーのラベルとタグ(クラウドのメタデータなど)があれば、問題に関係しているインスタンス、クラウドプロバイダー、リージョン、可用性ゾーンを検出するのに役立ちます。Elastic Java APMエージェントは、構成変数を使用してクラウドプロバイダーを自動検出できます。

使用される入力データ(APMエージェントが自動的に収集): 

  • クラウドアベイラビリティゾーン
  • クラウドリージョン

地理的またはユーザーグループ固有の問題:特定の地理情報またはユーザーグループを識別するタグは、APM相関付けを通じて検出したうえで、ユーザーセグメントを分離してそれらのトランザクションのみを調査するのに使用できます。たとえば、Elastic Java APMエージェントは、この機能によって使用されるグローバルラベルをサポートしているため、追加のコンテクストを提供し、母集団のサブセットを特定するのに役立ちます。Java APMエージェントなどをはじめとするElastic APMエージェントは、あらゆるイベントに追加のメタ情報を追加するのに使用できるグローバルラベルの構成をサポートしています。グローバルラベルは、トランザクション、メトリック、エラーに追加されるラベルです。これと似たものとして、Java APM Agent APIはトランザクションの手動インストルメンテーションに対応しており、地理情報またはユーザーグループ情報を抽出するのに使用できます。これらのラベルは、根本原因の分析や仮説の検証などの高速化につながるようなサービス内の重要または新しいクラス/メソッドに焦点を当てるのに役立ちます。 

使用される入力データ:

  • クラウドメタデータ(APMエージェントが自動的に収集)
  • オプションでイベントにメタ情報を追加するためのグローバルラベル
  • 手動インストルメンテーションによって追加されたデータ

カナリアロールアウトやその他の部分的なデプロイに関する問題:エンタープライズアプリケーション、特にSaaS式アプリケーションのデプロイでは、複数のバージョンのソフトウェアのが同時に実行されることがよくあります。カナリアロールアウトやA/Bテストは、マルチバージョンを同時デプロイする戦略の一例です。アプリケーションの特定のバージョンが誤動作している場合、APM相関付けによってそのエラーを起こしているバージョンが検出されるため、問題の範囲が絞り込まれ、根本原因のすばやい特定につながります。サービスのバージョンは、自動検出またはElastic Java APMエージェントなどでの環境変数を使用して設定できます

使用される入力データ:

  • サービスのバージョン(自動検出またはAPMエージェントから取得)

クライアント側の問題:特定のブラウザーのバージョンやデバイスの種類などのクライアント側の指標を使用すると、さらなる分析、解決、修復に役立つ根本原因情報が得られるので、調査範囲と潜在的な原因を即座に絞り込むのに役立ちます。

使用される入力データ:

  • Elastic RUMエージェント経由で自動的に収集されるクライアントデータ(ブラウザーとOSのバージョン、デバイスの詳細、ネットワークタイプなど) 

サードパーティのサービスプロバイダーに関する問題:認証サービスプロバイダーなどのサードパーティプロバイダーが使用されるシナリオでは、特定のプロバイダーに関連する問題を迅速に特定するのにAPM相関付け機能が役立ちます。これを行うには、認証プロバイダーを識別するカスタムラベルを追加するためのSDK(ElasticまたはOTel)を使用します。カスタムラベルは、自動インストルメンテーションだけでは根本原因分析を容易にするための関連コンテクストが十分に取得できないなどの類似シナリオでも役立ちます。

使用される入力データ:

  • ElasticまたはOTel SDK経由で追加されたカスタムラベル
  • グローバルラベル

これに加えてユースケースの数も十分であれば、概況が見えてきます。相関付け機能は、サービスの一部に問題が発生しており、他の部分はスムーズに実行されているように見える場合に有効です。

裏を返せば、特定の状況では、APM相関付けでは最善の結果が得られない場合もあります。たとえば、特定の小さな部分母集団やセグメントではなく、アプリケーションサービス全体にわたって発生している広範な問題などです。このような状況では、さまざまなタグや、ラベル、インジケーターのすべてが準最適トランザクションと高度に相関している可能性があり、調査をしてもほとんど意味がありません。また、関連するデータが存在しないか、記述子やラベルが不十分な場合、相関関係がまったく検出されない可能性があります。相関関係の分析の高速化に必要な入力とデータに関するセクションを見返してみてください。    

ただし、多くの場合、APM相関付け機能は、APM調査範囲を特定のトランザクショングループに迅速に絞り込むために役立つ強力なツールです。大体の場合において、相関関係のあるトランザクションから根本原因がすぐに特定されるので、調査時間が大幅に短縮されます。  

トラブルシューティングの効率化を実感してください。 

その他のリソースと情報

APM相関付け機能はバージョン7.15から一般提供開始となります。本機能に関するリリースノートは、こちらをクリックしてご確認ください。

APM相関付け機能のユーザーガイドとドキュメントは、こちらから利用できます。