構文
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, terminal=False)デフォルトではインストゥルメントされない関数に対して、関数およびその内部の関数を特定の深さまで計装するために使用されます。
説明
profile_trace は、関数に追加するためのデコレータです。このデコレータを追加すると、追加のトランザクション情報(トランザクショントレース情報を含む)を収集できるようになります。
profile_traceデコレータは、エージェントバージョン2.102.0.85以上で関数に使用できます。これらのオブジェクトのタイミングは、消費が開始されたときに始まり、オブジェクトが使い果たされるか、スコープ外になったときに終了します。
デコレータは、静的メソッドやクラス メソッドのデコレータを含む既存のデコレータと組み合わせて使用できます。複数のデコレータをネストする場合は、 profile_trace デコレータを最も外側のデコレータとして使用します。
代替コールフォーム
デコレーターを使用できない設定の場合は、以下の代替コールフォームを利用できます。
ラッパー
トレースする特定の関数がどこにあるか事前にわかっている場合は、 profile_traceデコレータを使用できます。 ただし、トレースする必要があるすべての関数がわかっdon'tいる場合 (たとえば、ルーティング システムの一部として動的に検索されている場合)、登録時または呼び出し時にProfileTraceWrapperを使用して関数をラップする必要があります。
パスベースのラッピング
wrap_profile_trace は、関数が宣言されているコードの外で関数をラップするために使用されます。たとえば、これを使用して、変更したくないライブラリ コードをインスツルメントすることができます。
これらの通話フォーマットの違いについては、 Different call formats をご覧ください。
パラメーター
デコレーターのパラメータ
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, depth=3)このコールには、以下のパラメータが含まれています。
パラメータ | 説明 |
|---|---|
文字列 または 機能 | オプション。関数名。ラップされる関数と同じパラメーターを受け取る関数にすることもできます。設定されていない場合、キャプチャされた関数名がデフォルトになります。 |
文字列 または 機能 | オプション。 指定されていない場合、名前が |
文字列 または 機能 | オプション。トランザクショントレース内のセグメントにコールアウトスタイルのフラグを追加します。デフォルトは |
dict または 関数 | オプション。トランザクショントレース内のセグメントに追加するカスタムパラメーター。ラップされる関数と同じパラメーターを受け取る関数にすることもできます。 |
int | オプション。デフォルトは3です。関数内でセグメントを追加するスタックの深さです。 |
ラッパーのパラメーター
newrelic.agent.ProfileTraceWrapper(wrapped, name=None, group=None, label=None, params=None)ラッパーのパラメーターには、 profile_traceのすべてのパラメーターとwrappedパラメーターが含まれます。
パラメータ | 説明 |
|---|---|
機能 | 必要です。ラッピングされる機能 |
文字列 または 機能 | オプション。関数名。ラップされる関数と同じパラメーターを受け取る関数にすることもできます。設定されていない場合、キャプチャされた関数名がデフォルトになります。 |
文字列 または 機能 | オプション。 指定されていない場合、名前が |
文字列 または 機能 | オプション。トランザクショントレース内のセグメントにコールアウトスタイルのフラグを追加します。デフォルトは |
dict または 関数 | オプション。トランザクショントレース内のセグメントに追加するカスタムパラメーター。ラップされる関数と同じパラメーターを受け取る関数にすることもできます。 |
int | オプション。デフォルトは3です。関数内でセグメントを追加するスタックの深さです。 |
パスベースのラッピングパラメータ
newrelic.agent.wrap_profile_trace(module, object_path, name=None, group=None, label=None, params=None, depth=3)パラメータには、 profile_traceのすべてのパラメータと次のパラメータが含まれます:
パラメータ | 説明 |
|---|---|
物体 | 必要です。インストルメント化する機能を含むモジュール。 |
ストリング | 関数の場所へのパスです。 |
例
profile_trace
profile_traceデコレーターの使用例:
import newrelic.agent
@newrelic.agent.profile_trace(depth=7)def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node上記の例では、プロファイルトレースが再帰関数をラップしています。関数トレースは、関数内で最大7回の再帰的スタック呼び出しの深さまで追加されます。
ラッパーの例
ProfileTraceWrapperの使用例:
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, depth=7)(呼び出される関数の識別子に基づいてメトリックに名前を付けるのではなく) エンドポイント名に基づいてメトリックに名前を付ける場合は、 ProfileTraceWrapper オブジェクトの作成時に、使用する名前と代替メトリック パス プレフィックスを指定できます。
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, name="find_node", group="Python/Profile", depth=7)メトリクスを動的に命名したい場合(呼び出される関数の識別子に基づいてメトリクスを命名するのではなく)、ProfileTraceWrapperオブジェクトの作成時に名前を関数として指定できます。
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, name=lambda tree, value: f"find_node_{value}", depth=7)