为 Django 发布状态页的三种方式
选择所需的控制级别 — 零代码、低代码或完全 headless。
托管
添加 Django 端点,把 CNAME 指向 status.yourdomain.com,完成。5 分钟搞定。
嵌入式徽章
将 SVG 正常运行时间和状态徽章放入 README 或落地页。每 5 分钟自动更新。
把这个 health 端点加入你的 Django 应用
复制、粘贴、把 PulseAPI 指向 URL。健康时返回 200,降级时返回 503。
health/views.py
from django.db import connection
from django.http import JsonResponse
from django.core.cache import cache
from django.views.decorators.http import require_GET
@require_GET
def health(request):
checks = {}
try:
with connection.cursor() as cur:
cur.execute("SELECT 1")
checks["database"] = "ok"
except Exception:
checks["database"] = "fail"
try:
cache.set("health-probe", "1", 5)
checks["cache"] = "ok" if cache.get("health-probe") == "1" else "fail"
except Exception:
checks["cache"] = "fail"
healthy = all(v == "ok" for v in checks.values())
return JsonResponse(
{"status": "healthy" if healthy else "degraded", **checks},
status=200 if healthy else 503,
)在 urls.py 中将视图连到 /health/。从认证中间件中排除该路径。PulseAPI 会解析 JSON 响应,并可断言特定字段为 "ok"。
Django 应用会出什么故障 — 如何捕获
只执行了一半的迁移
部署时迁移失败会让应用处于奇怪状态。实时 /health 端点检查可立即发现。
Celery worker 静默
Worker 可能不崩溃但停止消费。暴露一个健康端点,让它入队一个无操作任务,停止响应时 PulseAPI 会告警。
连接池耗尽
长查询耗尽连接池,新请求超时。响应时间断言可在用户察觉前揭示问题。
在 Django 视图中调用我们的 API,渲染自定义状态页。
import requests
from django.shortcuts import render
def status_view(request):
data = requests.get(
"https://api.pulseapi.tech/status/acme", timeout=5,
).json()
return render(request, "status.html", {"data": data})Django 监控 — FAQ
能与 Django REST framework、Django Channels 或纯 Django 一起使用吗?
全部都可以。PulseAPI 调用你给的 URL 并断言响应,内部技术栈不重要。
如何监控 Celery worker?
暴露一个健康端点,用 .delay() 派发一个简单任务,并以短超时读取结果。任务未完成时返回 503。
可以用于 staging 环境吗?
可以。每个环境创建一个端点并打标签。可在公共状态页中隐藏 staging 端点,同时保留告警。
能否在 Django 内部自建状态页?
可以 — headless API 返回与托管页相同的数据。在视图中获取,传给模板即可。