ここでは、 Python エージェントをインストールする際の、Gunicorn を統合するための要件とヒントについて説明しています 。PythonエージェントはGunicornのをサポートしています。
- デフォルト
sync
ワーカー - 非同期
eventlet
およびgevent
ワーカー
Pythonエージェントの統合
Gunicornで推奨されているアドミン・スクリプトの統合方法を利用することができます。ここでは、アドミンスクリプトを使って起動コマンドをラッピングする例を紹介します。
NEW_RELIC_CONFIG_FILE=/PATH/TO/newrelic.ini newrelic-admin run-program gunicorn YOUR_COMMAND_OPTIONS
また、Gunicornを起動する前に設定ファイルの場所をエクスポートすることもできます。
NEW_RELIC_CONFIG_FILE=/PATH/TO/newrelic.iniexport NEW_RELIC_CONFIG_FILE
newrelic-admin run-program gunicorn YOUR_COMMAND_OPTIONS
プリロードアプリケーション
Gunicornのプロセス管理機能の一環として、アプリケーションのプリロードを有効にすることができます。この機能を有効にすると、WSGIスクリプトファイルやモジュールが親のマスタープロセスにプリロードされます。ワーカープロセスは、このマスタープロセスからフォークされます。
これは、WSGIスクリプトやモジュールがロードされたときに、各ワーカープロセスで実行されるはずのバックグラウンドスレッドを作成する場合、ワーカープロセスがフォークされたときにそのバックグラウンドスレッドが殺されてしまうという問題を引き起こす可能性があります。
Pythonエージェントは、バックグラウンドスレッドを使用して、定期的にデータコレクタにデータを返します。通常の状況では、このスレッドは最初の Web リクエストを受信したときにのみ作成されます。これは通常ワーカープロセスで行われるため、プリロードを使用しても問題はありません。
しかし、バックグラウンドタスクとして特定の関数の呼び出しを追跡する計測機能を追加し、WSGIスクリプトファイルやモジュールの読み込み時にそれらの関数が呼び出された場合、エージェントのバックグラウンドスレッドがマスターの親プロセスで開始されます。その後、ワーカープロセスがフォークされる際にバックグラウンドスレッドが殺されるため、実際のウェブアプリケーションではデータが報告されません。
プリロードを使用する場合は、コードのプリロードのみに使用し、実際のコード実行をトリガーしてタスクを実行しないように制限する必要があります。WSGI スクリプト ファイルまたはモジュールが読み込まれるときのそのような処理は、Gunicorn のpost_fork
フックを使用してワーカー プロセスに延期する必要があります。
同様の理由で、Gunicorn のon_starting
、 on_reload
、 when_ready
、 pre_fork
、およびpre_exec
フックでタスクを実行するコードを実行することは避けるべきです。