• ログイン今すぐ開始

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

background_task (PythonエージェントAPI)

構文

newrelic.agent.background_task(application=None, name=None, group=None)

バックグラウンドタスクやその他の非ウェブトランザクションを計測するために使用されます。

説明

この Python デコレーターは、バックグラウンドタスクやその他の 非ウェブトランザクションを計測するために使用することができます 。これは通常、ワーカープロセス、ジョブベースのシステム、およびスタンドアロンのスクリプトなどの非ウェブアクティビティを計測するために使用されます。バックグラウンドタスクとしてマークされたトランザクションは、APM UIにおいて非ウェブトランザクションとして表示され、ウェブトランザクションから分離されます。

callout.imporant

関数がまだインスツルメントされていない場合は、 function_trace() を使用して、バックグラウンドタスク内でその関数の関数トレースを作成することができます。また、 設定ファイル を使用して、インスツルメンテーションされていない関数をインスツルメンテーションすることもできます。

バックグラウンド・タスク・デコレーターを使用した関数が、ウェブ・トランザクションのコンテキスト内で呼び出された場合、そのウェブ・トランザクションはバックグラウンド・タスクとしてマークされます。所要時間の測定は、元のウェブ・トランザクションが開始された時点から始まります。

デコレーターを使用できない場合は、これらの呼び出し形式のいずれかを使用すると便利です。

  • コンテキスト・マネージャー: 監視するタスクが(インポート時ではなく)実行時にのみ決定される場合、 BackgroundTask コンテキスト・マネージャーを使用して、コードのブロックの実行を直接ラップすることができます。(これは BackgroundTaskWrapper で使用されるコンテキスト・マネージャーです。)
  • ラッパー: 追跡したい特定の関数がどこにあるか事前にわかっている場合は、 background_task デコレーターを使うことができます。しかし、追跡する必要のある全ての関数を知らない場合(例えば、ルーティングシステムの一部として動的に検索されている場合)は、 BackgroundTaskWrapper を使って、登録時や呼び出し時に関数をラップする必要があります。
  • パスベースのラッパー: パスベースのラッパー形式は wrap_background_task.

これらの関数形式の違いや用途については、 Variable Call Formats を参照してください。

パラメータ

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

newrelic.agent.background_task(application=None, name=None, group=None)
newrelic.agent.BackgroundTask(application=None, name=None, group=None)

これらのコールのパラメータ

パラメーター

説明

アプリケーション

アプリケーションインスタンス

必要です。データを報告する際のアプリケーション。デフォルトは None です。値を指定しない場合は、エージェントの 設定 (config ファイルまたは環境変数)で指定されたアプリケーションが使用されます。

アプリケーション・オブジェクトの生成については、 application() メソッドを参照してください。

アプリケーションは、たとえ指定されていても、 newrelic.app_name がWSGI application per request environ dictionaryで定義されていれば、上書きすることができます。

name

文字列

必須項目です。トランザクションの名前です。既定値は None です。デフォルトでは、名前はデコレータが適用された関数の名前になりますが、この名前を指定することで上書きすることができます。

グループ

文字列

オプションです。 グループ は、 名前 パラメータの命名構造を表しています。これは、 トランザクション タイプ を設定するために UI で使用されます。

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

ラッパーのパラメータです。

newrelic.agent.BackgroundTaskWrapper(wrapped, application=None, name=None, group=None)

BackgroundTaskWrapper は、 background_task デコレーターと同じ パラメータ と、この追加の ラップされた パラメータを取ります。

パラメーター

説明

ラップ

メソッド

必要です。トレースするメソッドです。

パスベースのパラメータ

newrelic.agent.wrap_background_task(module, object_path, application=None, name=None, group=None)

wrap_background_task は、 background_task デコレータと同じ パラメータ を取り、さらに以下の追加パラメータを取ります。

パラメーター

説明

モジュール

モジュール または 文字列

必要です。インスツルメンテーションを行うノンウェブ機能/アクティビティを含むモジュール。

object_path

文字列

必須です。モジュールへのパスです。

background_task デコレーターの例

ここでは、 background_task デコレーターを使用した例を紹介します。

@newrelic.agent.background_task()
def task():
...

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

BackgroundTask の使用例:

application = newrelic.agent.application()
name = newrelic.agent.callable_name(task)
with BackgroundTask(application, name):
task()

より多くのパラメータを持つ別の例を示します。

application = newrelic.agent.register_application(timeout=10.0)
def execute_task(task_name):
with newrelic.agent.BackgroundTask(application, name=task_name, group='Task'):
...

BackgroundTaskWrapper

BackgroundTaskWrapperの使用例:

task = newrelic.agent.BackgroundTaskWrapper(get_next_task())
result = task(*args, **kwargs)

この例では、この呼び出しがエージェントによって監視されているウェブ・トランザクション内で行われた場合、呼び出しはウェブ・トランザクションをバックグラウンド・タスクとして再分類します。しかし、この呼び出しがバックグラウンドのスレッドやコルーチン内で行われた場合は、呼び出しが戻るまでの間に発生したことを追跡する新しいバックグラウンド・タスク・トランザクションの記録が開始されます。

Copyright © 2022 New Relic株式会社。

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