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

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

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

問題を作成する

register_application (PythonエージェントAPI)

構文

newrelic.agent.register_application(name=None, timeout=None)

Pythonエージェントを直ちに登録します。エージェントを手動で初期化する場合に使用します。

説明

initialize が呼び出されると、Python エージェントが設定されますが、エージェントは コレクタに登録されません。この呼び出しは、エージェントをコレクターに登録します。

これは主に、API を使用してインストルメント化された Web 以外の バックグラウンド トランザクション に使用されます。非 Web トランザクションで使用する場合は、 initialize 呼び出しの後、できるだけ早く register_application を呼び出します。

Web トランザクションの場合、エージェントは通常、最初の Web 要求またはバックグラウンド タスクが発生したときに自動的に登録され、エージェントはコレクターから サーバー側の構成 を受け取ります。登録には 1 秒ほどかかることがあるため、通常、詳細は最初のトランザクションから失われます。 register_applicationへの登録を強制することで、このすべてのデータを収集できます。ただし、そうすると、アプリは登録が完了するのを待ってから、ウェブ リクエストを処理したり、バックグラウンド タスクを実行したりする場合があります。

スクリプト自体が WSGI サーバーを実行する場合は、メイン スクリプト ファイルのメイン プログラム スレッドから register_application を呼び出します。Apache/mod_wsgi または uWSGI を使用する場合は、WSGI スクリプト ファイルから呼び出しを行い、呼び出しを initializeの直後に配置します

この呼び出しは、 application と同じ方法でアプリケーション オブジェクトを返します。アプリケーション オブジェクトは、エージェントによって監視されている現在のアプリケーションへの参照を取得するために使用され、一部の Python エージェント API 呼び出しで使用されます。

グローバルインポートロック中の呼び出しを避ける

Python グローバル インポート ロックが保持されている場合は、ゼロ以外のタイムアウトで register_application を呼び出さないでください。つまり、モジュールのインポート中にモジュール ファイル内でグローバル スコープで呼び出さないでください。これを行うと、この呼び出しによって作成されたバックグラウンド スレッドで一時的なデッドロックが発生する可能性があります (デッドロックは、タイムアウトが期限切れになるまで解除されません)。

多くのWSGIサーバは、標準的なPythonモジュールインポートメカニズムを介してWSGIアプリケーションを含むモジュールをインポートすることに注意してください。そのような場合、グローバルなインポートロックが保持され、上述のデッドロック問題が発生する可能性があります。

Gunicorn の場合: 前述のデッドロックの問題は、Gunicorn の使用時にも発生する可能性があります。問題は、モジュールを親プロセスにプリロードするため、WSGI モジュールからの register_application のトリガーは安全ではないことです。Gunicorn で register_application (タイムアウトの有無にかかわらず) 使用するには、 post_fork() コールバックから呼び出します。これは Apache/mod_wsgi の問題ではありません。これらのツールはこれを行わないように設計されているため、WSGI アプリケーションがロードされたときにバックグラウンド スレッドを作成しても安全です。

ワーカープロセスのフォーク後の呼び出し

子ワーカー プロセスでトランザクションを記録している場合は、子ワーカー プロセスがフォークされる前に、親プロセスで register_application を呼び出さないでください。フォークする前に register_application を呼び出すと、プロセスがフォークされたときにバックグラウンド エージェント スレッドが強制終了されます。親スレッドがコレクタにデータをレポートしているため、エージェントは子ワーカー プロセスからデータをレポートできません。

パラメーター

パラメータ

説明

name

ストリング

オプションです。アプリケーション名を指定します。設定されている場合は、Pythonエージェントの構成で設定されたアプリケーション名よりも優先されます。

timeout

int or float

あきらめて応答を送信する前に、アプリが登録を試行する秒数。つまり、New Relic が起動するか、タイムアウトを超えるまで、この行はブロックされます。 0 の値は、アプリケーションが要求を処理する前に登録を待機しないことを意味します。デフォルトは 0です。Web アプリケーションを実行している場合、New Relic の起動中にアプリケーションをブロックして遅延させるため、この値を設定することはお勧めしません。プロセスが 1 回実行され、すぐに終了する単一のプログラム実行またはタスクを計測する場合は、これを設定することをお勧めします。そうしないと、情報をキャプチャするのに間に合うように New Relic が開始されません。

この値は、制御が返され、呼び出し元が処理を続行できるようになる前に、呼び出し元がブロックされる最大秒数を指定します。値がない場合、呼び出しは、エージェント構成でグローバルに構成された startup_timeout 設定を使用します。これはデフォルトで 0.0 です。

戻り値

他のPythonエージェントAPIコールで使用可能なアプリケーションオブジェクトを返します。

バックグラウンドタスクの登録

この例では、ウェブ以外のバックグラウンドタスクを長いタイムアウトで登録しています。通常、ウェブアプリケーションでは、非常に短いタイムアウト(デフォルトは0)を設定しますが、頻度の低い非ウェブタスクでは、初期化と登録が確実に行われるように、より長いタイムアウトを設定することがあります。

import newrelic.agent
newrelic.agent.initialize('newrelic.ini')
newrelic.agent.register_application(timeout=10.0)
@newrelic.agent.background_task()
def main():
pass
if __name__ == '__main__':
main()
Copyright © 2024 New Relic Inc.

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