2018/08/27

翻訳: New Relic APM 新機能: 分散トレーシング

久々に New Relic APM に新機能が追加されました。メニュー単位で機能が追加されたのはだいぶなかったのではないかと思います。1年以上ぶりかな。

その名も Distributed Tracing (分散トレーシング)です。マイクロサービスにおけるサービスをまたがったデータの流れを可視化できる機能のようです。

この機能は言語によって使える言語と使えないものがあります。現在対応しているのは、Java、Node.js、Python、Ruby だけです。今後はその他の言語も追加予定のようです。また、本機能を利用するには最新の APM エージェントと設定が必要となります。また、既存の画面でのデータの見え方も変わるようですので、利用したい人はエージェントは移行ガイドをよく呼んでからの利用をおすすめします。


タイトル: Announcing Distributed Tracing With New Relic APM
著者: Victor Soares
公開日: 2018.07.31


月間4,300万台ビューを超えるサイトである Dealer.com のパフォーマンスと可用性は、全米の数千の自動車販売店でビジネスに貢献しています。サイトが利用できない場合やエラーが発生したり、買い物客が迅速かつシームレスに見積もりを取得できない場合や、新しい車やトラックの予備調査を行えない場合は、販売店での販売に影響を与えることでしょう。

Dealer.com のような複雑なソフトウェア環境において、通常、リクエストは何十もの個別のサービスを通過しています。そのパスにあるサービスの1つで問題があった場合、そのリクエスト全体のレスポンスタイムに影響を与え、良いユーザー体験を悪いものに変え、顧客が他のサイトへ行ってしまうことにも繋がります。

リクエストを処理するサービスが多数ある環境に置かれているソフトウェアチームは、上流から下流まであらゆるサービスのパフォーマンスを深く理解する必要があります。そうすることで、パフォーマンス問題がより効果的に解決できるようになり、システム全体の状態を測定し、価値の高い領域を優先的に改善することができるようになります。

New Relic APM で分散トレースが利用できるようになりました

今日(2018年7月31日)、分散トレース機能を一般公開できるようなったことを発表します。この機能は、モノリシックなサービスであれ、マイクロサービスであれ、複雑なアーキテクチャーを構築しているモダンな環境で作業しているソフトウェアチームが、トレースを容易に捕捉し、視覚化し、分析できるようにします。

「我々は、New Relic の分散トレース機能が非常に簡単に統合できるに驚きました。エージェントを更新しただけで、突然トレースが配信されたのです。これは衝撃的な体験でした。」 — アンドリュー・ポッター:Cox Automotive ブランドの Dealer.com シニアデベロッパー

New Relic APM Pro を契約しているお客様は、この新しい機能を無料でご利用いただけます。エージェントを更新して、設定で分散トレースを有効にするだけで済みます。この初期リリースでは、Java、Node.js、Python、Ruby をサポートしています。多言語環境で収集されたトレースデータを詳細な散布図とウォーターフォール形式で可視化します。今後数か月の間に、.NET と Go のサポート。その次に、PHP をサポートする予定です。

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

分散トレースが重要である理由を理解するには、ソフトウェア環境がどのように変化しているかを知ることから始めるのが良いでしょう。最新のソフトウェアテクノロジーは、クラウドプラットフォーム、コンテナ化、コンテナオーケストレーションなどを利用しています。先進的なソフトウェア組織は、それらを利用して、ビジネスクリティカルなアプリケーションをより迅速に構築し、スケールアップし、運用しているのです。

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

しかし、今日のアプリケーションは、一時的なインフラで構築された数百、数千の個別のサービスで構成されています。これらのサービスの一部は、レガシーテクノロジーで構築された大きなモノリスであることもありますが、多くは、より小さくダイナミックなマイクロサービスで構成されています。このような分散アーキテクチャには、多くの利点があります。一方、コンポーネントの数が膨大になったり、言語やOS環境、責任の所在などの多くの要素があるため、管理コストがチームにとって大きな負担にもなっています。チームは、リクエストの完全なコールグラフと、依存サービスのパフォーマンス特性がサービスにどのように影響しているかを理解できるまで、複雑なシステムで発生する問題に対して、効率的に作業するのは困難です。チームはまずシステム全体を完全に把握する必要があるのです。

