あらゆるTraceを観察することで問題を素早く発見・修正することが可能になります

ディストリビューティッド(分散)トレーシングでは1つのエージェントの更新で点と点を結べるので、重要なことに集中し、問題を迅速に解決することができます。

公開済み 更新日 所要時間:約 9分

こちらの記事は「Observe every trace so you can find and fix issues fast」の抄訳で、以前の抄訳記事から更新しました。

ディストリビューティッド(分散)トレーシングでは、1つのエージェントの更新で点と点を結ぶので、重要なことに集中し問題を迅速に解決することができます。

月間 4300 万台以上の車両が閲覧される Dealer.com のサイトパフォーマンスと可用性は、全国の何千もの自動車ディーラーのビジネスを牽引しています。サイトが利用できなかったり、エラーが発生したりして、買い物客が迅速かつシームレスに新車やトラックの見積もりを取ったり下調べをすることができなければ、販売は実現しないかもしれません。

Dealer.comのような複雑なソフトウェア環境では、各リクエストは通常何十もの個別のサービスを経由して行われます。その過程で1つでも問題のあるサービスがあると、そのリクエスト全体のレスポンスタイムに影響を与え、良い顧客体験を悪い体験に変えてしまい、顧客が他のサイトを探す原因になる可能性があります。

リクエストの処理に関与するサービスが多数ある環境で作業するソフトウェア・チームは、上流と下流の両方で各サービスのパフォーマンスを深く理解する必要があります。理解することで、パフォーマンスの問題をより効果的に解決し、システム全体の健全性を測定し、改善すべき価値の高い領域に優先順位を付けることができます。

APMをご利用のお客様には、New Relicのディストリビューティッド(分散)トレーシングが含まれます

New Relicのディストリビューティッド(分散)トレーシングは、最新の環境で作業するソフトウェアチームに複雑なアーキテクチャを通るトレースを簡単に取得し、可視化し、分析する方法を提供するよう設計されています。また、すでに New Relic アプリケーションパフォーマンス監視 (APM) を使用している場合は、追加料金なしでディストリビューティッド(分散)トレーシングを利用することができます。エージェントを更新し、New Relic を開き、Tracesメニューを選択するだけで、トレースデータを確認することができます。

New Relic APM エージェントは、複雑なトレースソフトウェアを管理する運用の負担を完全に取り除きます。その結果、Dealer.com の Andrew のようなエンジニアは、コンポーネントの展開やスケーリングに伴う複雑さを心配することなく、環境を計装して無限のトレーステレメトリーを生成できるようになりました。

New Relic のディストリビューティッド(分散)トレーシングは非常に簡単に統合できることがわかりました。エージェントを更新するだけで、突然、分散トレースができるようになったのです。素晴らしい体験でした。

分散システム全体のすべてのアプリケーショントレースを自動的に観察することができます。New Relicの分散トレースは、C、Go、Java、.NET、Node.js、PHP、Python、Rubyなどの様々な言語フレームワークに対して、実用的な詳細チャートとウォーターフォールの可視化を提供します。また、New Relicのブラウザーデータモバイルモニタリング、AWS Lambda、Trace APIによるZipkin形式のトレース、OpenTelemetryW3Cなどのトレースの共通規格をサポートしており、より迅速に問題を調査し解決することができます。

New Relic アプリケーションパフォーマンスモニタリングの一部として提供される、ディストリビューティッド(分散)トレーシングビューです。

ソフトウェアの複雑性を理解する

ディストリビューティッド(分散)トレーシングがなぜ重要なのかを理解するには、先進的なソフトウェア企業がビジネスクリティカルなアプリケーションを迅速に構築、拡張、運用するために使用しているクラウドプラットフォーム、コンテナ化、コンテナオーケストレーションについて見てみるのが有効でしょう。

マイクロサービスやサーバーレスで構築されたソフトウェアアーキテクチャには多くの利点がありますが、爆発的に増加するコンポーネント数と、言語、動作環境、所有者の多様性は、それらを管理しようとするチームにとって新たな大きな負担となります。チームは、サービスの依存関係をすべて理解し、依存するサービスのパフォーマンス特性がリクエストやトランザクションにどのように影響するかを理解しない限り、複雑なシステムでの問題解決に向けて効果的に取り組むことはできません。干し草の山から針を見つけるには、システム全体の完全な把握が必要です。

