Spec-Zone.ru › Caddy

Мониторинг 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.

Если вы запустили сервер Prometheus для сбора метрик Caddy с указанным выше конфигурацией, попробуйте вставить эти запросы в интерфейс Prometheus по адресу http://localhost:9090/graph

Например, чтобы увидеть скорость запросов в секунду, усредненную за 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API