• ログイン無料アカウント

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

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

問題を作成する

PythonエージェントとStackato

Stackato は ActiveState 社が開発したプライベート PaaS ソリューションです。Pythonエージェントは、以下の手順でStackatoと併用することができます。

ここでは、Stackato VM イメージのバージョン 0.6 以上を使用することを前提に説明しています。古いバージョンのStackato VMイメージを使用している場合は、アップグレードする必要があります。

パッケージのインストール

ActiveState は、Python エージェントパッケージのコピー を、 PyPM パッケージリポジトリでホストしています。エージェント用のPythonパッケージをインストールするには、 newrelicrequirements.txt ファイルに一行ずつ追加します。

newrelic

その後、Stackatoクライアントを使って、 update コマンドを実行します。

PyPM パッケージリポジトリは毎日更新されています。もし、PyPM パッケージリポジトリから入手できるものよりも新しいバージョンの Python エージェントを使用する必要がある場合は、代わりに pipPyPI からソースパッケージを使用する必要があります。

この場合、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.agent
config_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アプリケーションエントリーポイントオブジェクトも適切にラップする必要があります。

Copyright © 2022 New Relic株式会社。