• ログイン

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

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

問題を作成する

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

ここでは、 Python エージェントをインストールする際の、Gunicorn を統合するための要件とヒントについて説明しています 。PythonエージェントはGunicornのをサポートしています。

  • デフォルト sync worker
  • 非同期 イベントレット および 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_forkpre_exec のフックでタスクを実行するコードを実行することは避けるべきです。

Copyright © 2022 New Relic株式会社。

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