DevOps チームにとって、問題を迅速に解決するためには、「数ホップ離れた」ダウンストリームサービスが、サービスの重大なボトルネックとなっている可能性があることを認識できなくてはなりません。同様に重要な点として、チームはコードを最適化する方法の洞察も提供します。DevOps チームは、いつ、なぜ、どのように問題が発生したかを判断できない場合、小さな障害をそのままにしておくしかなく、それが完璧な嵐となり、システムが一気に壊すまで気づけないでしょう。分散トレーシング機能は、個々のリクエストの詳細なビューを提供し、大規模システムのどの部分に問題があるかを正確に指摘することを可能にします。

分散トレース:スチールスレッドの作成

アーキテクチャをより分散したアーキテクチャに進化させると、すぐに分散トレースの必要性を認識できるでしょう。New Relic のエリカ・アーノルドが今年初めのブログ記事 (Tracing、Tracing、Tracing の違い)で説明したように、複雑な分散システムにおけるリクエストを計測し、コンテキストを伝播し、記録し、視覚化する手段として、分散トレース機能があるのです。

New Relic が分散トレース機能で利用する4つのコンポーネントが処理する内容を見てみましょう。

計測 (Instrument)

New Relic では、言語エージェントがアプリケーションコードを自動計測することで、分散トレースを簡単にセットアップできるようにしています。このエージェントは、複数の言語の数百の異なるライブラリやフレームワークで扱うことができます。New Relic の計測は、モノリシックであろうとマイクロサービスであろうと、リクエストにかかわる各サービスを計測します。そして、サービス内の操作のタイミングを作成し、測定された各操作を New Relic のプラットフォームに「スパン(span)」として送信します。

重要なトラブルシューティング情報は各スパンに自動的に追加されます。たとえば、New Relic instrumentation がデータベース問合せ操作を表すスパンを作成すると、スパン内の属性としてデータベース接続情報と SQL クエリが含まれます。New Relic の既存のエージェント API を使ってカスタム属性をトランザクションに追加している場合でも、何も変更することなく、トレース内のすべての情報を参照できます。

コンテキストの伝播 (Propagate Context)

New Relic の分散トレースソリューションは、サービスを自動的に計測して、受信するリクエストごとに固有のトレースIDを付与します。トレースIDとその他の必要な相関情報は、呼び出し全体にわたって「トレースコンテキスト」として伝播していきます。あるサービスが別のサービスを呼び出すと、次のサービスの HTTP リクエストヘッダーにトレースコンテキストを追加します。New Relic の自動計測機能は、コンテキストの管理と伝播という困難な作業を排除するために設計されています。一方、手動計測を必要とする転送を使用しているユーザー向けに、New Relic エージェントは、トレースコンテキストの注入と抽出を可能にする API を提供します。

記録 (Record)

New Relic エージェントは、New Relic の SaaS プラットフォームにトレースデータを送信し、それを New Relic Insight に取り込んで格納します。おそらくシステムの中で最も魅力的ではない部分というのは、最も複雑で難しい作業が行われる場所でしょう。New Relic はこれまで膨大な量のメトリック、イベント、その他のテレメトリをスケーラブルなプラットフォームに取り込んで保存しています。そのため、New Relic を利用することで、顧客は監視プラットフォームを管理するのではなく、ビジネスの構築に集中できます。New Relic Insights にデータを記録するので、Insights を使って、顧客はトレースデータに対するクエリを作成したり、専用のカスタムダッシュボードを作成することができます。

トレースの視覚化

最後に、New Relic APM で、特定のリクエストが遅い理由、エラーが発生した原因をすばやく理解するのに役立つように設計されたトレースの視覚化機能が組み込まれました。これを使って、顧客の利便性を向上させるためのコードの最適化が行えます。APM には、高度なトレース・フィルタリング機能と、分散トレースと New Relic APM を組み合わせたトレースのビューを提供しています。

今後の展開

本リリースは、これからのリリースの第1歩にすぎません。我々は、分散トレースを利用して複雑なソフトウェア環境を理解するのを支援するという、大きなロードマップを持っています。今後の予定しているロードマップを紹介します。

  • .NET、Go、および PHP エージェントの分散トレースのサポート
  • New Relic Browser と New Relic Mobile との統合によるクライアントとバックエンドのパフォーマンスの接続
  • New Relic Synthetics と Infrastructure とのインテグレーションの改善
  • OpenTracingOpenCensus のサポート

