分散トレースを使用する と、分散システム全体でリクエストの行程全体を確認できます。 Python エージェントには、2 種類の分散トレースが用意されています。詳細については、 スパン サンプリングの仕組みを参照してください。
- 標準 (ヘッドベースのサンプリング): トレースが到着する前に、受け入れて分析するトレースの設定パーセンテージを決定します。これにより、トレースがどのように役立つかを理解するための確かな出発点が得られます。Python エージェント 7.0.0.166 以降では、デフォルトでオンになっています。
- 無限トレース(テールベースのサンプリング):当社のクラウドベースのサービスは、すべてのトレースを受け入れ、それらをソートして最も重要なものを見つけます。標準トレースを設定した後、このオプションを追加することをお勧めします。これは、すべてのトレースを分析し、最も重要なトレースをサンプリングするための構成オプションを提供するためです。
分散トレースを開始するために必要なすべての手順は次のとおりです。
新しいPythonエージェント
標準の分散トレース(ヘッドベースのサンプリング)を試すだけの場合でも、無限トレース(テールベースのサンプリング)を設定する場合でも、標準のトレースを設定することから始める必要があります。ヘッドベースのサンプリングを実行するために、APMエージェントのインストールについて説明します。その後、Infinite Tracingを設定できます。これはオプションですが、推奨されます。
エージェントをインストールして、標準の分散トレースを取得します
これは、サービスにAPMエージェントをまだインストールしていない場合、または追加のサービスをインストルメント化する場合に、標準の分散トレースを設定するための最良のアプローチです。
このAPMエージェントでインストルメント化されたサービスがすでにいくつかあり、それらを分散トレースに含めたい場合は、各サービスの分散トレースを手動で有効にする必要があります。古いPythonエージェントのオプションを参照してください。
ステップ1.サービスを特定する
各トレースデータをNew Relicに送信できるように、どのサービスをインストゥルメントするかを把握します。
ステップ2.各サービスをAPMエージェントでインストルメント化する
トランザクションに関係するサービスごとに、エージェントのインストールルーチンを繰り返します。一部のサービスが他の言語を使用している場合は、それらの言語のインストール手順を繰り返すだけです。
インストール ルーチンを開始するには、下のタイルをクリックします。各エージェントのインストールが完了したら、ここに戻って トレースを表示するためのヒントを参照してください。
ステップ3.トレースを表示する
各サービスをAPMエージェントでインストルメント化した後、アプリケーションでトラフィックを生成して、トレースをキャプチャできるようにします。UIでトレースを表示する2つの方法は次のとおりです。
特定のサービスのトレースを確認する1つの方法は次のとおりです。
one.newrelic.com > All capabilities > APM & services
に移動します。
エンティティ(サービス)をクリックします。
左側のペインの
Monitor
セクションで、
Distributed tracing
をクリックします。
詳細については、個々のトレースをクリックしてください。 上部のメニューで
Group similar traces
がオンになっている場合は、トレース グループをクリックしてから、個々のトレースをクリックします。
必要なトレースが表示されない場合は、 trace.id
でフィルタリングできます。
アカウントをまたがるトレースを表示するには:
one.newrelic.com > All capabilities > Traces
に移動します。
左側のペインでエンティティ(サービス)を選択します。
詳細については、個々のトレースをクリックしてください。 上部のメニューで
Group similar traces
がオンになっている場合は、トレース グループをクリックしてから、個々のトレースをクリックします。
必要なトレースが表示されない場合は、 trace.id
でフィルタリングできます。
ログとトレースの詳細をまとめて、トラブルシューティングをより簡単かつ迅速に行うことができます。ログをコンテキストに含めると、NewRelicUIのトレースと一緒にログメッセージを表示できます。
特定のサービスを含むトレースの表示またはアカウント全体のトレースの表示の手順を使用して興味深いトレースを見つけたら、次の手順を実行します。
コンテキスト内でログを有効にしている場合は、
Logs
タブ (
Trace details
の横) をクリックします。
個々のログに関連する詳細を表示するには、メッセージを直接クリックします。
UIでトレースを見つけるための詳細については、以下を参照してください。
無限トレースのセットアップ
APMエージェントの標準分散トレース(上記)は、トレースの最大10%をキャプチャしますが、すべてのデータを分析して最も関連性の高いトレースを見つけたい場合は、無限トレースを設定できます。
ヒント
この機能の詳細については、「 無限トレース」を参照してください。
開始する前に、まず 要件を満たしていることを確認してください。
手順1.新しいエージェントのインストールを完了します
Infinite Tracingセットアップは、標準の分散トレース用の新しいエージェントインストールからのインストルメンテーションステップに基づいています。エージェントのインストールが完了したら、トレースオブザーバーのセットアップを続行します。
ステップ2.トレースオブザーバーを設定します
トレースオブザーバーは、すべてのトレースを収集して分析するNewRelicAWSベースのサービスです。トレースオブザーバーの設定の手順に従います。完了したら、トレースオブザーバー情報をここに戻し、次の手順に進んでエージェントを構成します。
無限トレース構成設定には、標準の分散トレースに加えて、トレースオブザーバーに関する情報が含まれます。サーバー側の構成は、無限トレースでは使用できないことに注意してください。
設定の概要は次のとおりです。構成の詳細については、 Python エージェントの構成を参照してください。
タイプ | 必要な構成 |
---|
無限のトレース | このインストールコマンドを使用してライブラリをプルダウンし、構成ファイルまたは環境変数を設定します。 $pip install newrelic[infinite-tracing]
General configuration options: 構成ファイル( newrelic.ini ): distributed_tracing.enabled = true infinite_tracing.trace_observer_host = YOUR_TRACE_OBSERVER_HOST
環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED = true NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST = "YOUR_TRACE_OBSERVER_HOST"
Batching and compression configuration options: v8.7.0 の時点で、Python エージェントはバッチ処理と圧縮の両方をサポートしています。どちらの設定もデフォルトで true に設定されており、次のオプションで切り替えることができます。 構成ファイル( newrelic.ini ): infinite_tracing.batching = true # Send spans to the trace observer in batches rather than one by one infinite_tracing.compression = true # Enable gzip compression for data sent via Infinite Tracing
環境変数: NEW_RELIC_INFINITE_TRACING_BATCHING = true NEW_RELIC_INFINITE_TRACING_COMPRESSION = true
|
ヒント
プロキシ設定についてサポートが必要な場合は、 プロキシサポートを参照してください。
ステップ4.(オプション)無限トレースをカスタマイズする
エージェント構成設定を追加すると、NewRelicUIにデータが表示されるようになります。データの分析に時間を費やした後、無限トレースの機能のいくつかを調整することをお勧めします。
古いPythonエージェントのオプション
古いPythonエージェントを使用している場合は、有効にする前に、必要な分散トレース機能がサポートされていることを確認してください。
互換性ガイド
以下の互換性情報を確認した後、 「古いPythonエージェントの構成」を参照してください。
必要なPythonエージェントバージョンをインストールまたは更新します。最良の結果を得るには、最新のPythonエージェントバージョンに更新してください。
オプション | Pythonエージェントバージョン |
---|
標準の分散トレース | 4.2.0.100以降 W3Cトレースコンテキストの場合:5.6以降 |
無限のトレース | 5.12.0.140(W3Cトレースコンテキストを含む) サポートされている環境:CPythonのみ(pypyはサポートされていません) |
分散トレースを有効にするには、以下の設定を参照してください。
ヒント
分散トレースを使用せずに古いエージェントを使用している場合は、分散トレースをオンにする前に、APMへの影響を確認してください。
設定の概要は次のとおりです。構成の詳細については、 Pythonエージェントの構成を参照してください。
タイプ | 必要な構成 |
---|
標準の分散トレース | 構成ファイル( newrelic.ini ): distributed_tracing.enabled = true
環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
|
無限のトレース | 古いエージェントが無限トレースをサポートしている場合は、上記の構成手順を参照してください。 |
手動計装(自動計装が機能しない場合)
Recommendation: カスタム インストゥルメントを実行する前に、以下をお読みください。
サービスがトレースヘッダーを他のサービスに渡していない場合は、分散トレースペイロードAPIを使用して、呼び出し元のサービスと呼び出されたサービスをインストルメント化できます。呼び出し元のサービスは、API呼び出しを使用してペイロードを生成します。このペイロードは、呼び出されたサービスによって受け入れられます。
通話サービスをインストルメント化するには:
発呼側サービスをモニターするAPMエージェントのバージョンが分散トレースをサポートしていることを確認してください。
分散トレーシング ペイロードを生成するためのエージェントAPI呼び出しを呼び出します ( Python エージェントAPIを参照)。
重要
トレース内のスパンの適切な順序を維持するには、 generate the payload in the context of the span that sends it必ず実行してください。
そのペイロードを宛先サービスに対して行われた呼び出しに追加します(たとえば、ヘッダーで)。
(オプション)呼び出しを外部呼び出しとして識別します( PythonエージェントAPIを参照)。
呼び出されたサービスをインストルメント化するには:
呼び出されたサービスを監視するAPMエージェントのバージョンが分散トレースをサポートしていることを確認します。
呼び出されたサービスのNewRelicエージェントがNewRelicトランザクションを識別しない場合は、エージェントAPIを使用してトランザクションを宣言します。トランザクションが進行中でないことを確認する1つの方法は次のとおりです。 transaction = current_transaction()
が実行されると、 transaction
はNone
になります。または、 result = accept_distributed_trace_payload(payload)
を実行すると、結果はFalse
になります。
非Webトランザクションを報告するには、 background_task
を使用します。Pythonインストルメンテーションの詳細については、「トランザクションとセグメントの監視」を参照してください。
受信した呼び出しからペイロードを抽出します(たとえば、ヘッダーで)。
ペイロードを受け入れるための呼び出しを呼び出します( PythonエージェントAPIを参照してください)。