技術   DjangoNew Relic

New Relic の APM を Django + Docker で試してみた話

New Relic とは

New Relic とは、サイトパフォーマンスを監視・分析するサービスで、リアルタイムに Web サイトの処理状況を監視・集計した統計情報を手軽に可視化できるようになります。実際に運用している Web サイトに導入したわけではないので、深い所感は言えませんが導入するとどこがボトルネックになっているかとかわかって Web サイトの改善が良い感じに出来そうな感じ。

APM

今回使用したのは、New Relic の APM という製品で、どういう製品なのかは下記引用の通りです。

日商エレクトロニクス株式会社の Web サイトより抜粋

アプリケーションコードやデータベースクエリのトランザクションレベルの処理時間、スループット、エラー状況を可視化します。性能劣化時にアプリケーションの何処にボトルネックがあるかを容易に分析し、性能改善することができます。Java, .NET, Ruby, PHP, Python, Node.js, Go の各言語に対応するエージェントが用意されており、アプリケーション・サーバーにエージェントをデプロイするだけで、自動的にデータを収集、可視化できます。アプリケーション単体だけでなく、マイクロサービスなど複雑化する各アプリケーション間のトポロジーを自動的にディスカバリーし相関分析することができます。

とにかくまずは登録しないと何も始まらないので、New Relic にアカウント登録します。

アカウント登録

  1. New Relic のアカウント登録フォームから新規登録します。
    クレジットカード情報の入力はありません。
  2. New Relic にログインします。
    新規登録が完了するとメールが届くはずなので、そこから遷移すると良いです。
  3. 設定を変更します。
    と言っても、とりあえずはタイムゾーンを変更するだけです。
    New Relic の管理画面から、User preferences のページに進み、Time zone の項目を Tokyo に変更します。

ちなみに、今回は特に何かに使用しませんが、アカウント ID というものがあり、New Relic 管理画面 URL の accounts の直後に続く数値のことです。

目次へ戻る

APM を Django + Docker を使用して試す

運用している Web サイトにいきなり導入するわけにはいかないので、とりあえずどんなものなのかを確認したいだけなので、Django と Docker を使用して New Relic の管理画面から閲覧できるようになるまで試してみます。

Django を使用するので、New Relic の管理画面にて AMP ページから Python を選択します。選択すると手順が表示されるのでその手順に沿って進めます。

  1. Get your license key
    表示されるボタンを押下するとライセンスキーが表示されます。後ほど使用します。
  2. Install the New Relic Python agent
    pip install newrelic コマンドでインストールしろと表示されますが、今回は docker を使用するので、Django の requirements.txt に newrelic の最新バージョン(2018年10月30日現在の最新バージョンは 4.4.1.104)を追記します。
    newrelic==4.4.1.104
    ちなみに pip で直接サーバー等にインストールする場合、下記の通りコマンドを実行します。
    $ pip install newrelic
    Collecting newrelic
      Downloading https://files.pythonhosted.org/packages/35/47/c6242bcbf69df26857211f408bd9ee0359acb258159cffd8dc99e9e41bab/newrelic-4.4.1.104.tar.gz (745kB)
        100% |████████████████████████████████| 747kB 3.6MB/s
    Installing collected packages: newrelic
      Running setup.py install for newrelic ... done
    Successfully installed newrelic-4.4.1.104
  3. Generate the configuration using your license key
    1で取得したライセンスキーを使用して、New Relic の設定ファイルを生成します。docker コンテナ内に直接生成しても良いし、一旦ローカルに生成してコンテナ内にコピペしても良い。Django から参照出来れば方法は問わないです。
    # docker コンテナ内に生成する場合
    $ docker-compose run --rm <コンテナ名> newrelic-admin generate-config <ライセンスキー> <newrelic.ini ファイルのパス>
    
    # その場に生成する場合
    $ newrelic-admin generate-config <ライセンスキー> <newrelic.ini ファイルのパス>
  4. docker-compose ファイルの設定をします。
    docker-compose.yml ファイルを下記の通り変更します。
    今回は手っ取り早く runserver で実行しましたが、run-program コマンドを使用すれば gunicorn 等のコマンドの実行とかも可能みたい。
    command: newrelic-admin run-program python manage.py runserver 0.0.0.0:8000
    environment:
      NEW_RELIC_CONFIG_FILE: <newrelic.ini ファイルのパス>
  5. Django の wsgi.py ファイルを変更します。 Django の wsgi.py ファイルを下記の通り変更します。
    import os
    import newrelic.agent
    
    from django.core.wsgi import get_wsgi_application
    
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<アプリケーション名>.settings")
    newrelic.agent.initialize("<newrelic.ini ファイルのパス>")
    
    application = get_wsgi_application()
    application = newrelic.agent.wsgi_application()(application)
  6. docker を起動して、newrelic の管理画面を確認します。
  7. おまけ
    とりあえず、動作を確認したいだけなら生成された設定ファイルを特に変更する必要はないですが、どこか変更した場合は、下記コマンドを実行してチェックします。
    $ newrelic-admin validate-config <newrelic.ini ファイルのパス>
    
    Running Python agent test.
    
    Any significant errors in performing the test will be shown below. If no
    errors occurred in the execution of this script and data is still not
    reporting through to the UI against the application:
    
      Python Agent Test
    
    after 5 minutes then check the log file:
    
      /tmp/python-agent-test.log
    
    for debugging information. Supply the log file to New Relic support if
    requesting help with resolving any issues with the test not reporting
    data to the New Relic UI.
    
    Registration successful. Reporting to:
    
      https://rpm.newrelic.com/accounts/<アカウント ID>/applications/194578100
目次へ戻る

終わりに

New Relic のことをまだあまり理解出来てはいませんが、導入自体は比較的簡単に出来ました。サーバー監視会社に依頼する前に一度導入を検討しても良いかもしれません。今後、本番運用している Web サイトに導入する機会があれば、また記事を追記または作成したいと思います。

目次へ戻る