監視入門を読んでいて、Health エンドポイントパターン
というパターンが気になり、Django で Health チェックを実施するプラグインがないか確認したところ、KristianOellegaard/django-health-check: a pluggable app that runs a full check on the deployment, using a number of plugins to check e.g. database, queue server, celery processes, etc. を見つけました。
データベース監視、Cache の監視など一通り実施できそうでしたので、試しにインストールしてみました。
インストール手順と、実施したことについて記載します。
前提
OS と Python、Django の Versionを記載します。
-
OS
# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)
-
Python
# python -V Python 3.6.7
-
Django
# pip list | grep Django Django 1.11.20
インストールと、設定
django-health-check
の設定、動作確認まで実施します。
-
インストール
# pip install django-health-check ------------------ Collecting django-health-check Downloading django_health_check-3.12.1-py2.py3-none-any.whl (25 kB) Requirement already satisfied: django>=1.11 in .venv/lib/python3.6/site-packages (from django-health-check) (1.11.20) Requirement already satisfied: pytz in .venv/lib/python3.6/site-packages (from django>=1.11->django-health-check) (2019.1) Installing collected packages: django-health-check Successfully installed django-health-check-3.12.1
-
urls.py の変更
ヘルスチェックURLをurls.py
に追記します。
urlpatterns += [ # healthcheck url(r'^health/', include('health_check.urls')), ]
-
settings.py の変更
settings.py
にアプリケーションを追加します。
django-health-check
は複数のアプリケーションに分かれていて、チェック対象のミドルウェアをアプリケーション単位で選択する形式になります。
INSTALLED_APPS = ( ... 'health_check', # required #'health_check.db', # stock Django health checkers DBに保持しないのでコメントアウト 'health_check.cache', 'health_check.storage', #'health_check.contrib.celery', # requires celery celeryは使用していない 'health_check.contrib.psutil', # disk and memory utilization; requires psutil DiskとMemoryの状況は確認したい #'health_check.contrib.s3boto3_storage', # requires boto3 and S3BotoStorage backend #'health_check.contrib.rabbitmq', # requires RabbitMQ broker #'health_check.contrib.redis', # required Redis broker )
ディスクとメモリーの状況を確認する場合は以下を追記します。
# HEALCH_CHECK SETTINGS
HEALTH_CHECK = {
'DISK_USAGE_MAX': 90, # percent
'MEMORY_MIN': 100, # in MB
}
また、psutilが別途インストール必要になるため、追加でインストールします。
pip install psutil
Traceback (most recent call last):
File "manage.py", line 14, in <module>
execute_from_command_line(sys.argv)
File ".venv/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
utility.execute()
File ".venv/lib64/python3.6/site-packages/django/core/management/__init__.py", line 338, in execute
django.setup()
File ".venv/lib64/python3.6/site-packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File ".venv/lib64/python3.6/site-packages/django/apps/registry.py", line 116, in populate
app_config.ready()
File ".venv/lib64/python3.6/site-packages/health_check/contrib/psutil/apps.py", line 11, in ready
from .backends import DiskUsage, MemoryUsage
File ".venv/lib64/python3.6/site-packages/health_check/contrib/psutil/backends.py", line 4, in <module>
import psutil
ModuleNotFoundError: No module named 'psutil'
その他、アプリケーションを有効化する際は、個別で設定の追加が必要です。
-
テスト実行
Django command でhealth_check
というコマンドが用意されており、CLIでヘルスチェックの実施が可能です。
# python manage.py health_check CacheBackend ... working DefaultFileStorageHealthCheck ... working DiskUsage ... working MemoryUsage ... working
-
httpでアクセスしてテスト実行
https://www.monotalk.xyz/health/?format=json
のように、?format=json
を付与すると、以下のようなjsonデータが取得できます。
"CacheBackend": "working", "DefaultFileStorageHealthCheck": "working", "DiskUsage": "working", "MemoryUsage": "working"}
?format=json
なしでアクセスすると、HTML形式で以下のように表示されます。こちらは実行時間も取得できます。
-
httpでアクセスする際の注意点
python manage.py health_check
の実行ユーザーと、Webアプリの実行ユーザーが異なる場合、DefaultFileStorageHealthCheck のチェックがパーミッションの問題でエラーになります。
同一ユーザーで実行するか、MEDIA_ROOT
のディレクトリのパーミッションを、変更する必要があります。
Health Check のクライアント
Health Check の URL に HTTPリクエストを送信するクライアントは、Google スプレッドシート の website-monitor
というアドオンがあるので、それを使いました。
URL監視は1シート1つだけですが、Down時刻、Up時刻の記録ができるので便利です。
- labnol/website-monitor: Website Uptime Monitor built with Google Apps Script
- How to Monitor your Website’s Uptime with Google Sheets - Digital Inspiration
参考
以下、Health エンドポイントパターン という言葉で見つけた記事になります。
以上です。
コメント