はじめに
この記事は、Django Advent Calendar 2017 11日目の記事です。
silkとは
Silk is a live profiling and inspection tool for the Django framework. Silk intercepts and stores HTTP requests and database queries before presenting them in a user interface for further inspection:
Request/ResponseのログとSQLクエリのログ、cProfileでのプロファイリングを記録してくれるやつです。
AWESOME DJANGOの「Debugging」の項目にも載ってますね。
今年のEuroPythoでもsilkを紹介しているトークがありました。
silkのいいところ
- django-debug-toolbarではできないAjaxでの非同期リクエストが計測可能
- Dashboardから誰でも確認できる(閲覧権限も設定可能)
- 計測結果はDBに保存されている
-
/health
へのRequestはログから除外するなどの設定が柔軟にできる - DBに保存したやつをリセットするコマンド(
python manage.py silk_clear_request_log
)が便利
Dashboardはこんな感じです。
おわりに
このsilkには、Django REST frameworkを使ったSPAなアプリケーションで、N+1クエリを撲滅するときにお世話になってます。
この手のツールではdjango-debug-toolbarが有名ですが、Ajaxリクエストに対応できなかったり、toolbarをぽちぽちクリックするのが面倒だったりするので、そんな時にはsilkを試してみるのがおすすめです。