New Relicは分散トレーシングに関して新機能を相次いでリリースしています。そこで、分散トレーシングについて書かれたブログ記事をいくつか紹介していきたいと思います。まず本日は「Getting Started With New Relic Distributed Tracing」という記事を抄訳して紹介します。本投稿は何度か更新されており、現時点では2020年4月27日に最終更新されています。

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

Dealer.comのような複雑なソフトウェア環境では、各リクエストは通常、何十もの個別のサービスを通過します。問題のあるサービスがパス上に1つあるだけで、そのリクエストに対する全体的な応答時間に影響を与え、良い顧客体験を悪いものに変え、顧客が他の場所を探す原因になりえます。

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

New Relic分散トレーシングの概要

New Relic Distributed Tracingは、最新の環境で作業するソフトウェアチームが、モノリスとマイクロサービスの両方を使用するアーキテクチャを含む複雑なアーキテクチャを通るトレースを簡単にキャプチャ、可視化、分析できるように設計されています。

「New Relicの分散トレーシングは非常に簡単に統合できることがわかりました。エージェントを更新するだけで、突然、分散トレーシングができるようになりました。素晴らしい体験でした。」- a Cox Automotive brandのシニア開発者であるAndrew Potter氏

New Relic APM Proサブスクリプションをお持ちのすべてのお客様 は追加料金なしでこの機能を利用できます。サポートされているバージョンにエージェントを更新し、設定で分散トレーシングを有効にするだけです。New RelicはC、Go、Java、.NET、Node.js、PHP、Python、Rubyだけでなく、New Relic BrowserAWS LambdaさらにTrace APIにより収集したZipkinフォーマットのトレースをサポートしています。そのようなポリグロット環境で収集したトレースデータを詳細な散布図やウォーターフォール表示にして見せてくれます。

最新のソフトウェアの複雑さを理解する

分散トレーシングがなぜ重要なのかを理解するには、ソフトウェア環境がどのように変化しているかを見ることが役立ちます。クラウドプラットフォーム、コンテナ化、コンテナオーケストレーションなどの最新のソフトウェア技術は、先見性のあるソフトウェア組織が、ビジネスに不可欠なアプリケーションをより迅速に構築、拡張、運用するのに役立っています。

従来のソフトウェア環境は、典型的には少数の大規模なサービスで構成されていました。問題が発生した場合、これらの比較的シンプルなモノリシックなアーキテクチャでは、どのサービスに問題があるかを簡単に特定することができ、開発者チームはそのサービス内のトランザクションを掘り下げて重要なボトルネックやエラーを見つけることができました。

今日のアプリケーションは、多くの場合、エフェメラルなインフラストラクチャ上に構築された何百、何千もの個別のサービスで構成されています。これらのサービスの中には、レガシー技術で構築された大規模な一枚岩のようなものもあれば、より小さな動的なマイクロサービスのクラスタもあります。これらの分散アーキテクチャには多くの利点がありますが、コンポーネントの数が爆発的に増え、言語、動作環境、所有権などが多岐にわたるにつれ、それらを管理しようとするチームには大きな負担新たなに生じます。チームは、リクエストのコールグラフを完全に理解し、依存するサービスのパフォーマンス特性が自分たちのサービスにどのような影響を与えているかを理解しない限り、複雑なシステムの問題解決に効果的に取り組むことはできません。システム全体を完全に把握する必要があります。

DevOpsチームにとって、「数ホップ先」のダウンストリームサービスがサービスにとって重要なボトルネックになることを理解することは、問題を迅速に解決するために不可欠です。それと同じくらい重要なのは、コードを最適化する方法についての洞察をチームに提供することです。もしDevOpsチームがいつ、なぜ、どのようにして問題が発生するのかを判断できなければ、小さな欠陥が本番環境に留まり続け、気づいた時にはアラートのハリケーンに巻き込まれ、システムが一斉に破壊されるでしょう。分散トレーシングは、エンジニアに個々のリクエストの詳細なビューを提供し、より大きなシステムのどの部分に問題があるかを正確に指し示します。

分散トレーシング:“鋼糸”の作成

組織がより分散されたアーキテクチャに進化するにつれて、分散トレーシングの必要性がすぐにわかります。New RelicのErika Arnoldが「The Difference Between Tracing, Tracing, and Tracing(日本語抄訳明日投稿予定)」のブログ記事で説明している通り、分散トレーシングは複雑な分散システムを介してリクエストを計測し、コンテキストを伝搬し、記録し、可視化する方法として、記述することができます。

New Relicが分散トレーシングの4つのコンポーネントすべてを処理するソリューションをどのように実装したかを見てみましょう。

計測(instrument)

New Relicでは、複数の言語にまたがる何百もの異なるライブラリやフレームワークと連携する言語エージェントによりアプリケーションコードを自動計測することで、分散トレーシングの設定を簡単に行うことができます。New Relicは、モノリスであれマイクロサービスであれ、リクエストに関与する各サービスを計測し、サービス内のオペレーションのタイミングを作成し、計測されたオペレーションを「スパン」としてNew Relicのプラットフォームに送信します。

New Relicは、各スパンに重要なトラブルシューティング情報を自動的に追加します。例えば、New Relicのインストルメンテーションがデータベースクエリ操作を表すスパンを作成すると、そのスパンにはデータベース接続情報とSQLクエリが属性として含まれています。New Relicの既存のエージェントAPIを使用してトランザクションにカスタム属性を追加しているお客様は、何も変更することなく、トレースにもすべての情報が表示されます。

