Мониторинг Caddy с метриками Prometheus
Независимо от того, запускаете ли вы тысячи экземпляров 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.yamlglobal:scrape_interval:15s# default is 1 minutescrape_configs:- job_name:caddystatic_configs:- targets:['localhost:2019']
Затем вы можете запустить Prometheus следующим образом:
$ prometheus --config.file=prometheus.yaml
Метрики Caddy
Как и любой процесс, отслеживаемый с помощью Prometheus, Caddy предоставляет HTTP-точку входа, которая отвечает в формате представления Prometheus. Клиент Prometheus для Caddy также настроен на ответ с использованием формата представления OpenMetrics, если он согласован (то есть, если заголовок Accept установлен в application/openmetrics-text; version=0.0.1).
По умолчанию доступна /metrics точка входа по адресу административный API (т.е. http://localhost:2019/metrics). Но если административный API отключен или вы хотите слушать на другом порту или пути, вы можете использовать metrics обработчик для его настройки.
Вы можете просмотреть метрики с помощью любого браузера или HTTP-клиента, такого как curl:
$ curl http://localhost: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. Они имеют префиксы go_* и process_*.
Обратите внимание, что метрики process_* собираются только в Linux и Windows.
См. документацию по коллектору Go, коллектору процессов и коллектору информации о сборке.
Метрики административного API
Это метрики, которые помогают контролировать административный API Caddy. Каждая из административных точек входа отслеживает количество запросов и ошибок.
Эти метрики имеют префикс caddy_admin_*.
Например:
$ curl -s http://localhost: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-средств обработки
Все обработчики HTTP-средств обработки Caddy автоматически отслеживаются для определения задержки запроса, времени до первого байта, ошибок и размеров тела запроса/ответа.
Для метрик гистограмм ниже, корзинки в настоящее время не настраиваются. Для продолжительностей используется стандартный набор (prometheus.DefBuckets корзин (5 мс, 10 мс, 25 мс, 50 мс, 100 мс, 250 мс, 500 мс, 1 с, 2,5 с, 5 с и 10 с). Для размеров корзинки составляют 256 байт, 1 Кбайт, 4 Кбайт, 16 Кбайт, 64 Кбайт, 256 Кбайт, 1 Мбайт и 4 Мбайт.
caddy_http_requests_in_flight
Измеритель количества запросов, которые в настоящее время обрабатываются этим сервером.
| Метка | Описание |
|---|---|
server | Имя сервера |
handler | Имя обработчика или модуля |
caddy_http_request_errors_total
Счётчик ошибок middleware, с которыми сталкиваются при обработке запросов.
| Метка | Описание |
|---|---|
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 означает, что upstream неисправен, а значение 1 означает, что upstream исправен.
| Метка | Описание |
|---|---|
upstream | Адрес 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)
Чтобы найти 95-й перцентиль продолжительности запроса для обработчика file_server, можно использовать запрос следующего вида:
histogram_quantile(0.95, sum(caddy_http_request_duration_seconds_bucket{handler="file_server"}) by (le))
Или чтобы увидеть медианный размер ответа в байтах для успешных GET запросов обработчика file_server:
histogram_quantile(0.5, caddy_http_response_size_bytes_bucket{method="GET", handler="file_server", code="200"})
© 2015-2025 Matthew Holt and The Caddy Authors
Licensed under the Apache License 2.0.
Caddy is a registered trademark of Stack Holdings GmbH.
https://caddyserver.com/docs/metrics