見出し画像

Elastic オブザーバビリティにおけるAPMの相関関係 トランザクションの遅延や失敗の原因と思われるものを自動で特定

※本投稿は、上記のElastic BlogをDeepL翻訳したものです。

著者 Vinay Chandrasekhar, Akhilesh Pokhariyal
2022年9月8日

DevOpsエンジニアやSREとして、エンドユーザーや会社の財務目標に影響を与えるような複雑な問題(断続的またはアプリケーショントラフィックの特定の部分のみに発生する謎のアプリケーションパフォーマンスの問題)を調査する必要に迫られることがよくあります。何百、何千ものトランザクションやスパンを調べ上げることは、退屈で手動の、時間のかかる調査作業になりかねません。クラウドネイティブや分散型マイクロサービスでは、さらに複雑な問題が発生し、根本原因の特定にかかる時間が長くなります。

このような一見複雑な問題を説明するのに役立つ共通のパターンをすばやく特定できれば、問題を解明し、より迅速な根本原因の分析と修復の道を開くことができると思いませんか?

Elastic ObservabilityのAPM相関性マジック


Elastic APM相関機能は、APMデータセットのうち、高レイテンシトランザクションやエラートランザクションと相関があり、サービス全体のパフォーマンスに最も大きな影響を与える属性を自動的に表面化させます。

APM問題の調査ワークフローは、通常APMビューの[トランザクション]タブから始まります。レイテンシーの高いトランザクションに興味があろうと、失敗したトランザクションに興味があろうと、特定のトランザクション・グループのレイテンシー分布図の異常値を視覚化することから始めます。高レイテンシのトランザクションはチャートの右側に表示され、レイテンシと失敗したトランザクションのラベルは、影響の程度を示します。さらに、チャート上の95パーセンタイル注釈は、真の異常値を視覚的に分離するのに役立ちます。

次のステップは、これらの異常値と最も相関性の高い属性や要因をデータから探し出し、データセット全体の中で影響を受けるサブグループに調査を絞り込むことです。言い換えれば、遅いトランザクションや誤ったトランザクションに偏って含まれる属性を探すのです。これらの属性には、ラベル、タグ、トレース属性、およびメタデータ(サービスのバージョン、地理的位置、デバイスタイプ、インフラストラクチャ識別子、フロントエンドサービスのアベイラビリティゾーン、OS、クライアントタイプなどのクラウド固有のラベル、およびその他の多数の属性など)が含まれます。このような属性から、異常なトランザクションを説明できるようにすることが目的です。例えば、「ほとんどすべての高レイテンシー・トランザクションがKubernetes pod xで発生している」とか、「shoppingCartVolumeHighというラベルとサービスバージョンa.bを持つトランザクションが失敗している」と言えるようにするためです。

もし、パフォーマンスの異常値を説明するのに役立つ特定の属性を特定するために、これらの属性をすべて手作業で調べなければならないとしたら、どうでしょう?

Elastic Observabilityは、レイテンシーやエラーの多い属性を全トランザクションと自動的に比較し、最適でないトランザクションで「一般的でない」タグとメタデータを特定します。言い換えれば、最適でないトランザクションでは、完全なトランザクションセットよりも著しく一般的な要素を特定します。その後、相関関係を提示するだけでなく、相関関係が最も高い属性を最初に提示する。相関値(0~1.00の範囲、1.00は完全な相関を示す)は、一致の程度を素早く示すのに役立つ。属性をクリックすると、その属性を持つ取引が色分けされて分布図に表示され、重複がさらに可視化されます。

相関する要因を特定したら、今度はそれらのトランザクションだけに焦点を絞ることができます。フィルター「+」または「-」ボタンをクリックして、この属性値を持つトランザクションのみを選択するか、そのようなトランザクションを除外して、関心のあるトランザクションをさらに詳細に調査します。遅延の典型的な次のステップは、特定された相関する属性を持つ高遅延トランザクションのトレースサンプルを見て、トレース中の遅い関数呼び出しという原因を突き止める「アハ!」な瞬間かもしれません。

根本原因が確認されたら、ロールバック、ソフトウェアパッチ、アップグレードなどのメカニズムを通じて、改善と回復のプロセスを開始することができます。

次に、トランザクションの失敗のシナリオを考えてみましょう。以下の例では、「checkoutService」内の「/hipstershop.CheckoutService/PlaceOrder」トランザクショングループに、高いトランザクション失敗率が発生している。

失敗したトランザクションの相関機能では、下図のように南米からのユーザーの失敗したトランザクションが表示されます。

フィルター「+」をクリックすると、この特定のトランザクションのサブセットに焦点を当てることができ、エラーのあるトランザクションの例が表示される。

