New Relic Now Start training on Intelligent Observability February 25th.
Save your seat.

オブザーバビリティの実務担当者として、当然のことながら、テレメトリーデータだけが答えることができる問題があります。システムを調査する際には、ハイレベルな視点(チェックアウトサービスのパフォーマンスはどうなっているか、など)と、きめ細かい視点(例えば、どの顧客が遅いチェックアウト応答を経験しているか、など)の両方を把握できると便利です。概要レベルのデータを見てから、詳細に掘り下げていくこのプロセスを、私は「ズームイン」と呼んでいます。

New Relicエージェント、OpenTelemetry、Prometheusなどから収集されたメトリクス、イベント、ログ、トレースなどのMELTデータに加えてNew Relicクエリ言語(NRQL)を使用すると、実行中のシステムに関するインサイトを迅速に得ることができます。単一のクエリ言語の力を活用することで、概要ビュー(ハイレベルな視点)を取得し、クエリをさらに絞り込んで特定の角度からデータを調べることができます。

この手法を使用して重要なインサイトをどのように収集できるかを示すために、サンプルシステムを詳しく見てみましょう。

概要ビュー

今日は、OpenTelemetryアプリケーションから生成されたトレーステレメトリーを分析の基礎として使用します。このアプリケーションは、下の画像に示すように、フロントエンドサービスといくつかのバックエンドマイクロサービスを備えた、eコマースアプリケーションです。

アプリケーションパフォーマンス監視(APM)ページでは、サービスに重点を置いた概要が提供されますが、APMのチャートに使用されている同じデータに対して独自のNRQLクエリを作成することで、より具体的なインサイトを得ることができます。

クエリビルダーとNRQLで、データをさらに深く探る

実行中のサービスについて調査を始めるには、まずトレースの概要を把握する必要があります。クエリビルダーを使用して、フロントエンドサービスにどのようなトレースの概要データが存在するかを把握するために、次のような基本的なクエリから始めることができます。

FROM DistributedTraceSummary SELECT * 
WHERE root.entity.name = 'frontend-otel'

次の図に示すように、 SELECT *クエリでは、最新の100行のデータを選択することで、どの属性が存在する可能性があるかについての概要を得ます。フロントエンドトランザクションにかかった時間をミリ秒単位で示すことができる属性が、duration.msであることがわかります。

レイテンシデータをプロットする場合、平均のようなものよりも値の分布を確認することをお勧めします。データの最終日におけるトレースの数に加えて、50、90、95、99のパーセンタイルを選択して確認します。

FROM DistributedTraceSummary SELECT percentile(duration.ms, 50, 90, 95, 99), count(*) 
WHERE root.entity.name = 'frontend-otel'
SINCE 1 day ago

結果のグラフには、duration.msのパーセンタイルと過去1日間のトレース数が表示されます。

*パーセンタイルについては詳しく知りたい方はこちらのドキュメントを参照ください。

これは適正でハイレベルに要約された情報です。多くのトランザクションが行われています。これは概要ダッシュボードのターゲットとしては適していますが、もう少し深く掘り下げたいと思うかもしれません。

データを詳細に見る

サンプルアプリケーションでは、フロントエンドサービスの概要はありますが、サービスの依存関係がどのように機能しているかはわかりません。

最初に見つけるべきなのは、フロントエンドサービスのレイテンシに寄与する他のサービスです。このレベルの詳細に到達するには、分散トレースの要素の1つであるトレースSpanイベントを使用します。

フロントエンドの提供に関係するサービスのコレクションを取得するには、サンプルトレースを取得し、Spanデータでサービス名を見つけます。これは次のNRQLを使用することで実現できます。

FROM Span SELECT uniques(service.name) 
WHERE trace.id in (FROM DistributedTraceSummary SELECT trace.id  WHERE root.entity.name = 'frontend-otel' LIMIT MAX) 

次の画像は、フロントエンドの提供に関係するサービスの内訳を示しています。

これにはコールチェーン内のすべてのサービスが含まれていることがわかります。これは、あらゆる種類のレイテンシ調査に役立つ情報です。