「数ホップ離れた」ダウンストリームサービスが、あるサービスのどのように重要なボトルネックになることを理解することは、問題を迅速に解決するために不可欠です。同様に重要なのは、DevOpsチームがコードを最適化するための知見を得ることです。問題がいつ、なぜ、どのように発生したかを判断できなければ、小さな不具合は、イベントの大嵐が発生してシステムが一気に破壊されるまで、実運用環境で放置され続けるかもしれません。ディストリビューティッド(分散)トレーシングは、個々のリクエストの詳細なビューを提供し、より大きなシステムのどの部分が問題を引き起こしているかを正確に指摘し、最適化と問題解決をより速く行うことができます。

データVS洞察

ディストリビューティッド(分散)トレーシングは、サービスの依存関係を明らかにすることで、エンドツーエンドの可視性を提供します。これは、複雑な分散システムを介したリクエストを記録し、可視化する方法と考えることができます。しかし、トレースデータの収集と可視化は、データ収集のためのサードパーティゲートウェイやサテライトの展開、管理、スケーリングなど、手間がかかり、実装も複雑な場合があります。

New Relicは自動計装によって、ディストリビューティッド(分散)トレーシングの設定を容易にします。当社の自動計装アプリケーションコードでは、複数の言語の何百もの異なるライブラリやフレームワークと連携する言語エージェントを使用しています。1 つのエージェントをデプロイすると、New Relic APM はリクエストに関連する各サービスを計測し、サービス内の操作のタイミングを記録し、重要なトラブルシューティング情報を各スパンに自動で追加します。トランザクションにカスタム属性を追加すると、何も変更することなくすべての情報をトレースで確認することも可能です。

New Relic APMエージェントは、受信する各リクエストに対して一意のトレースIDを自動的に作成し、そのIDとその他の必要な相関情報を「トレースコンテキスト」として呼び出し全体に伝搬させます。例えば、あるサービスが別のサービスに対して呼び出しを行った場合、New Relic は次に使用するサービスの HTTP リクエストヘッダにトレースコンテキストを追加します。私たちの自動計装は、コンテキストの管理と伝播という大変な作業を排除するために設計されています。

手動の計装を必要とする通信を使用している場合はどうでしょうか?New Relic APM エージェントは、トレースコンテキストの注入と抽出に使用できる API を提供しています。トレースコンテキストの伝搬に W3C Trace Context 形式を使用することで、その標準をサポートする他のトレースエージェントやツールとも相互運用が可能になります。

なにより重要なのは、スタック全体のデータから洞察を得ることです。New Relic APM は、特定のリクエストが遅い理由、エラーの発生場所、顧客のエクスペリエンスを向上させるためにコードを最適化できる場所などをすばやく理解できるように設計されたトレース可視化機能を提供します。

以下は、New Relic のディストリビューティッド(分散)トレーシングにおいて、これらのコンポーネントがどのように連携しているかを示す図です。

four components of distributed tracing
ディストリビューティッド(分散)トレーシングの4つの要素。

New Relicでディストリビューティッド(分散)トレーシングを始めよう

アプリケーションを改善するための方法を見つける準備はできましたか?New Relic APM と分散トレースを使用すれば、すぐに複雑なアーキテクチャを分析し、システム全体の依存関係をよりよく理解することができます。

1. ディストリビューティッド(分散)トレーシングに関するドキュメントを確認します。

2.  興味のある呼び出しパスに関わる各サービスに、最新のAPMエージェントをデプロイまたはアップデートします。アップグレードするとすぐに分散トレースが利用できるようになります。

3. 以上で完了です。これで、New Relic APMからディストリビューティッド(分散)トレーシングにアクセスし、遅いトレースやエラーのあるトレースを素早く特定できるようになりました。また、高度なフィルタリングを使用して、属性の組み合わせでトレースを見つけることも可能です。


トレースを構成するすべてのスパンを表示します。各スパンで取得した詳細を使用して、何が起こったかを理解し、トラブルシューティングを行います。