本文基于个人服务器环境和 2025-2026 年版本的 Docker、Caddy、Prometheus、Grafana 实践整理而成,配置可能因版本更新而略有变化。所有操作请在测试环境验证后再上生产。作者不对因照搬本文导致的任何数据丢失、服务中断、安全问题或其他损失承担责任。使用前请备份数据,并根据自身实际情况调整配置。监控系统涉及暴露端口时,务必加强访问控制(如认证、IP 白名单)。欢迎讨论交流,但请勿用于非法用途。
前言
完成了博客的搭建,发布在外网之后肯定多多少少想要查看一下流量的走向,如果单纯靠WordPress插件不够细粒,也不方便做历史趋势分析,毕竟200G的服务器总得塞点什么进去。所以这篇用于记录搭建的过程用作后面参考。
在利用docker compose部署WordPress后,也同样可以利用容器部署后端流量监控。先看一份结果展示


相关文件:
https://github.com/1MarsRain4/WordPress-files
现有环境:
- Docker Compose 部署
- 前端代理:Caddy(自动 HTTPS + HTTP/3)
- WordPress:wordpress:php8.2-fpm-alpine(FPM 模式,轻量高性能)
- 数据库:MariaDB 10.6
- 缓存:Redis Alpine
- 自定义网络:blog_net
操作流程
1、Caddyfile中添加metrics

#省去一些说明的部分的代码
{
metrics
admin 0.0.0.0:2019 # 让 Prometheus 从网络可达
}
---------------------------------------分割线--------------------------------------
#添加之后重启caddy容器
docker compose restart caddy
#可以先用docker compose ps查看caddy容器的镜像名称,不然可能会显示不存在当前镜像
2、验证metrics是否暴露
在宿主机操控容器curl这个配置
docker compose exec caddy curl http://localhost:2019/metrics
验证:
有返回结果后,反复登录自己的博客网站,再grep出caddy_http_*指标,返回结果出现下面类似结果,证明生效

3、compose.yml添加Prometheus&Grafana
prometheus:
image: prom/prometheus:v2.55.0 # 或 latest
container_name: blog_prometheus
restart: always
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
networks:
- blog_net
ports:
- "9090:9090" # 调试用,可选暴露到宿主机
grafana:
image: grafana/grafana:11.6.0 # 或 latest,2026 年建议用 11.x
container_name: blog_grafana
restart: always
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=你的强密码改这里
- GF_USERS_ALLOW_SIGN_UP=false
networks:
- blog_net
depends_on:
- prometheus
# 可选:容器资源监控(CPU/内存/网络IO)
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.49.1
container_name: blog_cadvisor
restart: always
privileged: true
devices:
- /dev/kmsg:/dev/kmsg
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
networks:
- blog_net
新增 volumes(在文件末尾 volumes: 下面加):
prometheus_data:
grafana_data:

红框内的位置就是Grafana的管理员账户和密码
3、创建prometheus.yml文件
放在compose.yml同目录下
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'caddy'
static_configs:
- targets: ['blog_caddy:2019']
labels:
instance: 'caddy-blog'
# 可选:监控 prometheus 自身
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 可选:容器/宿主机资源
- job_name: 'cadvisor'
static_configs:
- targets: ['blog_cadvisor:8080']
启动所有新增服务
docker compose up -d prometheus grafana cadvisor
4、访问&配置Grafana
输入*服务器外网IP*:3000进入容器创建的Grafana网站,创建新的数据源

选择第一个Prometheus

框内输入http://prometheus:9090,可以选择Authentication账户密码认证,其他默认设置就好

在底层点击Save&test

弹出显示成功的绿框后,点击building a dashboard

来到这个界面选择import导入,弹窗显示的意思是 是否保存这个仪表盘,点击discard就好

在导入import界面,输入一些纯 Prometheus 模板的ID就可以直接使用,例如22870 或 20802

名字随机,UID随机。记得在最下面一栏Prometheus选择刚刚创建的数据源就好。
点击导入就可以正常看见仪表盘了