この一連のスパンに関する概要的統計を収集して、フロントエンドに影響を与える可能性のあるレイテンシの点で最も遅いスパンがどれかを確認できます。FACET句を使用して、スパンをサービス名でグループ化できます。

FROM Span SELECT percentile(duration.ms, 99), count(*)
WHERE trace.id in (FROM DistributedTraceSummary SELECT trace.id  WHERE root.entity.name = 'frontend-otel' LIMIT MAX) 
FACET service.name

次の画像は、各サービスの処理時間の分布を示しています。

このクエリ結果から、チェックアウトサービスが注目すべき重要なサービスであることがわかります。システムに関する知識からすると、チェックアウトはeコマースサイトが収益を得る場所であるため、ビジネス上も非常に重要です。

もう一度ズームアウトして、チェックアウトサービスのスパンを調べて、最もレイテンシが大きいものについて追加のインサイトが得られるかどうかを確認しましょう。

FROM Span SELECT *
WHERE service.name = 'checkoutservice-otel'

上記のクエリは、次の画像に示すように、チェックアウトサービスのスパンを抽出します。

name属性には、呼び出されるサービスのエンドポイントがあることに気付きました。FACETで使用してみましょう。

FROM Span SELECT percentile(duration.ms, 95, 99)
WHERE service.name = 'checkoutservice-otel'
FACET name

このクエリは、チェックアウトサービス内のエンドポイント別の処理時間を表示します。

さらに進む前に、これらの名前を少し整理して、「oteldemo」の後の部分だけを含めることができます。TIMESERIES MAXプレフィックスを付けて、レイテンシのパーセンタイルが時間の経過と共に表示されるようにします。

WITH aparse(name, 'oteldemo.*')as sanitizedName
FROM Span SELECT percentile(duration.ms, 95, 99)
WHERE service.name = 'checkoutservice-otel'
FACET sanitizedName TIMESERIES MAX

上記のクエリでは、簡略化された名前と時間の経過に伴うパーセンタイルが表示されるため、処理時間の観点で顕著な傾向を持つエンドポイントを簡単に見つけることができます。

このチャートから、PlaceOrderが際立っていることが明らかです。このエンドポイントだけにクエリを絞り、p95だけを使ってより長い時間範囲を見てみましょう。

WITH aparse(name, 'oteldemo.*')as sanitizedName
FROM Span SELECT percentile(duration.ms, 95)
WHERE service.name = 'checkoutservice-otel' and sanitizedName = 'CheckoutService/PlaceOrder'
TIMESERIES MAX since 1 week ago

クエリは、次の画像に示すように、1週間にわたるPlaceOrderエンドポイントの傾向を返します。

これにより、興味深い兆候を得ることができました。10月18日午後5時30分にレイテンシの急増があったようです。クエリビルダーを使用して、特定の期間にズームインすることができます。

なぜこのようなことが起こるのかを本当に把握するには、特定の遅いスパンに詳細が記載されています。処理時間が1秒(1000ミリ秒)を超えるスパンを見てみましょう。

WITH aparse(name, 'oteldemo.*')as sanitizedName
FROM Span SELECT duration.ms,*
WHERE service.name = 'checkoutservice-otel' AND sanitizedName = 'CheckoutService/PlaceOrder' AND duration.ms > 1000
since '2024-10-18 01:25:00+0530' UNTIL '2024-10-18 09:52:00+0530'

このクエリは処理時間が1秒以上のスパンを分離し、考えられるボトルネックをより詳細に検査できるようにします。

ここから、注文金額やその他の情報に前兆があり、この呼び出しがなぜ遅くなったのか、またサービスコード内で何をすべきかについて新たな仮説を提供できる可能性があります。

まとめ

データをナビゲートし、ズームインやズームアウトしてより深い理解を得る能力は、オブザーバビリティ実務担当者の中核となるスキルであり、システムの動作を理解し、問題が存在する可能性のある場所を特定するのに役立ちます。NRQLの小さなスニペットから始めてデータの概要を把握し、データの重要な属性を使用して詳細にズームインする機能は、New Relicでデータを探索する際の強力かつ魅力的な側面の1つです。