终极指南:用 Prometheus 监控 你的Caddy 流量
你是否也遇到过这样的场景:你用Caddy轻松地部署了网站,它稳定、高效地运行着。但很快,新的问题浮出水面——"网站现在有多少人访问?"、"哪个页面的响应最慢?"、"服务器的负载高吗?"。如果你的Caddy服务器对你来说还是一个"黑盒",那么这篇文章就是为你准备的。

第一步:让Caddy "开口说话"——暴露指标
Caddy内置了对Prometheus的支持,我们只需一个简单的指令就能开启它。
修改Caddyfile
在你的 Caddyfile 中,添加一个新的站点,专门用于暴露 /metrics 端点。
# File: /etc/caddy/Caddyfile
# 为了我们后面用到的仪表盘,需要设置per_host。这样可以监控每个站点。
# 注意caddy版本需要是2.10+
{
metrics {
per_host
}
}
# 为 Prometheus 提供 metrics 端点
# 最佳实践:这个端口只对内网或本机开放
:2019 {
metrics
}
# 你的主网站
your-site.com {
# ... 你的网站配置
reverse_proxy localhost:8080
}
关键点::2019定义了一个监听2019端口的新站点。metrics 指令会自动在该站点上创建 /metrics 路径,供Prometheus抓取。
重载Caddy配置
sudo systemctl reload caddy
验证
在Caddy服务器上执行 curl,你应该能看到大量的指标文本。
curl http://localhost:2019/metrics
看到类似 caddy_http_requests_total{...} 的输出就代表成功了!
第二步:部署Prometheus和Grafana
我们将使用Docker Compose来管理这两个服务。
创建 docker-compose.yml 文件
# File: /home/user/caddy-monitoring/docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
volumes:
- ./prometheus:/etc/prometheus/
- prometheus_data:/prometheus
ports:
- "9090:9090"
extra_hosts:
- "host.docker.internal:host-gateway"
grafana:
image: grafana/grafana-oss:latest
container_name: grafana
restart: unless-stopped
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
prometheus_data:
grafana_data:
创建 Prometheus 配置文件 prometheus.yml
这是告诉Prometheus去哪里抓取Caddy指标的关键。
# File: /home/user/caddy-monitoring/prometheus.yml
global:
scrape_interval: 15s # 每 15 秒抓取一次
scrape_configs:
- job_name: caddy
static_configs:
- targets: ['xx.xx.xx.xx:2019']
labels:
instance: '服务器0'
- targets: ['xx.xx.xx.xx:2019']
labels:
instance: '服务器1'
实践经验:targets里的IP地址是关键。host.docker.internal 通常是宿主机在Docker默认桥接网络中的IP。如果Caddy和Docker在不同机器上,请直接填写Caddy服务器的IP。
启动服务
在 docker-compose.yml 所在目录执行:
docker-compose up -d
第三步:Grafana —— 数据的艺术家
最后一步,我们将数据变成赏心悦目的图表。
登录Grafana
访问 http://<你的服务器IP>:3000,默认用户名和密码都是 admin。首次登录会提示修改密码。
添加Prometheus数据源
- 点击左侧菜单的齿轮图标(Configuration) ->
Data Sources。 - 点击
Add data source,选择Prometheus。 - 在
HTTP->URL字段中,填入http://prometheus:9090。 - 关键点:因为Grafana和Prometheus在同一个Docker网络中,我们可以直接使用服务名
prometheus进行通信。 - 点击
Save & test,如果看到"Data source is working",就表示连接成功。
导入推荐的仪表盘
我们不必从零开始画图,社区已经为我们准备好了优秀的仪表盘。这里推荐两个:
- 点击左侧菜单的
+(Create) ->Import。 - 在
Import via grafana.com字段中,输入仪表盘ID,然后点击Load。选择你刚刚添加的Prometheus数据源。
选择一:基础仪表盘 (ID: 14280)
- 这是一个简洁的仪表盘,包含了请求总数、错误数、响应大小和延迟等核心指标。适合快速上手。
选择二:按主机名分类的高级仪表盘 (ID: 24146)
- 如果你在一台Caddy上运行多个网站,这个仪表盘是绝佳选择。它允许你按域名筛选和查看指标。
- 注意:使用此仪表盘需要你在Caddyfile中开启
per_host指标,如第一步中所示。
瞬间,一个专业的Caddy监控仪表盘就呈现在你眼前! 你可以看到实时的请求数、延迟、状态码分布,甚至可以按不同站点分别查看。
本文来自博客园,作者:木子欢儿,转载请注明原文链接:https://www.cnblogs.com/HGNET/p/19766006

浙公网安备 33010602011771号