• English日本語한국어
  • ログイン今すぐ開始

この機械翻訳は参考用に提供されます。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、こちらのページをご覧ください。

問題を作成する

function_trace (PythonエージェントAPI)

構文

newrelic.agent.function_trace(name=None, group=None, label=None, params=None, terminal=False)

デフォルトではインストルメント化されていない関数、メソッド、ジェネレータ、コルーチンをインストルメント化するために使用します。

説明

function_trace 関数、メソッド、ジェネレーター、コルーチンに追加するデコレーターです。このデコレータを追加すると、追加の トランザクション 情報 (トランザクション追跡情報を含む) を収集できるようになります。(アプリのコードに手を加えずに関数をインストルメント化する別の方法は、 構成ファイルに関数をリストすることです。)

function_trace 装飾された関数で発生するすべての関数の完全なプロファイルは提供されません。これは、装飾された関数を New Relic UI のノードとして追加し、その関数に費やされた時間をキャプチャします。その関数で何が起こっているかについてさらに詳細が必要な場合は、関数トレースを関数の子関数にも適用する必要があります。

function_traceデコレーターは、エージェント バージョン 2.102.0.85 以降のジェネレーターとコルーチンで使用できます。これらのオブジェクトのタイミングは、消費が開始されたときに始まり、オブジェクトが使い果たされるか範囲外になると終了します。これは、メトリックがジェネレータまたはコルーチン オブジェクト自体の作成にかかった時間を表す以前のバージョンからの変更です。

デコレータは、静的メソッドやクラス メソッドのデコレータを含む既存のデコレータと組み合わせて使用できます。複数のデコレータをネストする場合は、 function_trace デコレータを最も外側のデコレータとして使用します。

重要

ラップされているデコレータについては、実装で Python 標準ライブラリの functools.wraps() を使用します。(または、正しい名前のイントロスペクションを可能にするために必要な、最も内側のラップされたオブジェクトの正しい名前属性をデコレーターが伝播することを確認します。)これが行われていない場合、メトリックが報告されるときに、ネストされたデコレータ関数 (最も内側にラップされた関数ではない) の名前が使用されます。

代替コールフォーム

デコレーターを使用できない設定の場合は、以下の代替コールフォームを利用できます。

コンテキストマネージャー

FunctionTrace コンテキスト マネージャーは、渡されるパラメーターを実行前に決定できない場合に使用されます。(たとえば、インポート時に関数の名前がわからない場合があります。)コンテキスト マネージャーを使用してメトリックに名前を付ける場合は、常に名前とメトリック パスのプレフィックスを指定する必要があります。

FunctionTrace クラスはコンテキスト マネージャーを実装し、 with ステートメントと組み合わせて使用されます。 FunctionTrace クラスは、トランザクションに対する時間のトレースに使用できる最低レベルのプリミティブです。

with ステートメントは、単一の関数ではなく、時間を測定する対象の境界を定義します。したがって、コンテキスト マネージャーはコードの任意のブロックに適用できます。したがって、コード ブロックには複数の関数の呼び出しが含まれる場合もあれば、追跡する時間指向のアルゴリズムを実装する自己完結型のコード ブロックである場合もあります。

重要

過度に多くの回数呼び出されるコードブロックのトレースは避けてください。例えば、何度も実行されるループのコンテキスト内では使用しないでください。生成されたデータは、パフォーマンスのオーバーヘッドになります。より良い解決策は、ループを囲むことです。

ラッパー

トレースしたい特定の関数がどこにあるかが事前にわかっている場合は、 function_trace デコレータを使用できます。ただし、トレースする必要があるすべての関数が わからない 場合 (たとえば、関数がルーティング システムの一部として動的に検索されている場合)、 FunctionTraceWrapper を使用して関数をラップする必要があります。登録時または電話時。

パスベースのラッピング

wrap_function_trace は、関数が宣言されているコードの外で関数をラップするために使用されます。たとえば、これを使用して、変更したくないライブラリ コードをインスツルメントすることができます。

これらの通話フォーマットの違いについては、 Different call formats をご覧ください。

パラメーター

デコレーターのパラメータ

newrelic.agent.function_trace(name=None, group=None, label=None, params=None, terminal=False)

このコールには、以下のパラメータが含まれています。

パラメータ

説明

name

ストリング

オプションです。関数名を指定します。設定されていない場合は、キャプチャされた関数名がデフォルトとなります。

group

ストリング

オプション。groupは、 nameパラメータの命名構造を表します。これは、トランザクション タイプを分離するために UI で使用されます。