コンテキストの伝播

New Relicの分散トレーシングソリューションは、お客様のサービスを自動的に計測し、リクエストが来るたびに一意なトレースIDを作成します。このトレースIDとその他の必要な相関情報は、コール全体に渡って「トレースコンテキスト」として伝搬されます。例えば、あるサービスが他のサービスを呼び出すと、New RelicはそのトレースコンテキストをHTTPリクエストヘッダに追加し、次のサービスが使用できるようにします。New Relicの自動インストルメンテーションは、コンテキストを管理して伝播するという重労働を排除するように設計されていますが、手動でのインストルメンテーションが必要なトランスポートを使用している場合は、New Relicエージェントはトレースコンテキストを注入したり抽出したりできるAPIを提供しています。New RelicエージェントはトレースコンテキストのプロパゲーションにW3C Trace Contextフォーマットを使用しているため、W3C Trace Context規格をサポートしている他のトレースエージェントやツールとの相互運用が可能です。

記録

New Relicのエージェントは、トレースデータを当社のSaaS(Software-as-a-Service)プラットフォームに送信し、そのデータを世界で最も強力なテレメトリーデータベースであるNRDBに挿入して保存します。システムの中では最も華やかではない部分かもしれませんが、ここが最も困難な作業が行われる場所です。New Relicはすでに膨大な量のメトリクス、イベント、その他のテレメトリーデータを取り込み、スケーラブルなプラットフォームに保存しているため、お客様はモニタリングプラットフォームの管理ではなく、ビジネスの構築に集中することができます。New RelicはトレースデータをNRDBに保存しているため、トレースデータを直接クエリしたり、カスタムダッシュボードを作成したりすることができます。

トレースを視覚化する

New Relicのトレースの可視化は、特定のリクエストがなぜ遅いのか、どこでエラーが発生しているのか、どこでコードを最適化すれば顧客体験を向上させることができるのかを素早く理解できるように設計しています。最終的には、New Relicのユーザーエクスペリエンスにすべてが集約されていきます。これを実現するために、高度なトレースフィルタリング機能と、分散トレーシングとNew Relic APMを組み合わせたトレース可視化機能を提供しています。

New Relicの分散トレーシングの始め方

1.Planning Guide概要ドキュメントの確認

2.見たい呼び出しパスを含んでいるサービスに最新のAPMエージェントを展開し、エージェントの設定で分散トレーシングを有効にします。Browserからの分散トレーシングを見たい場合は、最新のバージョンのBrowserエージェントを展開します。

3. New Relic APMの「distributed tracing」メニューまたはNew Relic Oneの「distributed tracing」アイコンをクリックすると、メインの「tracing listing」ビューに移動し、遅いトレースやエラーのあるトレースをすばやく特定できます。「time picker」を調整して、表示するトレースのウィンドウを変更できます。高度なフィルタリングを使用して、属性の組み合わせでトレースを検索できます。

4.分散トレーシングに飛び込んで、各スパンの所要時間を確認できます。各スパンをクリックすると、過去のパフォーマンス・チャートや、問題の理解やトラブルシューティングに必要なコンテキストで階層化された関連した属性を見ることができます。また、トレースを含んでいるサービスに相関したAPM概要ページに飛び込むこともできます。ここでは、そのサービスの問題を解決するために、より詳細なトランザクション情報とスタックトレースを見ることができます。

5. New Relic Oneのチャート・ビルダーを使うと、スパンデータのクエリを実行して、チームにとって重要なカスタム・チャートやその他のビジュアライゼーションを作成することができます。また、複数のチャートを含むカスタム・ダッシュボードを作成することもできます。

結論

New Relicでは、現代のソフトウェア組織が環境を進化させていく中で、物事がより複雑になり、理解やトラブルシューティングが難しくなっていることを理解しています。New Relicの高度な自動計測機能により、分散トレーシングの利用が容易になり、特定のリクエストの処理速度が遅い理由やエラーの発生場所を理解し、コードを最適化して顧客体験を向上させることができます。

New Relicのドキュメントで、分散トレーシングの詳細を確認できます。

This post contains “forward-looking” statements, as that term is defined under the federal securities laws, including but not limited to future roadmap for distributed tracing as well as the benefits of such features. The achievement or success of the matters covered by such forward-looking statements are based on New Relic’s current assumptions, expectations, and beliefs and are subject to substantial risks, uncertainties, assumptions, and changes in circumstances that may cause New Relic’s actual results, performance, or achievements to differ materially from those expressed or implied in any forward-looking statement. Further information on factors that could affect New Relic’s financial and other results and the forward-looking statements in this press release / post is included in the filings New Relic makes with the SEC from time to time, including in New Relic’s most recent Form 10-K, particularly under the captions “Risk Factors” and “Management’s Discussion and Analysis of Financial Condition and Results of Operations.” Copies of these documents may be obtained by visiting New Relic’s Investor Relations website at http://ir.newrelic.com or the SEC’s website at www.sec.gov. New Relic assumes no obligation and does not intend to update these forward-looking statements, except as required by law.

ソフトウェアエンジニア、インフラエンジニアなど自社開発や自社運用の現場で経験を積んだのち外資系ソフトウェアベンダーでのテクニカルサポートを経て現職。New Relicユーザーだった経験あり。コミュニティでの登壇活動も多く、Microsoft MVPを7年連続受賞中。Microsoft Certified Azure Solutions Architect Expert。得意分野はC#をはじめとするソフトウェア開発、Kubernetes関連技術およびパブリッククラウド。 View posts by .