• ログイン今すぐ開始

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

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

問題を作成する

PythonエージェントとGunicorn WSGIウェブサーバー

ここでは、 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.ini
export NEW_RELIC_CONFIG_FILE
newrelic-admin run-program gunicorn YOUR_COMMAND_OPTIONS

プリロードアプリケーション

Gunicornのプロセス管理機能の一環として、アプリケーションのプリロードを有効にすることができます。この機能を有効にすると、WSGIスクリプトファイルやモジュールが親のマスタープロセスにプリロードされます。ワーカープロセスは、このマスタープロセスからフォークされます。

これは、WSGIスクリプトやモジュールがロードされたときに、各ワーカープロセスで実行されるはずのバックグラウンドスレッドを作成する場合、ワーカープロセスがフォークされたときにそのバックグラウンドスレッドが殺されてしまうという問題を引き起こす可能性があります。

Pythonエージェントは、バックグラウンドスレッドを使用して、定期的にデータコレクタにデータを返します。通常の状況では、このスレッドは最初の Web リクエストを受信したときにのみ作成されます。これは通常ワーカープロセスで行われるため、プリロードを使用しても問題はありません。

しかし、バックグラウンドタスクとして特定の関数の呼び出しを追跡する計測機能を追加し、WSGIスクリプトファイルやモジュールの読み込み時にそれらの関数が呼び出された場合、エージェントのバックグラウンドスレッドがマスターの親プロセスで開始されます。その後、ワーカープロセスがフォークされる際にバックグラウンドスレッドが殺されるため、実際のウェブアプリケーションではデータが報告されません。

プリロードを使用する場合は、コードのプリロードのみに使用し、実際のコード実行をトリガーしてタスクを実行しないように制限する必要があります。WSGI スクリプト ファイルまたはモジュールが読み込まれるときのそのような処理は、Gunicorn のpost_forkフックを使用してワーカー プロセスに延期する必要があります。

同様の理由で、Gunicorn のon_startingon_reloadwhen_readypre_fork 、およびpre_execフックでタスクを実行するコードを実行することは避けるべきです。

Copyright © 2023 New Relic Inc.

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