指定しない場合、名前がmodule:class.functionまたはmodule:functionの形式であり、実行される関数の名前を表すと想定して、グループはデフォルトでFunctionになります。カスタム グループを作成する場合は、先頭にPython/を付けることをお勧めします。

label

ストリング

オプション。トランザクション追跡のセグメントにコールアウト スタイルのフラグを追加します。デフォルトはNoneです。

params

ディクト

オプションです。トランザクション・トレースのセグメントに追加するカスタム・パラメータ。

terminal

ブール値

オプションです。Trueの場合、子供のセグメントは記録されません。デフォルトはFalseです。

コンテキストマネージャのパラメータ

newrelic.agent.FunctionTrace(name, group=None, label=None, params=None, terminal=False)

コンテキスト マネージャーのパラメーターには、 function_traceのすべての パラメーター が含まれます。 name パラメータは必須であり、オプションではありません。

パラメータ

説明

name

ストリング

必須項目です。関数名です。

ラッパーのパラメーター

newrelic.agent.FunctionTraceWrapper(wrapped, name=None, group=None, label=None, params=None, terminal=False)

ラッパーのパラメーターには、 function_traceのすべてのパラメーターwrappedパラメーターが含まれます。

パラメータ

説明

wrapped

機能

必要です。ラッピングされる機能

パスベースのラッピングパラメータ

newrelic.agent.wrap_function_trace(module, object_path, name=None, group=None, label=None, params=None, terminal=False)

パラメータには、 function_traceのすべてのパラメータと次のパラメータが含まれます:

パラメータ

説明

module

物体

必要です。インストルメント化する機能を含むモジュール。

object_path

ストリング

関数の場所へのパスです。

function_trace

function_traceデコレーターの使用例:

import newrelic.agent
class _Database(UserDict.DictMixin):
...
@newrelic.agent.function_trace()
def _commit(self):
...
@newrelic.agent.function_trace()
def open(file, flag=None, mode=0666):
...

ネイティブ コルーチンでfunction_traceデコレータを使用する例:

import newrelic.agent
class _Database(UserDict.DictMixin):
...
@newrelic.agent.function_trace()
async def _commit(self):
...
@newrelic.agent.function_trace()
async def open(file, flag=None, mode=0666):
...

コンテクストマネージャーの例

FunctionTraceコンテキスト マネージャーの使用例:

import newrelic.agent
def dispatch_request(self, request):
adapter = self.url_map.bind_to_environ(request.environ)
try:
endpoint, values = adapter.match()
function = getattr(self, 'on_' + endpoint)
with newrelic.agent.FunctionTrace(
endpoint, 'Python/EndPoint'):
return function(request, **values)
except HTTPException as e:
return e

ラッパーの例

FunctionTraceWrapperの使用例:

Werkzeug を使用した URL ルーティングでは、最初に getattr() を使用してクラスのメソッドを動的に検索するために使用される名前が生成され、その結果が呼び出されます。

def dispatch_request(self, request):
adapter = self.url_map.bind_to_environ(request.environ)
try:
endpoint, values = adapter.match()
return getattr(self, 'on_' + endpoint)(request, **values)
except HTTPException as e:
return e

終点の関数をトレースしたい場合は、次のように書き換えることができます。

import newrelic.agent
def dispatch_request(self, request):
adapter = self.url_map.bind_to_environ(request.environ)
try:
endpoint, values = adapter.match()
function = getattr(self, 'on_' + endpoint)
function = newrelic.agent.FunctionTraceWrapper(function)
return function(request, **values)
except HTTPException as e:
return e

(呼び出される関数の識別子に基づいてメトリックに名前を付けるのではなく) エンドポイント名に基づいてメトリックに名前を付ける場合は、 FunctionTraceWrapper オブジェクトの作成時に、使用する名前と代替メトリック パス プレフィックスを指定できます。

import newrelic.agent
def dispatch_request(self, request):
adapter = self.url_map.bind_to_environ(request.environ)
try:
endpoint, values = adapter.match()
function = getattr(self, 'on_' + endpoint)
function = newrelic.agent.FunctionTraceWrapper(
function, name=endpoint, group='Python/EndPoint')
return function(request, **values)
except HTTPException as e:
return e

この例では、エンドポイントの名前が helpの場合、最終的なメトリックは次のようになります。

Python/EndPoint/help

トランザクションのパフォーマンスの内訳では、カテゴリは Python 、セグメント名は EndPoint/helpになります。そのセグメント名は、低速トランザクション トレースにもノード名として表示されます。

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.