「View related error」をクリックすると、ユーザーは関連するエラーの詳細ページ(下図)にリダイレクトされ、このエンドポイントに関連するさまざまな種類のエラーがハイライト表示されます。エラー発生のスタックトレースもここで見ることができ、デバッグ情報が強化されます。

上記の例から、APM相関機能は、遅いトランザクションや誤りのあるトランザクションのグループを絞り込むという点で、ユーザーにとって大変な作業であることがわかります。その結果、平均検出時間や問題解決までの時間が大幅に短縮されます。

相関に必要な入力とデータ


APMの相関関係機能は、集団の一部にしか影響を与えない問題の根本原因分析を大幅にスピードアップできます。アプリ、サービス、トランザクション、インフラストラクチャ、およびクライアントを記述するメタデータが多ければ多いほど、分析内容が充実し、最適でないトランザクションを明確に説明する属性を発見できる確率が高くなります。相関関係機能は、データ内に存在するすべてのフィールドとラベルを利用します。

概要ページから「統合の追加」ワークフローを使用して、環境に展開されたさまざまなアプリケーション、インフラ、および依存関係のためのエージェント機能および/またはデータ取り込みを追加します。クラウドベースのKubernetesLambdaのようなサーバーレス技術などのクラウドネイティブ環境を含むいくつかの技術とネイティブに統合することもできることに注意してください。様々なテレメトリーソースを特定したら、Logstash経由またはAPMエージェント経由で直接、受信データをさらにリッチ化することができます。ElasticはOpenTelemetryデータとのシームレスな統合と包括的なネイティブサポート(手動インスツルメンテーションもサポートします)も行っています。

クライアントサイドの情報は、リアルユーザモニタリング(RUM)データを介して取り込むことができます。Elastic RUMエージェントを使用する場合、分散トレースがデフォルトで有効になっており、distributedTracingOrigins設定オプションを設定することにより、クロスオリジンリクエストのトレースとtracestateの伝播を簡単に設定することができます。このようにAPMと組み合わせることで、RUMはブラウザのバージョン、クライアントのOS、ユーザーのコンテキストなどのリッチなクライアントサイド情報を追加し、それらのデータはすべて自動的に相関判定に含まれるようになります。

このデータがElasticに流れ込むことで、APM相関が機能し、明確な調査洞察を提供するとともに、多くの状況で根本原因を特定するための時間を短縮することができます。

APM相関関係によって根本原因の特定にかかる時間が大幅に短縮される状況


複雑な問題には、特定の機能で確実に答えが出せるようなものはほとんどありません。結局のところ、多くのAPMの問題は、調査中に複数の未知の問題が発生するため、まさに複雑とみなされるのです。そうでなければ、既知の問題がいくつかあるだけで、何を探すべきか正確にわかり、それらの問題はもはや複雑ではなくなります。

しかし、多くの複雑な調査にとって、APM相関は、配備の特定の領域に素早く焦点を絞り、根本原因を特定または検証するための調査ツールキットの重要な一部となり得ます。重要な考慮点は、問題が配備全体に影響を及ぼしているのか、それとも一部の部分集団にのみ影響を及ぼしているのか、ということです。たとえば、すべてのトランザクションが高レイテンシーに悩まされているのでしょうか。それとも、一部のトランザクションが高いレイテンシを示し、他のトランザクションは予想範囲内で実行されているように見えるのでしょうか。問題が広範囲に及んでいないことに気づいたら、APMの相関関係機能を使用して、属性のサブセットが対象のトランザクションを特徴付けるのに役立つかどうかを確認することを検討すべきです。これらの属性を使用すると、より小さく管理しやすいトランザクションのセットにフィルタをかけてそのトレースをチェックし、根本原因を明らかにしたり、トランザクションのパフォーマンス問題の原因となるインフラの依存関係を確認したりすることができます。 

APM相関関係が特に有効であると思われる状況の例としては、以下のようなものがあります。

ハードウェア・パフォーマンスの問題:特に、特定の負荷が特定のハードウェアによって処理されている負荷分散のケースでは、ハードウェア・パフォーマンスの低下により、特定のユーザー・グループやアプリケーションの特定の部分で高いレイテンシーが発生する可能性があります。APMの相関関係により、ラベルや識別子を使って特定のハードウェアを迅速に特定することができます。

利用される入力データ:

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

Hyperscalerのテナントやマルチクラウド展開に関連する問題: Hyperscalerは、アプリケーション展開にもう1つの複雑なレイヤーを追加します。マルチクラウドやハイブリッドクラウドの導入はますます一般的になっています。アプリケーションの一部にしか影響しない問題をトラブルシューティングする場合、ハイパースケーラのラベルとタグ(たとえば、クラウドメタデータ)は、どのインスタンス、クラウドプロバイダ、地域、またはアベイラビリティゾーンが問題にリンクしているかを検出するのに役立ちます。Elastic Java APMエージェントは、構成変数を使用してクラウドプロバイダの自動検出を可能にします。