New Relic の分散トレース機能の利用方法

1 まずは移行ガイド分散トレースのドキュメントを確認してください。

2 監視したいコール・パスに関連する各サービスに最新の APM エージェントをデプロイします。そして、エージェントの設定で分散トレースを有効にします。

3 New Relic APM UI に新しく表示される 「Distributed tracing」 メニューにアクセスすると、メインの「トレースリスト」ビューが表示されます。ここで、遅いトレースやエラーのあるトレースをすばやく特定できます。「タイムピッカー」を調整することで、表示するトレースの時間帯を変更できます。また、高度なフィルタリング機能で属性を組み合わせることで、トレースを簡単に見つけることができます。

4 各スパンがどれくらい時間がかかっているかを知るには、分散トレースにアクセスします。各スパンをクリックすると、状況を把握してトラブルシューティングを行いたいコンテキスト上の過去のパフォーマンスチャートや、関連する属性を確認できます。また、トレースに関連する特定のサービスの相関 APM 概要ページに直接アクセスすることもできます。ここでは、より深いトランザクション情報やそのサービス内の問題解決を容易にするためのスタックトレースを見ることができます。

5 次に、New Relic Insights の内部でウィジェットを作成するクエリを作成して、チームにとって重要なスパンを追跡しましょう。属性を活用してクエリを処理し、グラフをフィルタリングします。

結論

現代のソフトウェア組織が環境を進化させるにつれて、物事はより複雑になり、それを理解し、トラブルシューティングするのは難しくなっていきます。New Relic の自動計測器は、分散トレースを使いやすくするために構築されています。これを使うことで、なぜ特定のリクエストが遅いのか、エラーの発生場所はどこか、どのコードを最適化することで顧客の経験を向上させることができかを素早く理解することができるようになります。

分散トレース機能について詳しく知りたい方は、以下の New Relic のドキュメントをご覧ください。

この新しい機能について New Relic Online Technical Community の APM カテゴリで #DistributedTracing を付けて、質問やコメントを投稿してください。

Qiita で New Relic Advent Calendar 2017 いろいろ書きました。特に、New Relic APM の入門的な連載を書きましたので、是非、ご覧ください。

New Relic 公式の日本 New Relic ユーザー会を立ち上げました。ワークショップの情報など日本のお客様向けに情報を発信していきますので、是非、参加ください。

過去記事

2018/09/13

翻訳: FutureStack18: New Relic 開発者向けプログラム-オープン化、シンプル化、活発化への道

今年も始まりました。New Relic の年次カンファレンス FutureStack 18。
この記事では、Elixir 用の New Relic APM エージェントの発表とデベロッパープログラムの発表がされています。

続きを読む

2018/05/18

SREcon18 と Rails デベロッパー向けアンケート結果の紹介

SRECon America カンファレンスにおけるアンケートの記事と Rails デベロッパーに対するアンケートの記事という2つの異なったレイヤーのアンケートに関する記事を見つけたので、ざっくり紹介します。違った視点での傾向が見れてなかなか面白いです。

続きを読む

2018/05/11

AWS Summit Tokyo を中心に直近の New Relic 関連イベントのご紹介

5/30 から始まる AWS summit Tokyo に参加するということで、海外から New Relic スタッフが来日し、イベント等を行います。是非、この機会に New Relic に興味のある人は参加してみてはいかがでしょうか。(基本、日本人スタッフいるので、日本語でも大丈夫なはず)

続きを読む

2018/03/17

翻訳: New Relic Browser JavaScript Error Analytics ベータ版 – エラーの早期発見、修正に役立つ

New Relic Browser の JS エラー機能が新しくなるようです (現在ベータ版)。APM で採用されているエラープロファイルが JS エラーにも対応したようです。これによって、エラーが起きている傾向が分析できるようになり、今後の JS のエラーが起きる前に対策が取りやすくなります。既存の PRO ユーザーはベータ版が使えるようなので、是非、使ってみてください。

続きを読む

 もっと見る