Herokuは、Pythonを含むさまざまなエージェント言語でWebアプリケーションをホストするためのPlatform as a Service(PaaS)ソリューションです。エージェントを使用すると、NewRelicのメトリックを使用してHerokuを拡張できます。
このドキュメントでは、PythonエージェントでHerokuをホスティングサービスとして使用する際の特別な考慮事項について説明します。
New Relicアドオンのインストール
PythonアプリをHerokuにデプロイした後、Pythonエージェントをインストールします。
アドオンをインストールすると、New Relicのプライベートアカウントが自動的に作成され、Herokuホストへのアクセスが設定されます。エージェントは、アドオンのインストール後に収集されたアプリケーションのパフォーマンス、エンドユーザーエクスペリエンス、およびホストのパフォーマンスの監視を開始します。数分後には、データが APM Summary ページ に表示され始めます。
既存のエージェント・インストールからのアップグレード
エージェントがすでにインストールされている場合は、Heroku toolbeltコマンドを使用してアドオンを再インストールします。
$heroku config:set NEW_RELIC_APP_NAME='Your Application Name'
Pythonエージェントをインストール。
当社のPythonエージェントのようなサードパーティのPythonパッケージをHerokuにインストールするには、 pip を使用します。Heroku は、プロジェクトのルートディレクトリに requirements.txt というファイルを自動的に探します。プロジェクトをHerokuにプッシュすると、そのファイルに記載されているものがインストールされます。
requirements.txt
ファイルを作成または編集して、次の行を追加します。newrelicDjango ユーザー:
Procfile
のweb
エントリを変更し、値の先頭にnewrelic-admin run-program
を付けます。例えば:web: newrelic-admin run-program gunicorn mysite.wsgiプロジェクトをHerokuにアップロードします。
これにより、Python Package Index(PyPi)に掲載されている最新バージョンのPythonエージェントパッケージがインストールされます。
Pythonエージェントの更新
Herokuはパッケージをキャッシュしており、Pythonエージェントの新しいバージョンが利用可能になっても検出されません。強制的にアップグレードするには
特定の Python エージェント バージョン (
n.n.n.n
) とパッケージ名を含めて、requirements.txt
ファイルを編集します。newrelic==n.n.n.nプロジェクトをHerokuにアップロードします。
New Relic アドオンの検証
New Relicアドオンが有効になったことを確認するために、実行します。
$heroku run env | grep NEW_RELIC
これにより、Heroku の New Relic 固有の環境変数のリストが生成されます。Python エージェントはこれらを使用して、レポートデータに使用する New Relic アカウントとアプリケーションデータを決定します。
最低限、見ておくべきです。
NEW_RELIC_LOG=stdoutNEW_RELIC_LICENSE_KEY=****************************************NEW_RELIC_APP_NAME=Your app name
の New Relic アカウントに固有のものです。
インストレーションのトラブルシューティング
エージェントをインストールして設定してから数分以内に、アプリケーションの APM Summary ページ にデータが表示されるようになります。データが表示されない場合は、環境変数が正しく検出されているかどうかをテストします。
$heroku run newrelic-admin validate-config - stdout
これにより、接続が作成され、アプリケーション Python Agent Test の下でテスト・トランザクション・データが報告されます。テストの実行による出力をキャプチャし、そのデータを使用して問題のトラブルシューティングを行います。さらにサポートが必要な場合は、 Python agent troubleshooting procedures に従ってください。
Pythonエージェントの初期化
Pythonエージェントを初期化するために
- プロジェクトのルートから、
Procfile
Procfile
のweb
エントリを変更して、Python Web アプリケーションの起動方法を定義します。- コマンドの先頭に
newrelic-admin run-program
を挿入するには、次の例を参照してください。 - Pythonエージェントのadminスクリプトの制御下でPythonウェブアプリケーションを実行します。
ホスティングの仕組み | Webエントリーの例 |
---|---|
Flaskに組み込まれた開発ホスト |
|
グニッション付きフラスコ |
|
に記載されているgunicornを使用したDjango |
|
注意
Python バージョン 2.7.4 以前や Django 1.4 以前の Web フレームワークのビルトイン開発ホストの使用は避けてください。代わりに gunicorn または uWSGI を使ってください。
wsgiref モジュールを使用する WSGI ホストは、Python バージョン 2.7.4 以前の開発ホストでは完全に WSGI に準拠していませんでした。これにより、Pythonエージェントが正しいデータを報告することができませんでした。
WSGIアプリケーションラッピング
エージェントは、これらのWebフレームワーク用のWSGIアプリケーションポイントの自動ラッピングを提供します。
- Bottle
- Django
- Flask
これらのPythonウェブフレームワークのいずれかを使用している場合、追加の手順は必要ありません。
その他の場合は、WSGIアプリケーションのエントリーポイントを持つPythonコードファイルを修正して、WSGIアプリケーションオブジェクトをWSGIアプリケーションラッパーでラップする必要があります。これにより、アプリケーションが受け取るWebリクエストのタイミングが開始されます。
入り口がこれでは...。 | これを行う... |
---|---|
エントリーポイントは関数 | それをデコレーションで包む。
|
エントリーポイントとは、異なるモジュールからインポートされた関数やオブジェクトのことです。 |
|
セロリのタスクを追跡する
Celeryタスクの実行時間をWebアプリケーションに対するバックグラウンドタスクとして記録するには、Celeryホストの起動をnewrelic-admin
コマンドでラップします。
Procfile
の worker
エントリで定義された既存の起動コマンドにプレフィックスを付けます。
worker: newrelic-admin run-program python hellodjango/manage.py celeryd -E -B --loglevel=INFO
Pythonエージェントのデバッグ
デバッグを開始するには、Pythonエージェントからのログ出力を収集します。HerokuはPythonエージェントの出力を標準出力に送り、Webサーバーのログにキャプチャーします。
Herokuのウェブサーバーのログにアクセスするには、次のように実行します。
$heroku logs
デフォルトでは、Pythonエージェントはinfo
レベルでログに記録します。 New Relic Supportが代替レベルのロギングを要求する場合は、手動で構成変数を追加する必要があります。たとえば、ログ出力をdebug
に設定するには、次のコマンドを実行します。
$heroku config:add NEW_RELIC_LOG_LEVEL=debug
ログレベルを変更すると、アプリケーションは自動的に再起動します。
注意
debug
ログレベルは大量の出力を生成します。次のコマンドを実行して、この設定が不要になったらすぐに削除してください。
$heroku config:remove NEW_RELIC_LOG_LEVEL
エージェント設定ファイルの編集
Heroku のアドオンと New Relic を併用する場合、Python エージェントの主要な環境変数が自動的に設定されます。また、エージェントの設定ファイルで追加の設定をカスタマイズすることもできますし、 サーバーサイドの設定 を使用することもできます。
ライセンスキーやアプリケーション名などのコアな設定は設定ファイルに追加しないでください。Herokuはこれらの設定を自動的に追加します。
その他の設定をカスタマイズするには、HerokuのPythonエージェント設定ファイルを使用します。
Heroku にプッシュしているプロジェクト リポジトリのルート ディレクトリに
newrelic.ini
エージェント構成ファイルを追加します。[newrelic]
セクションに、特定の構成設定を含めます。例えば:[newrelic]transaction_tracer.function_trace = mydbm:connect設定ファイルをリポジトリにコミットし、その変更をHerokuにプッシュします。
heroku config:add
コマンドを使用して、デプロイされたアプリケーションのNEW_RELIC_CONFIG_FILE
環境変数を設定します。bash$heroku config:add NEW_RELIC_CONFIG_FILE=newrelic.ini
WSGIホストの起動に newrelic-admin ラッパープログラムを使用している場合、ライセンスキーやアプリケーション名などの設定は、Herokuが設定した環境変数から取得されます。また、エージェントの設定ファイルで設定した追加設定も適用されます。その後、エージェントがNew Relicに登録する際に、サーバー側の設定もマージされ、エージェントが使用する最終的な設定が作成されます。