利用した入力データ(APMエージェントが自動収集):

・クラウドアベイラビリティゾーン
・クラウド地域

特定の地域やユーザーグループの問題:特定の地域やユーザーグループを特定するタグは、APMの相関関係を通じて表面化し、ユーザーセグメントを分離してそれらのトランザクションだけを調査するために使用することが可能です。例えば、Elastic Java APM Agentは、この機能で利用されるグローバルラベルをサポートしているため、追加のコンテキストを提供し、母集団のサブセットを識別するのに役立ちます。Java APMエージェントなどのElastic APMエージェントは、グローバルラベルの構成をサポートしており、これを利用してすべてのイベントに追加のメタ情報を追加することができます。グローバルラベルは、トランザクション、メトリクス、およびエラーに追加されます。同様に、Java APMエージェントAPIでは、トランザクションの手動インスツルメンテーションが可能で、地理情報やユーザーグループ情報の抽出に使用できる。これらのラベルは、サービスにおける重要な、あるいは新しいクラス/メソッドに焦点を当てるのに役立ち、根本原因の分析、仮説の検証などをスピードアップすることができます。

利用される入力データ:

・クラウドメタデータ(APMエージェントが自動収集)
・グローバルラベル(オプションでイベントにメタ情報を追加可能
・手動インスツルメンテーションで追加されたあらゆるデータ

カナリアまたはその他の部分的な展開に関連する問題:エンタープライズアプリケーションの展開、特にSaaSで配信されるアプリケーションでは、ソフトウェアの複数のバージョンを同時に実行することは珍しくありません。CanaryロールアウトやA/Bテスト戦略などは、複数バージョンの同時展開の一例です。アプリケーションの特定のバージョンに問題が発生した場合、APMの相関関係によって問題のあるバージョンを特定し、問題の範囲を絞り込んで根本原因を迅速に特定することができます。サービスのバージョンは、自動検出するか、Elastic Java APMエージェントなどの環境変数で設定します。

利用する入力データ:

・自動検出またはAPMエージェントからのサービスバージョン

クライアント側の問題:特定のブラウザのバージョンやデバイスの種類などのクライアント側の指標は、直ちに範囲と潜在的な原因を絞り込み、さらなる分析、解決、是正のための貴重な根本原因情報を提供するのに役立ちます。

入力データの活用:

・ブラウザやOSのバージョン、デバイスの詳細、ネットワークの種類など、Elastic RUM Agentを通じて自動的に収集されるクライアントデータ

サードパーティサービスプロバイダーの問題:認証サービスプロバイダーなどのサードパーティプロバイダーを使用しているシナリオでは、APMの相関関係によって特定のプロバイダーに関する問題を迅速に特定することができます。これは、認証プロバイダを特定するためのカスタムラベルを追加するSDK(ElasticまたはOTel)を使用することで実現できます。カスタムラベルは、自動計測だけでは根本原因の分析に必要な関連コンテキストを提供できない、他の類似のシナリオでも有効です。

利用される入力データ:

・ElasticまたはOTel SDKを介して追加されたカスタムラベル
・グローバルラベル

... その他にも様々な使用例がありますが、だいたいのことはご理解いただけると思います。相関関係は、サービスの一部に影響を与えながら、他の部分は正常に動作しているような複雑な問題にも有効です。

その一方で、APM相関が最良の結果をもたらさない可能性がある状況もあります。たとえば、アプリケーション・サービス全体に発生する広範な問題や、特定の小さな部分集団またはセグメントとは対照的な問題です。このような状況では、多くの異なるタグ、ラベル、または指標がすべて最適でないトランザクションと高い相関関係を持ち、調査を進める上でほとんど価値をもたらさないかもしれません。最後に、関連するデータが存在しないか、十分な記述子やラベルがない場合、相関関係が全く検出されない可能性があります。相関関係を支援するための入力とデータについては、前のセクションを参照してください。

多くの場合、これらの相関関係のあるトランザクションは、根本的な原因を迅速に導き出し、調査時間を大幅に短縮します。

トラブルシューティングをお楽しみください。

その他のリソースと情報


APM相関機能は、7.15から一般的に利用可能です。この機能に関するリリースノートを確認するには、こちらをクリックしてください。

APM Correlations機能のユーザーガイドとドキュメントは、こちらで入手できます。


この記事が気に入ったらサポートをしてみませんか?