はじめに
New RelicのAPMでPythonアプリを監視してみます。Pythonはフレームワークが多種多様で、Webでの公開手法も幅が広いのですが、まずはなるべくシンプルな形でNew RelicとPythonアプリの連携方法をご紹介したいと思います。今回はFlaskで作った単純なアプリにNew Relicのコードを埋め込んで監視画面に表示させるまでの流れを確認します。
環境
CentOS 7
Python 2.7.5(default)
New Relicのアカウントがあることが前提です。LICENSE-KEYは適宜読み替えてください。
New Relic APMのセットアップ
Python Agentのインストール
公式の手順に沿ってインストールします。
私の環境の例。若干古いので最新版はこちら。
# wget https://download.newrelic.com/python_agent/release/newrelic-2.8.0.7.tar.gz
# tar xvzf newrelic-2.8.0.7.tar.gz
# cd newrelic-2.8.0.7
# python setup.py install
ちょっと試すだけならこちらが楽です。あまり手間は変わらないかもしれませんね・・・。
pip install newrelic
or
easy_install newrelic
コンフィグ(newrelic.ini)生成
任意の場所で以下のコマンドを実行するとコンフィグができます。コンフィグファイルは移動しても問題ありません。
newrelic-admin generate-config LICENSE-KEY newrelic.ini
コンフィグの修正
コンフィグの中身を修正します。アプリ名を"New Relic Hello!"に変えてみました。これはNew Relicの画面上でのアプリ名になります。コメントを外してlogが出力できるようにしました。修正したポイントのみ以下に抜粋します。
app_name = New Relic Hello!
log_file = /tmp/newrelic-python-agent.log
Python Agentの動作確認
以下のコマンドでPython Agentが実行可能かどうかを確認します。
newrelic-admin validate-config newrelic.ini
数秒後、APMの画面に"Python Agent Test"という名前で表示されます。何回実行しても問題ありません。今後の過程でトラブルシュートの切り分けに使えます。
Flaskのセットアップ
Flaskのインストール(参照)
# easy_install Flask
アプリ作成
New Relic Hello!と表示するだけのアプリ。
# cat flask_hello.py
import newrelic.agent
newrelic.agent.initialize('/root/newrelic-2.8.0.7/newrelic.ini')
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "New Relic Hello!"
if __name__ == '__main__':
app.run(host='0.0.0.0')
#
上の2行がNew Relic用の埋め込みコードです。newrelic.iniの場所を指定します。
import newrelic.agent
newrelic.agent.initialize('/root/newrelic-2.8.0.7/newrelic.ini')
動作確認
ターミナルを二つ開きます。
ターミナル1
以下を実行します。"0.0.0.0"はこのネットワークのこのホストを表す特殊なIPアドレスです。コード上でポート番号を指定しないと実行時に5000番であがります。
# python flask_hello.py
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
ターミナル2
以下を実行。127.0.0.1ではなく自サーバのアドレスを指定してもOK。
# curl http://127.0.0.1:5000
New Relic Hello!
watchコマンドで1秒おきのアクセスを見立てることができます。
watch -n 1 "curl http://127.0.0.1:5000"
開発環境であればアプリの実行をsupevisorでデーモン化してみるのもよいかもしれません。あるいはApacheやNginxと連携させるか。手間との相談といったところです。
New Relicの画面
"New Relic Hello!"であがってきました。
New Relic hello!だけを表示するアプリですが、関数名やWSGIの情報なんかも見えることがわかります。
以上