• ログイン

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

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

問題を作成する

PythonエージェントとHeroku

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にプッシュすると、そのファイルに記載されているものがインストールされます。

  1. requirements.txt ファイルを作成または編集し、以下の行を追加します。

    newrelic
  2. Djangoユーザー: ProcfileのWebエントリを変更し、値の前にnewrelic-admin run-programを付けます。例えば:

    web: newrelic-admin run-program gunicorn mysite.wsgi
  3. プロジェクトをHerokuにアップロードします。

これにより、Python Package Index(PyPi)に掲載されている最新バージョンのPythonエージェントパッケージがインストールされます。

Pythonエージェントの更新

Herokuはパッケージをキャッシュしており、Pythonエージェントの新しいバージョンが利用可能になっても検出されません。強制的にアップグレードするには

  1. パッケージ名に特定のPythonエージェントバージョン( n.n.n.n )を含めて、 requirements.txtファイルを編集します。

    newrelic==n.n.n.n
  2. プロジェクトをHerokuにアップロードします。

New Relic アドオンの検証

New Relicアドオンが有効になったことを確認するために、実行します。

heroku run env | grep NEW_RELIC

これにより、Heroku の New Relic 固有の環境変数のリストが生成されます。Python エージェントはこれらを使用して、レポートデータに使用する New Relic アカウントとアプリケーションデータを決定します。

最低限、見ておくべきです。

NEW_RELIC_LOG=stdout
NEW_RELIC_LICENSE_KEY=0000000000000000000000000000000000000000
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エージェントを初期化するために

  1. プロジェクトのルートから、 プロセスファイル を探します。
  2. Procfilewebエントリを変更して、PythonWebアプリケーションを起動するために何をするかを定義します。
  3. コマンドの先頭にnewrelic-admin run-programを挿入するには、次の例を参照してください。
  4. Pythonエージェントのadminスクリプトの制御下でPythonウェブアプリケーションを実行します。

ホスティングの仕組み

Webエントリーの例

Flaskに組み込まれた開発ホスト

web: newrelic-admin run-program python hello.py

グニッション付きフラスコ

web: newrelic-admin run-program gunicorn -b "0.0.0.0:$PORT" -w 3 hello:app

に記載されているgunicornを使用したDjango INSTALLED_APPS

web: newrelic-admin run-program python hellodjango/manage.py run_gunicorn -b "0.0.0.0:$PORT" -w 3

注意

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リクエストのタイミングが開始されます。

入り口がこれでは...。

これを行う...

エントリーポイントは関数

それをデコレーションで包む。

import newrelic.agent
@newrelic.agent.wsgi_application()
def application(environ, start_response):
...

エントリーポイントとは、異なるモジュールからインポートされた関数やオブジェクトのことです。

preデコレータスタイルでラップします。

import myapp
application = myapp.WSGIHandler()
application = newrelic.agent.WSGIApplicationWrapper(application)

セロリのタスクを追跡する

Celeryタスクの実行時間をWebアプリケーションに対するバックグラウンドタスクとして記録するには、Celeryホストの起動をnewrelic-adminコマンドでラップします。

Procfileworkerエントリで定義されている既存のスタートアップコマンドのプレフィックスを付けます。

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エージェント設定ファイルを使用します。

  1. newrelic.iniエージェント構成ファイルをHerokuにプッシュするプロジェクトリポジトリのルートディレクトリに追加します[newrelic]セクションに特定の構成設定を含めます。例えば:

    [newrelic]
    transaction_tracer.function_trace = mydbm:connect
  2. 設定ファイルをリポジトリにコミットし、その変更をHerokuにプッシュします。

  3. heroku config:addコマンドを使用して、デプロイされたアプリケーションのNEW_RELIC_CONFIG_FILE環境変数を設定します。

    heroku config:add NEW_RELIC_CONFIG_FILE=newrelic.ini

WSGIホストの起動に newrelic-admin ラッパープログラムを使用している場合、ライセンスキーやアプリケーション名などの設定は、Herokuが設定した環境変数から取得されます。また、エージェントの設定ファイルで設定した追加設定も適用されます。その後、エージェントがNew Relicに登録する際に、サーバー側の設定もマージされ、エージェントが使用する最終的な設定が作成されます。

Copyright © 2022 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.