Prometheus + Grafana 监控 Django 项目
在日常开发中,许多开发者可能会遇到以下问题:
- 无法实时监控项目运行状态:当 Django 项目部署到生产环境后,如果出现性能瓶颈或异常情况,可能难以快速定位问题
- 缺乏直观的数据展示工具:单纯依赖日志文件分析系统状态效率低下,且不够直观
- 忽视潜在的性能隐患:没有对请求量、响应时间等关键指标进行持续跟踪,可能导致系统崩溃或用户体验下降
通过本文介绍的方法,可以有效解决这些问题:
- 使用 Prometheus 定期抓取 Django 项目的运行数据(如请求数、响应时间),并存储下来,为后续分析提供基础支持
- 借助 Grafana 创建动态仪表板,将复杂的数据转化为图表形式,帮助开发者更直观地了解系统的健康状况
- 针对生产环境的需求,进一步优化 Prometheus 的稳定性和安全性,确保监控系统本身不会成为新的风险点
在日常开发中,许多开发者可能会遇到以下问题:
- 启动 Prometheus 服务
- 配置 Django 项目
- 启动和配置 Grafana 服务
- 添加 Grafana 仪表板
- 1Django 已暴露 Prometheus metrics 路由,并能被 Prometheus 正常抓取。
- 2Prometheus scrape_interval 不要过低,避免监控系统反过来压垮业务。
- 3Grafana 面板至少覆盖请求量、错误率、响应时间和资源占用。
- 4生产环境要限制 metrics 和 Grafana 的访问权限。
- 5告警规则要先从少量关键指标开始,避免告警疲劳。
启动 Prometheus 服务
前往 Prometheus 官方仓库 release 页面,找到适合您系统架构的版本(例如我的是 amd64 架构的 Linux 版本),下载对应的预编译可执行文件并解压:
wget https://github.com/prometheus/prometheus/releases/download/v3.4.0-rc.0/prometheus-3.4.0-rc.0.linux-amd64.tar.gz
tar -zxvf prometheus-3.4.0-rc.0.linux-amd64.tar.gz进入解压后的 prometheus 目录,并编辑配置文件 prometheus.yml:
cd prometheus-3.4.0-rc.0.linux-amd64
vim prometheus.yml将内容修改为如下配置:
global:
scrape_interval: 10s
evaluation_interval: 10s
external_labels:
monitor: django-monitor
rule_files:
- "django.rules"
scrape_configs:
- job_name: "django"
static_configs:
- targets: ["localhost:8000"]完成配置后,启动 Prometheus 服务:
./prometheus --config.file=prometheus.yml配置 Django 项目
更多详细信息可以参考 官方仓库 README
首先,安装 django_prometheus 包:
pip install django-prometheus接着,在项目的 settings.py 文件中添加 django_prometheus 应用,并在中间件列表的最前和最后分别加入 Prometheus 的处理逻辑(注意顺序非常重要):
INSTALLED_APPS = [
...
'django_prometheus',
...
]
MIDDLEWARE = [
'django_prometheus.middleware.PrometheusBeforeMiddleware',
# 所有其他的中间件放在这里,包括默认的中间件
# 比如 SessionMiddleware、CommonMiddleware、
# CsrfViewmiddleware、SecurityMiddleware,等等
'django_prometheus.middleware.PrometheusAfterMiddleware',
]然后,在项目的 urls.py 中添加 Prometheus 的路由配置:
urlpatterns = [
...
path('', include('django_prometheus.urls')),
]最后,启动 Django 项目(默认运行在 localhost:8000):
python manage.py runserver启动和配置 Grafana 服务
在 Grafana 官方文档 中可以找到针对不同操作系统的安装教程。这里我们以 Docker 方式部署为例,只需一条命令即可完成:
docker run -d -p 3000:3000 --name=grafana grafana/grafana启动完成后,通过浏览器访问 http://<服务器IP>:3000(如果是本地运行,则使用 http://localhost:3000)。默认用户名和密码均为 admin,首次登录时会提示修改密码

登录后进入 Grafana 主界面,点击左侧菜单栏的 Connections -> Add new connection,搜索并选择 Prometheus,点击添加连接。
在右上角点击 Add new data source:

在右上角点击 Add new data source:

填写 Prometheus 服务的 IP 和端口信息(如果 Grafana 运行在 Docker 容器中,而 Prometheus 在宿主机上运行,则需要使用 172.17.0.1 作为宿主机地址):

滑动到页面底部,点击 Save & test,看到成功提示后即表示连接已建立:

添加 Grafana 仪表板
前往 Grafana 仪表板市场,搜索与 Django 相关的仪表板模板:

选择一个合适的仪表板,点击右下角的 Copy ID to clipboard(如果您的 Grafana 环境无法访问外网,也可以下载 JSON 文件后手动导入):

回到 Grafana 管理后台,点击右上角的加号图标,选择 Import dashboard:

将复制的 ID 粘贴到输入框中,点击 Load:

确认无误后点击 Import 即可:

就能看见仪表板了:

此时,您可以通过在 Django 服务中进行一些操作,触发请求,观察仪表板上的数据变化:

写在最后
以上步骤展示了如何搭建一个简单的监控 Django 项目运行状态的 MVP。然而,这还远远不够用于生产环境。以下是接下来需要优化的方向:
- Prometheus 服务的高可用性:目前 Prometheus 是直接在前台运行的,建议使用 Docker 或者 Supervisor 等工具确保其能够稳定运行在后台。
- 安全性增强:当前 Prometheus 服务未配置权限管理,后续应至少加入基本的身份验证机制以保障安全。
- 自定义仪表板:社区提供的仪表板可能无法完全满足实际业务需求,您可以学习其他优秀仪表板的设计思路,创建符合自身需求的专属仪表板。
- 这篇文章围绕“Prometheus + Grafana 监控 Django 项目”建立一条理解线索。
- 真正重要的是问题背后的结构,而不只是单个事实。
- 读完后可以顺着文末问题继续延展。
版权所有
版权归属:Shuo Liu
