Stackato は ActiveState 社が開発したプライベート PaaS ソリューションです。Pythonエージェントは、以下の手順でStackatoと併用することができます。
ここでは、Stackato VM イメージのバージョン 0.6 以上を使用することを前提に説明しています。古いバージョンのStackato VMイメージを使用している場合は、アップグレードする必要があります。
パッケージのインストール
ActiveState は、 PyPMパッケージ リポジトリで Python エージェント パッケージのコピーをホストします。エージェントの Python パッケージをインストールするには、 requirements.txtファイルの次の行にnewrelic
を追加します。
newrelic
次に、Stackato クライアントを使用してupdate
コマンドを実行します。
PyPM パッケージリポジトリは毎日更新されています。もし、PyPM パッケージリポジトリから入手できるものよりも新しいバージョンの Python エージェントを使用する必要がある場合は、代わりに pip と PyPI からソースパッケージを使用する必要があります。
この場合、PyPM で使用されるrequirements.txtファイルに加えて、pip の入力としてrequirements.pipファイルを作成する必要があります。requirements.pipファイルで、 newrelic
パッケージをリストする必要があります。
エージェント構成ファイル
Python agent installation で説明しているように、ローカルシステム上でPython agent configurationを生成し、Stackatoインスタンスにプッシュするディレクトリに追加する必要があります。
エージェントのログファイルの出力先を指定するためのエージェント設定ファイルのオプションが設定されている必要があります。
log_file = stderr
Pythonエージェントの初期化
integration with your Python application の手順に従って、WSGIアプリケーションのエントリーポイントを含むPythonモジュールに、Pythonエージェントを初期化するコードを手動で組み込むこともできますが、 newrelic-admin スクリプトを使用することで、簡単な起動方法も利用できます。
手動で行う場合、このような変更は通常、Pythonウェブアプリケーションを含む wsgi.py ファイルに対して行われます。エージェントの設定ファイルは同じディレクトリにあるので、 wsgi.py ファイルに変更を加えることになります。
import newrelic.agentconfig_file = os.path.join(os.path.dirname(__file__), 'newrelic.ini')newrelic.agent.initialize(config_file)
アプリケーションがインストールされているファイルシステム上のディレクトリは変更される可能性があるため、エージェント設定の場所は、 wsgi.py ファイルの場所を基準にして自動的に計算されます。
エージェントの初期化を手動で実行するコードを追加する代わりに、 newrelic-admin スクリプトを使用する方法があります。
stackato.ymlファイルで、 processes
セクションにweb
エントリを設定して Web アプリケーションを起動する方法を明示的に定義している場合:
processes: web: python app.py
web
を次のように置き換えます。
processes: web: newrelic-admin run-program python app.py
つまり、既存のコマンドの前にnewrelic-admin run-program
を付けています。
同時に、次のようにenv
セクションをstackato.ymlファイルに追加する必要もあります。
env: NEW_RELIC_CONFIG_FILE: newrelic.ini
web
エントリをまだオーバーライドしておらず、代わりに uWSGI を実行している Stackato スタックのデフォルトに依存している場合、プロセスは少し異なります。この場合、次のようにweb
エントリをstackato.ymlに追加する必要があります。
processes: web: newrelic-admin run-program $PROCESSES_WEB
env
セクションも必要です。
PROCESSES_WEB
が定義されておらず、これが機能しない場合は、古い VM イメージを使用しており、アップグレードする必要があることを示しています。
手動でも自動でも、使用しているPythonウェブフレームワークに必要であれば、WSGIアプリケーションエントリーポイントオブジェクトも適切にラップする必要があります。