使用 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 Collector、Process Collector 和 BuildInfo 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"})