Перейти к содержимому

Traefik

Обратный прокси: роутеры, отключённые из-за ошибки конфигурации, серверы бэкенда, не проходящие проверку работоспособности, сертификаты, которые резолвер так и не получил или которые не продлеваются, и доля ответов 5xx.

DumbMonit читает API Traefik, которое только читает: /api/overview, /api/http/routers, /api/http/services, /api/certificates (отдаётся Traefik 3.7) и /api/version. Если метрики Prometheus Traefik отдаются на том же порту, /metrics добавляет частоту запросов и долю ответов 5xx. Ни один метод API ничего не меняет, и DumbMonit их не отправляет.

Сбои, за которыми стоит следить, — тихие. Роутер, чей сервис или middleware не существует либо чьё правило не разбирается, отключается: его сайты отвечают 404, а Traefik сообщает об этом только в своём журнале. Сервис, все серверы которого не проходят проверку работоспособности, отвечает 503 «no available server». Роутер, запрашивающий у ACME-резолвера сертификат, который резолвер не может получить, получает самоподписанный сертификат Traefik по умолчанию, который браузеры отклоняют.

Все метрики имеют префикс dumbmonit_traefik_. Итоговые значения — счётчики: графики и правила превращают их в скорости.

МетрикаЧтоМетки
version_infoзначение 1version
routers, routers_errors, routers_warningsроутеры всех протоколов и те, что с ошибкой или предупреждением
services, services_errors, middlewares_errorsто же для сервисов и middleware
router_statusпо каждому HTTP-роутеру: 0 включён, 1 предупреждение, 2 отключёнrouter, provider
router_error_infoзначение 1, для роутера, который не включён: первая ошибка Traefikrouter, error
service_error_infoзначение 1, для сервиса, который не включён: первая ошибка Traefikservice, error
service_statusпо каждому сервису: 0 включён, 1 предупреждение, 2 отключёнservice
service_servers, service_servers_upсерверы сервиса с балансировкой нагрузки и те, что проходят проверку работоспособностиservice
server_up1, когда сервер проходит проверку работоспособности (или её у него нет)service, server
resolver_routersроутеры, запрашивающие свой сертификат у резолвера сертификатовresolver
resolver_routers_uncoveredте, чьи имена хостов ещё не покрыты ни одним сертификатом, которым владеет Traefik (требуется /api/certificates)resolver
certificates, cert_expiry_daysсертификаты, которыми владеет Traefik, и дни, оставшиеся до истечения каждогоcert
requests_total, requests_5xx_totalпри наличии метрик: запросы всех точек входа и те, на которые отвечено 5xx
router_requests_total, router_requests_5xx_totalпри наличии метрик и меток роутеров: то же по каждому роутеруrouter
config_reloads_totalпри наличии метрик: перезагрузки конфигурации

Собственные роутеры и сервисы Traefik (@internal) исключены. Роутеры, сервисы и серверы описываются по одному до 500 каждого; итоговые значения всегда охватывают всё.

Роутер, сервис или сервер, которого Traefik больше не перечисляет (провайдер Docker сразу убирает роутеры остановленного контейнера), просто перестаёт сообщаться: DumbMonit не хранит для него значение «исправен», и его ряды заканчиваются. Графики и правила могут ещё несколько минут показывать его последнее значение, пока хранилище метрик не удалит устаревшие ряды. Traefik отвечает 404 для такого маршрута, о чём ни одно правило не сообщает: сообщает только роутер, который перечислен и отключён.

Применяемые встроенные правила: Traefik router disabled, Traefik backend server down, Traefik service without a server, Traefik certificate not obtained, Proxy certificate not renewed, Reverse proxy answering 5xx, а также Monitor unreachable.

Панель над графиками читает то, что сохранил опрос; открытие страницы никогда не обращается к Traefik. Она одним предложением говорит, что не так (отключённые роутеры и причина Traefik, сервисы без сервера, резолверы, ничего не получившие, сертификаты, близкие к истечению, высокая доля 5xx), затем показывает роутеры, сервисы, частоту запросов и долю 5xx, затем работающие серверы по сервисам, сертификаты (сначала те, что истекают раньше), и ответы 5xx по роутерам за 24 часа.

  1. API Traefik только читает: роутеры, сервисы и сертификаты, но никогда не изменяет. Включите его вместе с метриками Prometheus, которые добавляют частоту запросов и долю ответов 5xx: добавьте эти два аргумента в команду Traefik (или те же ключи в его статическую конфигурацию) и перезапустите его. Оба затем отдаются на точке входа traefik, порт 8080.

    --api.insecure=true
    --metrics.prometheus=true
  2. Порт 8080 отвечает без пароля: публикуйте его только на адресе, доступном хосту DumbMonit, отфильтруйте так, чтобы больше никто его не достигал, и проверьте, что он отвечает.

    curl -s http://traefik.lan:8080/api/overview
  3. Чтобы вместо этого требовать пароль, направьте /api и /metrics через собственную точку входа с middleware basicAuth, как показано в документации, и ниже выберите пользователя basicAuth. Создайте пользователя dumbmonit с помощью htpasswd.

    htpasswd -nbB dumbmonit 'a-long-password'
  4. В DumbMonit введите хост Traefik, например «traefik.lan», с портом этой точки входа, если это не 8080. Снимите отметку «Read the metrics», если /metrics отдаётся в другом месте.

Вместо --api.insecure=true выделите API и метрикам собственную точку входа и поставьте перед обоими middleware basicAuth. В статической конфигурации:

entryPoints:
monitor:
address: ":8082"
api: {}
metrics:
prometheus:
manualRouting: true
addRoutersLabels: true

и в динамической конфигурации (показан провайдер file; метки Docker работают так же), со строкой, выведенной htpasswd:

http:
middlewares:
dumbmonit-auth:
basicAuth:
users:
- "dumbmonit:$2y$05$…"
routers:
monitor-api:
entryPoints: [monitor]
rule: "PathPrefix(`/api`)"
service: api@internal
middlewares: [dumbmonit-auth]
monitor-metrics:
entryPoints: [monitor]
rule: "Path(`/metrics`)"
service: prometheus@internal
middlewares: [dumbmonit-auth]

Затем введите traefik.lan:8082 в DumbMonit с пользователем dumbmonit. addRoutersLabels даёт ответы 5xx по роутерам; без него учитываются только итоги по точкам входа.

Учётные данныеПоля
Без пароляНичего: порт API отфильтрован так, что достичь его может только DumbMonit.
Пользователь basicAuthПользователь и пароль middleware basicAuth перед /api и /metrics.

Адрес: имя хоста или IP (traefik.lan), host:port или полный URL. Параметры: протокол (по умолчанию HTTP), порт API (8080), Read the metrics (включено), проверка сертификата и тайм-аут запроса (10 с).

Сервис без проверки работоспособности сообщает обо всех серверах как о работающих: Traefik помечает сервер недоступным, только когда healthCheck завершается неудачей. У сервисов со взвешиванием и зеркалированием нет собственных серверов, и они не учитываются.