文件
一個 專案

使用 Prometheus 指標監控 Caddy

無論您是在雲端中運行數千個 Caddy 實例,還是在嵌入式裝置上運行單個 Caddy 伺服器,您都很可能在某個時候想要大致了解 Caddy 正在做什麼,以及需要多長時間。換句話說,您將需要能夠監控 Caddy。

啟用指標

您需要開啟指標。

如果使用 Caddyfile,請在全域選項中啟用指標

{
	metrics
}

如果使用 JSON,請將 "metrics": {} 新增至您的 apps > http > servers 配置

若要新增每個主機的指標,您可以插入 per_host 選項。主機特定的指標現在將會有一個 Host 標籤。

{
	metrics {
		per_host
	}
}

Prometheus

Prometheus 是一個監控平台,透過抓取監控目標上的指標 HTTP 端點來收集指標。除了幫助您使用儀表板工具(如 Grafana)顯示指標外,Prometheus 也用於 警報

與 Caddy 一樣,Prometheus 是用 Go 語言編寫的,並以單一二進位檔案形式發布。要安裝它,請參閱 Prometheus 安裝文件,或者在 MacOS 上只需運行 brew install prometheus

如果您是 Prometheus 的新手,請閱讀 Prometheus 文件,否則請繼續閱讀!

若要配置 Prometheus 從 Caddy 抓取指標,您需要一個類似於以下的 YAML 配置檔案

# prometheus.yaml
global:
  scrape_interval: 15s # default is 1 minute

scrape_configs:
  - job_name: caddy
    static_configs:
      - targets: ['localhost:2019']

然後您可以像這樣啟動 Prometheus

$ prometheus --config.file=prometheus.yaml

Caddy 的指標

與任何使用 Prometheus 監控的進程一樣,Caddy 公開一個 HTTP 端點,該端點以 Prometheus exposition 格式回應。Caddy 的 Prometheus 客戶端也被配置為在協商後以 OpenMetrics exposition 格式回應(也就是說,如果 Accept 標頭設定為 application/openmetrics-text; version=0.0.1)。

