ScoutAPMでDjangoアプリのパフォーマンス改善
この投稿では、SQLクエリのパフォーマンス、外部HTTPコール、テンプレートのレンダリング、Django CMSのアプリであるWagtailの詳細をモニタリングするためのScoutの設定方法を紹介していきます。
WagtailはDjangoを使った、現代的なオープンソースコンテンツ管理システムです。NASA、Google、MITなどで用いられており、自身のコンテンツ管理システムを運営するにはもってこいのものです。scout-apm
のパッケージをアプリに追加すると、すぐにアプリのパフォーマンスに関する洞察を得ることができます。
まずは基本的なパフォーマンスモニタリングの設定から始め、それからScoutを最大限活用するための詳細な設定に移っていきたいと思います。
Setup
Scoutはscout-apm
というパッケージを通じて分配されており、設定には数行のコードが必要なだけです。設定が完了すると、Scoutが自動的にDjangoアプリケーションのWebリクエスト、例えばSQLクエリ、レンダリングなどを追跡します。
Scoutのアカウントを持っていない場合、14日間無料でお試し登録することができます。登録後、私たちのDjangoインストールインストラクションに従ってください。
Wagtailでは特定の環境ごとの設定ファイルが使われます。Scoutの設定には以下の方法に従うことをお勧めします。
bakerydemo /settings/base.py
- “scout_apm.django”をINSTALLED_APPSというリストの一番上に追加してください。
- 異なる環境下の初期設定のいくつかを設定してください(モニタリングを有効にし、アプリケーションの名前をセットします)
# Scout settings SCOUT_MONITOR = True SCOUT_NAME = WAGTAIL_SITE_NAME SCOUT_KEY = "SCOUT_KEY" # Grab your key from the Scout UI
dev and prod environments
Scoutはアプリケーション名毎にメトリクスを集計します。開発環境は本番環境と大きく異なる場合が多いため、環境に応じてアプリを分離させることをオススメします。(Scoutではいくつアプリを作成しても、料金は変わりません。)
Loading the SCOUT_KEY from environment variables
もしあなたが自身のAPIキーをバージョン管理の外に置いておきたい場合、SCOUT_KEY
の環境変数を代わりに設定することができます。Scoutのエージェントはこの環境変数を使いますので、混乱を防ぐためにbase.py
からSCOUT_KEY
取り除いてください。
Restart your app.
以上になります!python manage.py runserver
で、アプリを起動し、アプリにいくつかリクエストを送ってください。それから、アプリケーションのデータがScoutに現れたかどうか確認してください。
Overview
アプリを再起動した後、最初にScoutで確認するページがOverviewページになると思います。
Scoutでは自動的にSQL、View、レンダリングのパフォーマンスを計測します。
Scoutの「Web Endpoints」からエンドポイントのリストからパフォーマンス問題を探すこともできます。
そして、特定のエンドポイントのパフォーマンスについて詳しく見ていきます。
GitHub Integration
ScoutはGitHubとの連携することで、遅いメソッドのソースコードへとすぐに導くことができます。GitHubとの連携は、”Settings”から「Integration」の下にある「GitHub」から行うことができます。
GitHubのOAuth画面を通じてScoutを認証してください。いったん認証されると、下記画像のように、遅いメソッドのソースコードをTrace上で見ることができます。
Deploy Tracking
アプリケーションに変更を追加することで、パフォーマンス問題を引き起こす可能性があります。Deploy Trackingを活用することで、パフォーマンスの変化をコードの変化と紐付けやすくなります。
今回ははWagtailアプリをデプロイするのにHerokuを使っているので、Dyno metaを有効にするだけで、設定は完了です。
heroku labs:enable runtime-dyno-metadata
以下の画像のように、デプロイのマークを確認することができます。
GitHubと連携することで、deploy trackingを更に有効なものにすることができます。デプロイマーク上に、マウスオーバーすると、前のdeployとのdiffの要約を表示し、リンクをリックすることでGithub上で、実際にソースコードのdiffを確認することができます。
Error Monitoring
Scout自体ではエラーモニタリングを提供しておりませんが、Rollbar・Sentryのようなエラーモニタリングと簡単に連携することが。”Settings”でRollbar integrationを有効にすることができます。
Integrationを追加後、Overviewページの下エラーが表示されるようになります。この機能により、パフォーマンスとエラー両方をScoutから確認することができるようになります。
Alerting
アプリケーションのパフォーマンスが低下したとき、Email・WebhookでScoutから通知を送ることができます。今回は”95th percentile response time”のEmailでアラートを送る設定をしたいと思います。
Context & Trace Explorer
多くのパフォーマンスに関する問題は、ユーザー全員に起こるとは限りません。つまり、それらはある特定の状況で起こるということです。例えば、大量のデータにアクセスしているパワーユーザーはレスポンスタイムが遅くなることに巻き込まれがちです。時々、このようなパフォーマンス問題はオーバービューページから見つけられないことがあります。
Scoutにはcontext APIがあります。これを使うことで、Scoutのユーザーは、リクエストに関するメタデータを送ることができます。リクエストとして送られたクエリパラメータの検索キーワードとWagtailで見つかった検索結果の数をCustom Contextとして追加して見ます。
そして、ScoutのTrace Explorerで、リアルタイムにフィルターをかけて、特定の検索キーワードがContextとして追加されているのTraceを探すことができます。
Custom Instrumentation
Scoutは有名・人気なLibraryについては、自動的に計測しますが、あなたが書いたカスタムコードはViewなどの大きな括りで表示されます。特定のメソッド・ブロックなどを計測したいという場合は、Custom Instrumentation.を使います。
検索結果のページネーションのあたりにCustom Instrumentationを追加してみます。
下の画像のように、Traceから今追加した、ブロック(‘Custom.pagination’)が確認できます!
What's Next
もしご興味ありましたら、support@scoutapm.comまでご連絡ください。
ここまで、閲読頂きありがとうございます!犬のイラストをクリックしていただきますと、無料でScout関連商品をお届けします!