你是否也遇到过这样的场景你用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监控仪表盘就呈现在你眼前你可以看到实时的请求数、延迟、状态码分布甚至可以按不同站点分别查看。
终极指南:用 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监控仪表盘就呈现在你眼前你可以看到实时的请求数、延迟、状态码分布甚至可以按不同站点分别查看。