Stackato は ActiveState 社が開発したプライベート PaaS ソリューションです。Pythonエージェントは、以下の手順でStackatoと併用することができます。
ここでは、Stackato VM イメージのバージョン 0.6 以上を使用することを前提に説明しています。古いバージョンのStackato VMイメージを使用している場合は、アップグレードする必要があります。
コンテンツ
パッケージのインストール
ActiveState は、Python エージェントパッケージのコピー を、 PyPM パッケージリポジトリでホストしています。エージェント用のPythonパッケージをインストールするには、 newrelic
を requirements.txt ファイルに一行ずつ追加します。
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 ファイルの中で、 web
エントリーを processes
セクションに設定することで、Web アプリケーションの起動方法を明示的に定義している場合。
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アプリケーションエントリーポイントオブジェクトも適切にラップする必要があります。