• ログイン今すぐ開始

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

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

問題を作成する

PythonエージェントとOpenShift

OpenShift は、Pythonエージェントを含む様々な言語を使用したウェブアプリケーションをホスティングすることができるPaaS(Platform as a Service)ソリューションです。

アプリケーションの準備

Python エージェントをインストールする前に、利用可能な Python カートリッジのいずれかを使用して、Python Web アプリケーションが OpenShift の下にインストールされ、実行されていることを確認してください。詳細は、 OpenShift developer guides を参照してください。

APM Pythonエージェントのインストール

OpenShift は、サードパーティの Python パッケージをインストールする 2 つの異なる方法をサポートしています。ウェブアプリケーションの setup.py に依存関係としてパッケージをリストアップするか、 pip で使用される requirements.txt ファイルにパッケージをリストアップすることができます。

setup.py ファイルを使用している場合、 newrelicinstall_requires に渡されるサードパーティモジュールのリストに追加して、エージェントをインストールします。

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 リポジトリに機密情報を保存することがなく、また、複数の物理ホストでホストされているスケールの大きいウェブアプリケーションを使用している場合にも有効です。

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つの方法を提供しています。

  • 1つ目の方法は、事前に設定されたApache/mod_wsgiのインストールを使用します。この場合、WSGIアプリケーションのエントリーポイントは、 wsgi.py ファイルで定義する必要があります。
  • 2つ目の方法は、 app.py というスタンドアロンのPythonウェブアプリケーションスクリプトを提供することに依存しています。これは通常、組み込みのPython WSGIサーバーを起動します。WSGIアプリケーションのエントリーポイントは、 app.py ファイル内で指定されるか、 wsgi.py ファイルのような、別のPythonコードファイルからインポートされます。

いずれの方法でも、OpenShift は WSGI サーバーの起動を制御します。Python エージェントを WSGI アプリケーションに手動で統合する必要があります。WSGIサーバーの起動時に、 newrelic-admin のラッパースクリプトを使用することはできません。

Apache/mod_wsgiアプローチを使用している場合は、 wsgi.py ファイルの一番最初に以下のコードを追加してください。

import newrelic.agent
newrelic.agent.initialize()

wsgi.py ファイルの中で、他のPythonモジュールのインポートの前にあることを確認してください。 initialize() 呼び出しに引数を与える必要はありません。なぜなら、ライセンスキー情報とログの保存先は、環境変数から読み込まれるからです。

app.py から組み込まれたPython WSGIサーバーを使用している場合、 app.py ファイルの一番上にこれらの行を配置します。たとえ、WSGIアプリケーションのエントリーポイントを wsgi.py ファイルからインポートしている場合でも同様です。 app.pywsgi.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リクエストのタイミングが開始されます。

エントリーポイント

コード例

エンティポイントは関数

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

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

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

プレデコレーションスタイルで包む

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

アプリケーション名の上書き

デフォルトでは、データは 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でエージェント構成ファイルを追加して有効にするには。

  1. エージェント設定ファイル newrelic.ini を、OpenShift にプッシュアップするプロジェクトリポジトリのルートディレクトリに追加します。このファイルには、 [newrelic] セクションと、設定する必要のある特定の構成設定だけが含まれているはずです。例えば、以下のようになります。

    [newrelic]
    transaction_tracer.function_trace = mydbm:connect

    ライセンスキーやアプリ名などのコアな設定にエージェントの設定ファイルを使用しないでください、環境変数の設定が上書きされてしまいます。また、特にプロジェクトのソースコードが公開されている場合は、ライセンスキーをGITリポジトリの一部として使用しないようにしてください。

    また、サーバーサイドコンフィグレーションが同時に有効になっている場合、サーバーサイドコンフィグレーションで設定可能な設定は常にローカルの設定よりも優先されますのでご注意ください。そのため、サーバーサイドコンフィグレーションを有効にしている場合は、サーバーサイドコンフィグレーションで設定できない設定にのみ使用してください。

  2. 次に,Python エージェントを初期化するコードを追加した wsgi.py または app.py ファイルを修正します。すでに追加していたコードを変更します。

    import os
    import newrelic.agent
    repo_dir = os.environ['OPENSHIFT_REPO_DIR']
    config_file = os.path.join(repo_dir, 'newrelic.ini')
    newrelic.agent.initialize(config_file)
  3. 設定ファイルをリポジトリにコミットし、その変更をOpenShiftにプッシュします。

Copyright © 2022 New Relic株式会社。

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