Become a sponsor

生产环境的健康检查与监控是保障服务可用性的关键环节。本文介绍 Django 应用的健康检查端点、监控指标采集、日志聚合方案。
监控体系层次
1. 应用层:健康检查端点、业务指标
2. 系统层:CPU/内存/磁盘/网络
3. 中间件:MySQL/Redis 连接状态
4. 日志:集中式日志收集与分析可通过 Django 视图实现健康检查端点,用于负载均衡器或容器编排的探针配置:
# application/health/views.py
from django.http import JsonResponse
from django.db import connection
def health_check(request):
"""健康检查端点"""
try:
# 检查数据库连接
with connection.cursor() as cursor:
cursor.execute("SELECT 1")
return JsonResponse({"status": "healthy", "database": "ok"})
except Exception as e:
return JsonResponse({"status": "unhealthy", "error": str(e)}, status=503)# 基础健康检查
GET /health/
# 响应示例
{
"status": "healthy",
"database": "ok"
}Docker 健康检查
在 Dockerfile 中配置 HEALTHCHECK:
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:8000/health/ || exit 1| 指标 | 说明 | 采集方式 |
|---|---|---|
| 请求总量 | API 调用次数 | Nginx access log / Django 中间件 |
| 响应时间 | P50/P95/P99 延迟 | Django 中间件 / APM |
| 错误率 | 5xx 响应占比 | Nginx error log / Django 日志 |
| 活跃连接数 | 当前并发请求 | Gunicorn stats |
| 指标 | 说明 | 告警阈值 |
|---|---|---|
| CPU 使用率 | 进程 CPU 占用 | > 80% |
| 内存使用率 | 进程内存占用 | > 85% |
| 磁盘使用率 | 磁盘空间占用 | > 90% |
| 网络流量 | 入站/出站带宽 | 根据带宽设定 |
| 指标 | 说明 | 告警阈值 |
|---|---|---|
| MySQL 连接数 | 活跃/空闲连接 | > max_connections * 0.8 |
| MySQL 慢查询 | 执行时间 > 1s 的查询 | > 10/min |
| Redis 内存使用 | Redis 内存占用 | > maxmemory * 0.8 |
| Redis 连接数 | 活跃客户端连接 | > maxclients * 0.8 |
项目使用 Python logging 模块输出结构化日志:
2026-09-05 10:30:15 [INFO] django: Application startup complete
2026-09-05 10:30:16 [WARNING] middleware: Rate limit exceeded for 192.168.1.100
2026-09-05 10:30:17 [ERROR] services: Login failed for user adminElasticsearch + Logstash + Kibana 集中日志收集:
# Filebeat 配置示例
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/apps/logs/*.log
fields:
app: djangoadmin
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
output.elasticsearch:
hosts: ["http://elasticsearch:9200"]
index: "djangoadmin-%{+yyyy.MM.dd}"轻量级日志聚合(配合 Grafana):
# docker-compose.yml 添加 Loki 和 Grafana
services:
loki:
image: grafana/loki:latest
ports:
- "3100:8001"
promtail:
image: grafana/promtail:latest
volumes:
- /data/apps/logs:/var/log/app
- ./promtail-config.yml:/etc/promtail/config.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"Loki 优势
相比 ELK,Loki 更轻量——不索引日志内容,仅索引标签,存储成本低,适合中小规模部署。
# Prometheus AlertManager 规则示例
groups:
- name: djangoadmin
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.1
for: 5m
labels:
severity: critical
annotations:
summary: "错误率超过10%"
- alert: HighResponseTime
expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 2
for: 5m
labels:
severity: warning
annotations:
summary: "P95响应时间超过2秒"健康检查与监控是生产环境的基础设施:通过健康检查端点实现负载均衡探针,通过系统/应用/中间件指标全面掌握服务状态,通过 ELK 或 Loki 实现日志集中分析。建议中小项目优先采用 Loki+Grafana 轻量方案,大型项目使用 ELK 全家桶。