OpenShift は、Pythonエージェントを含む様々な言語を使用したウェブアプリケーションをホスティングすることができるPaaS(Platform as a Service)ソリューションです。
アプリケーションの準備
Python エージェントをインストールする前に、利用可能な Python カートリッジのいずれかを使用して、Python Web アプリケーションが OpenShift の下にインストールされ、実行されていることを確認してください。詳細は、 OpenShift developer guides を参照してください。
APM Pythonエージェントのインストール
OpenShift は、サードパーティの Python パッケージをインストールする 2 つの異なる方法をサポートしています。パッケージは、Web アプリケーションのsetup.py
またはpip
で使用されるrequirements.txt
ファイルの依存関係としてリストできます。
setup.py
ファイルを使用している場合は、 install_requires
に渡されるサードパーティ モジュールのリストにnewrelic
を追加して、エージェントをインストールします。
from setuptools import setup
setup(name='YourAppName', version='1.0', description='OpenShift App', author='Your Name', author_email='example@example.com', url='https://www.python.org/community/sigs/current/distutils-sig', install_requires=['Flask>=0.7.2', 'MarkupSafe', 'newrelic'], )
pip
を使用している場合は、次の行をrequirements.txt
に追加します。
newrelic
プロジェクトを OpenShift にプッシュすると、Python エージェントパッケージがインストールされます。Python エージェントは、Python Package Index (PyPi) の OpenShift ミラーから最新バージョンを使用します。PyPiのOpenShiftミラーの更新は遅れることがあるので、PyPiの新しいリリースがOpenShiftで利用できるようになるまで、最大で1日待つ必要があるかもしれません。
Pythonエージェントの更新
OpenShift はパッケージをキャッシュし、新しいバージョンの Python エージェントが利用可能になっても検出しません。新しいバージョンへのアップグレードを強制するには、 setup.py
またはrequirements.txt
ファイルのパッケージ名に対してバージョンを明示的にリストし、アプリケーションをプッシュします。次の構文を使用します。
newrelic==A.B.C.D
A.B.C.D
を、インストールする Python エージェントのバージョンに置き換えます。
Pythonエージェント環境変数の使用
Python エージェントがデータを正しいアカウントに報告するには、 New Relic アカウント用。 OpenShift の場合、ライセンス キーを提供する最も安全な方法は、 rhc env set
コマンドを使用してアプリケーション構成で構成された環境変数を使用することです。これにより、機密情報が GIT リポジトリに保存されるのを回避でき、複数の物理ホストでホストされているスケーリングされた Web アプリケーションを使用している場合にも機能します。
rhc env set NEW_RELIC_LICENSE_KEY=YOUR_LICENSE_KEY -a YOUR_APP_NAME
ライセンスキーを指定すると同時に、Pythonエージェントにログメッセージを記録する場所を伝えます。
rhc env set NEW_RELIC_LOG=stderr -a YOUR_APP_NAME
環境変数が設定されていることを確認するには、次のように実行します。
rhc env list -a YOUR_APP_NAME
設定されていても、次にウェブアプリケーションのギアを再起動したときにのみ有効になります。
エージェントインストールのテスト
Python エージェント パッケージが正しくインストールされ、エージェント環境変数が正しく設定されていることをテストするには、アプリケーションのメイン ギアにssh
して次のコマンドを実行します。
newrelic-admin validate-config - stdout
この管理用スクリプトは、お客様のアカウントにあるアプリケーション Python Agent Test の下で、接続を作成し、テストトランザクションデータを報告します。
データがUIに表示されるまでには、最大で5分かかることがあります。時間が経っても表示されない場合は、テストを実行した際の出力をキャプチャし、そのデータを使って問題を解決してください。さらにサポートが必要な場合は、 support.newrelic.com でサポートを受けてください。
Pythonエージェントの初期化
OpenShiftのPythonカートリッジは、WSGIアプリケーションを実行する2つの方法を提供しています。
- 最初の方法では、事前構成済みの Apache/mod_wsgi インストールを使用します。この場合、WSGI アプリケーションのエントリ ポイントを
wsgi.py
ファイルで定義する必要があります。 - 2 番目の方法では、
app.py
というスタンドアロンの Python ウェブ アプリケーション スクリプトを提供する必要があります。これは通常、app.py
ファイル内で指定されている WSGI アプリケーション エントリ ポイントを使用して組み込みの Python WSGI サーバーを起動するか、wsgi.py
ファイルなどの別の Python コード ファイルからインポートされます。
どちらの方法でも、OpenShift は WSGI サーバーの起動を制御します。Python エージェントを WSGI アプリケーションに手動で統合する必要があります。WSGI サーバーの起動時にnewrelic-admin
ラッパー スクリプトを使用することはできません。
Apache/mod_wsgi アプローチを使用している場合は、 wsgi.py
ファイルの先頭に次のコードを追加します。
import newrelic.agentnewrelic.agent.initialize()
これが、 wsgi.py
ファイルに表示される他の Python モジュール インポートよりも前にあることを確認してください。ライセンス キー情報とロギング先が環境変数から読み取られるため、 initialize()
呼び出しに引数を指定する必要はありません。
app.py
の組み込み Python WSGI サーバーを使用している場合は、 wsgi.py
ファイルから WSGI アプリケーション エントリ ポイントをインポートする場合でも、これらの行をapp.py
ファイルの一番上に配置してください。app.py
をwsgi.py
} とともに使用する場合、これらの行をwsgi.py
に追加しないでください。
任意のWebフレームワークの内蔵開発サーバーの使用は避けてください。また、OpenShift の Python 2.6 カートリッジや古い Django のバージョンも使用しないでください。これは、これらの開発サーバーが、Python標準ライブラリの wsgiref モジュールのWSGIサーバーをベースにしていることが多いからです。 wsgiref モジュールの WSGI サーバにはバグがあり、完全な WSGI 準拠ではないため、Python エージェントが正しくないデータを報告する原因となっていました。 wsgiref モジュールのこの問題は、Python 2.7.4 でのみ修正されました。Django 1.4 より前の古いバージョンの Django の組み込み WSGI サーバにも同様の問題がありました。
WSGIアプリケーションのラップ
エージェントがWSGIアプリケーションエントリーポイントの自動ラッピングを提供するPythonウェブフレームワークを使用している場合は、これだけで済みます。自動ラッピング機能を持つPythonのWebフレームワークには、Django、Flask、Bottleなどがあります。
その他の場合は、WSGIアプリケーションのエントリーポイントを持つPythonコードファイルを修正して、WSGIアプリケーションオブジェクトをWSGIアプリケーションラッパーでラップする必要があります。これにより、アプリケーションが受け取るWebリクエストのタイミングが開始されます。
エントリーポイント | コード例 |
---|---|
エンティポイントは関数 | それをデコレーションで包む。
|
エンティポイントとは、異なるモジュールからインポートされた関数やオブジェクトのことです。 | プレデコレーションスタイルで包む
|
アプリケーション名の上書き
デフォルトでは、データは Python Application というアプリ名で記録されます。表示名を変更するには、APM のユーザーインターフェースを使用します。ただし、エージェント側では、UI での表示名の変更とは別に、この表示名を一意の不変の値として維持することを強くお勧めします。これは、1つのNew Relicアカウントで複数の異なるサイトを運営し、データを別々に報告させたい場合に必要です。
アプリケーション名をオーバーライドするには、 rhc env set
コマンドを使用します:
rhc env set NEW_RELIC_APP_NAME='Web Site (Production)' -a yourappname
設定が更新されたことを確認するために、実行します。
rhc env list -a yourappname
そして、探してください。
NEW_RELIC_APP_NAME=Web Site (Production)
環境変数の変更は、次にWebアプリケーションのギアを再起動したときにのみ反映されます。
Pythonエージェントのデバッグ
デバッグを開始するには、Python エージェントからログ出力を収集します。NEW_RELIC_LOG
環境変数がstderr
に設定されている場合、Python エージェントからのログ メッセージは、標準の Python ウェブ アプリケーション ログ内にキャプチャされます。
OpenShiftでWebアプリケーションのログを尾行するには、次のように実行します。
rhc tail -a YOUR_APP_NAME
完全なログを得るためには、それぞれのウェブアプリケーションからログファイルをコピーバックしてください。
$OPENSHIFT_PYTHON_LOG_DIR/python.log
デフォルトでは、Python エージェントはinfo
レベルでログを記録します。エージェントが別のレベルのロギングを必要とする場合は、追加の環境変数を手動で追加する必要があります。たとえば、ロギング出力をdebug
に設定するには、次を実行します:
rhc env set NEW_RELIC_LOG_LEVEL=debug -a YOUR_APP_NAME
環境変数はすぐには反映されませんので、必ずWebアプリケーションのギアを再起動してください。
要求された場合にのみ、必要な時間だけdebug
ロギングを実行します。デバッグ ログは大量の出力を生成する可能性があり、ログ ファイルが肥大化します。この設定が不要になったらすぐに次のコマンドを実行して削除し、Web アプリケーションのギアを再起動します。
rhc env unset NEW_RELIC_LOG_LEVEL -a YOUR_APP_NAME
ログファイルを使用して、問題のトラブルシューティングを行ってください。さらにサポートが必要な場合は、 support.newrelic.com でサポートを受けてください。
エージェント設定ファイルの更新
OpenShift では、アカウントのライセンスキーを指定したり、ロギングの場所を定義したりするには、環境変数を使用するのが望ましい方法です。つまり、エージェントを動作させるためにエージェント設定ファイルを使用する必要はありません。しかし、エージェント設定ファイルがないと、 他のエージェント設定をカスタマイズすることができません。.
アプリケーションのサーバーサイド構成を有効にした場合、エージェント設定ファイルは必要ありません。これは、APM ユーザーインターフェースアプリケーションの Application settings から行われます。サーバーサイド構成を使用すると、エージェントのコア設定をオーバーライドできます。UIを介して設定が変更されると、各Webアプリケーションプロセス内で実行されているエージェントに通知され、変更された設定がピックアップされます。
ただし、エージェントの機能の中には、サーバーサイドの設定と互換性のないものもあります。このような場合には、Webアプリケーションと一緒にOpenShiftにプッシュアップされたエージェント設定ファイルを使用してください。
OpenShiftでエージェント構成ファイルを追加して有効にするには。
エージェント構成ファイルnewrelic.iniを、OpenShift にプッシュするプロジェクト リポジトリのルート ディレクトリに追加します。これには、設定する必要がある特定の構成設定とともに
[newrelic]
セクションが含まれている必要があります。例えば:[newrelic]transaction_tracer.function_trace = mydbm:connectライセンスキーやアプリ名などのコアな設定にエージェントの設定ファイルを使用しないでください、環境変数の設定が上書きされてしまいます。また、特にプロジェクトのソースコードが公開されている場合は、ライセンスキーをGITリポジトリの一部として使用しないようにしてください。
また、サーバーサイドコンフィグレーションが同時に有効になっている場合、サーバーサイドコンフィグレーションで設定可能な設定は常にローカルの設定よりも優先されますのでご注意ください。そのため、サーバーサイドコンフィグレーションを有効にしている場合は、サーバーサイドコンフィグレーションで設定できない設定にのみ使用してください。
コードを追加した
wsgi.py
またはapp.py
ファイルを変更して、Python エージェントを初期化します。すでに追加したコードを次のように変更します。import osimport newrelic.agentrepo_dir = os.environ['OPENSHIFT_REPO_DIR']config_file = os.path.join(repo_dir, 'newrelic.ini')newrelic.agent.initialize(config_file)設定ファイルをリポジトリにコミットし、その変更をOpenShiftにプッシュします。