Stackato は ActiveState 社が開発したプライベート PaaS ソリューションです。Pythonエージェントは、以下の手順でStackatoと併用することができます。
ここでは、Stackato VM イメージのバージョン 0.6 以上を使用することを前提に説明しています。古いバージョンのStackato VMイメージを使用している場合は、アップグレードする必要があります。
パッケージのインストール
ActiveState は、 PyPM パッケージ リポジトリに Python エージェント パッケージの コピーをホストしています 。エージェントの Python パッケージをインストールするには、 requirements.txt
ファイルにnewrelic
を 1 行だけ追加します。
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エージェントの初期化
Python アプリケーションとの 統合の手順に従って、 エントリ ポイントを含む PythonWSGI モジュールに Python エージェントを初期化するコードを手動で含めることもできますが、newrelic-admin
スクリプトを使用した簡略化された起動方法も利用できます。
手動で行う場合、このような変更は通常、Python Web アプリケーションが含まれるwsgi.py
ファイルに対して行われます。 エージェント設定ファイルは同じディレクトリにあるため、 wsgi.py
ファイルへの変更は次のようになります。
import newrelic.agent
config_file = os.path.join(os.path.dirname(__file__), 'newrelic.ini')newrelic.agent.initialize(config_file)
アプリケーションがインストールされるファイルシステム内のディレクトリは変更される可能性があるため、エージェント設定の場所はwsgi.py
ファイルの場所を基準にして自動的に計算されます。
エージェントの初期化を手動で実行するコードを追加する代わりに、 newrelic-admin
スクリプトを使用することもできます。
processes
セクションのweb
エントリを設定して、Web アプリケーションの起動方法をstackato.yml
ファイルで明示的に定義している場合:
processes: web: python app.py
web
を次のように置き換えます。
processes: web: newrelic-admin run-program python app.py
つまり、既存のコマンドの前にnewrelic-admin run-program
を付けています。
同時に、次のコードを使用してstackato.yml
ファイルにenv
セクションを追加する必要があります。
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アプリケーションエントリーポイントオブジェクトも適切にラップする必要があります。