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 |
значение 1 | version |
routers, routers_errors, routers_warnings |
роутеры всех протоколов и те, что с ошибкой или предупреждением | |
services, services_errors, middlewares_errors |
то же для сервисов и middleware | |
router_status |
по каждому HTTP-роутеру: 0 включён, 1 предупреждение, 2 отключён | router, provider |
router_error_info |
значение 1, для роутера, который не включён: первая ошибка Traefik | router, error |
service_error_info |
значение 1, для сервиса, который не включён: первая ошибка Traefik | service, error |
service_status |
по каждому сервису: 0 включён, 1 предупреждение, 2 отключён | service |
service_servers, service_servers_up |
серверы сервиса с балансировкой нагрузки и те, что проходят проверку работоспособности | service |
server_up |
1, когда сервер проходит проверку работоспособности (или её у него нет) | 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 часа.
Разрешите DumbMonit читать API Traefik¶
-
API Traefik только читает: роутеры, сервисы и сертификаты, но никогда не изменяет. Включите его вместе с метриками Prometheus, которые добавляют частоту запросов и долю ответов 5xx: добавьте эти два аргумента в команду Traefik (или те же ключи в его статическую конфигурацию) и перезапустите его. Оба затем отдаются на точке входа traefik, порт 8080.
--api.insecure=true --metrics.prometheus=true -
Порт 8080 отвечает без пароля: публикуйте его только на адресе, доступном хосту DumbMonit, отфильтруйте так, чтобы больше никто его не достигал, и проверьте, что он отвечает.
curl -s http://traefik.lan:8080/api/overview -
Чтобы вместо этого требовать пароль, направьте /api и /metrics через собственную точку входа с middleware basicAuth, как показано в документации, и ниже выберите пользователя basicAuth. Создайте пользователя dumbmonit с помощью htpasswd.
htpasswd -nbB dumbmonit 'a-long-password' -
В DumbMonit введите хост Traefik, например «traefik.lan», с портом этой точки входа, если это не 8080. Снимите отметку «Read the metrics», если /metrics отдаётся в другом месте.
Warning
Роутер, отключённый из-за ошибки конфигурации, выводит свои сайты из строя, а Traefik сообщает об этом только в своём журнале. Проверка того, что резолвер сертификатов получил свои сертификаты, требует /api/certificates, который отдаёт Traefik 3.7; без него срок действия сертификатов берётся только из метрик.
Точка входа API с паролем¶
Вместо --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
завершается неудачей. У сервисов со взвешиванием и зеркалированием нет
собственных серверов, и они не учитываются.