终极指南:用 Prometheus 监控 你的Caddy 流量

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

image

第一步:让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监控仪表盘就呈现在你眼前! 你可以看到实时的请求数、延迟、状态码分布,甚至可以按不同站点分别查看。

 

posted @ 2026-03-24 20:24  木子欢儿  阅读(15)  评论(0)    收藏  举报