Djangoのプロジェクトにヘルスチェック用のエンドポイントを提供するdjango-health-check

ウェブアプリの外形監視をするときには、外形監視用のエンドポイントURLを用意することが多いと思います。

外形監視用のエンドポイントでは、アプリからデータベースなど各種ミドルウェアへの接続が正常であるかなどをチェックしますが、チェック項目はサービスによって異なることがほとんどです。

django-health-checkを使うと、汎用の外形監視用のエンドポイントをすぐに用意でき、設定によりチェック項目を変更できます。

django-health-check · PyPI

インストール

pip install django-health-check

試してみる

今回は health_check.db を使って、データベース接続のチェックを実施してみます。

アプリの有効化とURL追加

settings.py:

INSTALLED_APPS = [
    # ...
    'health_check',  # 必須
    'health_check.db',  # データベースのチェックをする場合に追加
]

urls.py:

from django.urls import path, include

urlpatterns = [
    # ...
    path('ht/', include('health_check.urls')),
]

DBマイグレーション

health_check.db はチェック用のテーブルを作成して操作するので、アプリを INSTALLED_APPS に追加したら、 migrate を実行します。

python manage.py migrate

実行する

runserverを起動して、 /ht/ にアクセスすると、チェック結果が表示されます。

デフォルトではHTMLで表示されます。

?format=json のようにクエリ文字列を指定すると、結果をJSON形式で返すこともできます。

何をチェックしているのか

health_check.db は実際にどのような操作をしてチェックしているのか、ソースコードを確認してみます。

https://github.com/revsys/django-health-check/blob/master/health_check/db/backends.py

  • TestModelというモデルのレコードを1件作成(=INSERT)
    • obj.save()
  • 作成したレコードを削除(=DELETE)
    • obj.delete()

このようなコードでした。「データベースに接続できること」「データベースに書き込みができること」をチェックしていますね。

データベース以外にもcache, storage, celery, boto, rabbitmq, redisなど、標準で用意されているバックエンドがあります。

カスタムのバックエンドを作成するのも簡単なので、使いやすそうです。