預設情況下,在 管理 API(即 https://127.0.0.1:2019/metrics)有一個 /metrics 端點可用。但是如果管理 API 被禁用,或者您希望在不同的端口或路徑上監聽,您可以使用 metrics 處理器來配置它。

您可以使用任何瀏覽器或 HTTP 客戶端(如 curl)查看指標

$ curl https://127.0.0.1:2019/metrics
# HELP caddy_admin_http_requests_total Counter of requests made to the Admin API's HTTP endpoints.
# TYPE caddy_admin_http_requests_total counter
caddy_admin_http_requests_total{code="200",handler="metrics",method="GET",path="/metrics"} 2
# HELP caddy_http_request_duration_seconds Histogram of round-trip request durations.
# TYPE caddy_http_request_duration_seconds histogram
caddy_http_request_duration_seconds_bucket{code="308",handler="static_response",method="GET",server="remaining_auto_https_redirects",le="0.005"} 1
caddy_http_request_duration_seconds_bucket{code="308",handler="static_response",method="GET",server="remaining_auto_https_redirects",le="0.01"} 1
caddy_http_request_duration_seconds_bucket{code="308",handler="static_response",method="GET",server="remaining_auto_https_redirects",le="0.025"} 1
...

您將看到許多指標,大致可分為 4 個類別

  • 運行時指標
  • 管理 API 指標
  • HTTP 中介軟體指標
  • 反向代理指標

運行時指標

這些指標涵蓋 Caddy 進程的內部運作,並由 Prometheus Go Client 自動提供。它們的前綴為 go_*process_*

請注意,process_* 指標僅在 Linux 和 Windows 上收集。

請參閱 Go CollectorProcess CollectorBuildInfo Collector 的文件。

管理 API 指標

這些是幫助監控 Caddy 管理 API 的指標。每個管理端點都經過檢測,以追蹤請求計數和錯誤。

這些指標的前綴為 caddy_admin_*

例如

$ curl -s https://127.0.0.1:2019/metrics | grep ^caddy_admin
caddy_admin_http_requests_total{code="200",handler="admin",method="GET",path="/config/"} 1
caddy_admin_http_requests_total{code="200",handler="admin",method="GET",path="/debug/pprof/"} 2
caddy_admin_http_requests_total{code="200",handler="admin",method="GET",path="/debug/pprof/cmdline"} 1
caddy_admin_http_requests_total{code="200",handler="load",method="POST",path="/load"} 1
caddy_admin_http_requests_total{code="200",handler="metrics",method="GET",path="/metrics"} 3

caddy_admin_http_requests_total

由管理端點處理的請求數計數器,包括 admin.api.* 命名空間中的模組。

標籤 描述
code HTTP 狀態碼
handler 處理器或模組名稱
method HTTP 方法
path 管理端點掛載到的 URL 路徑

caddy_admin_http_request_errors_total

在管理端點中遇到的錯誤數計數器,包括 admin.api.* 命名空間中的模組。

標籤 描述
handler 處理器或模組名稱
method HTTP 方法
path 管理端點掛載到的 URL 路徑

HTTP 中介軟體指標

所有 Caddy HTTP 中介軟體處理器都會自動進行檢測,以確定請求延遲、首字節時間、錯誤以及請求/回應主體大小。

對於以下直方圖指標,目前無法配置 buckets。對於持續時間,使用預設的 (prometheus.DefBuckets buckets 集合(5ms、10ms、25ms、50ms、100ms、250ms、500ms、1 秒、2.5 秒、5 秒和 10 秒)。對於大小,buckets 為 256b、1kiB、4kiB、16kiB、64kiB、256kiB、1MiB 和 4MiB。

caddy_http_requests_in_flight

目前由此伺服器處理的請求數量的儀表。

標籤 描述
server 伺服器名稱
handler 處理器或模組名稱

caddy_http_request_errors_total

處理請求時遇到的中介軟體錯誤數計數器。

標籤 描述
server 伺服器名稱
handler 處理器或模組名稱

caddy_http_requests_total

發出的 HTTP(S) 請求數計數器。

標籤 描述
server 伺服器名稱
handler 處理器或模組名稱

caddy_http_request_duration_seconds

往返請求持續時間的直方圖。

標籤 描述
server 伺服器名稱
handler 處理器或模組名稱
code HTTP 狀態碼
method HTTP 方法

caddy_http_request_size_bytes

請求總大小(估計值)的直方圖。包括主體。

標籤 描述
server 伺服器名稱
handler 處理器或模組名稱
code HTTP 狀態碼
method HTTP 方法

caddy_http_response_size_bytes

返回的回應主體大小的直方圖。

標籤 描述
server 伺服器名稱
handler 處理器或模組名稱
code HTTP 狀態碼
method HTTP 方法

caddy_http_response_duration_seconds

回應的首字節時間的直方圖。

標籤 描述
server 伺服器名稱
handler 處理器或模組名稱
code HTTP 狀態碼
method HTTP 方法

反向代理指標

caddy_reverse_proxy_upstreams_healthy

反向代理上游健康狀況的儀表。

0 表示上游不健康,而 1 表示上游健康。

標籤 描述
upstream 上游的地址

範例查詢

一旦您讓 Prometheus 抓取 Caddy 的指標,您就可以開始看到一些關於 Caddy 效能的有趣指標。

例如,要查看每秒請求率,以 5 分鐘的平均值計算

rate(caddy_http_requests_total{handler="file_server"}[5m])

要查看超過 100 毫秒延遲閾值的速率

sum(rate(caddy_http_request_duration_seconds_count{server="srv0"}[5m])) by (handler)
-
sum(rate(caddy_http_request_duration_seconds_bucket{le="0.100", server="srv0"}[5m])) by (handler)

若要在 file_server 處理器上找到第 95 百分位數的請求持續時間,您可以使用類似於以下的查詢

histogram_quantile(0.95, sum(caddy_http_request_duration_seconds_bucket{handler="file_server"}) by (le))

或者,要查看 file_server 處理器上成功 GET 請求的中位數回應大小(以位元組為單位)

histogram_quantile(0.5, caddy_http_response_size_bytes_bucket{method="GET", handler="file_server", code="200"})