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
Заголовок раздела «Разрешите 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 отдаётся в другом месте.
Точка входа API с паролем
Заголовок раздела «Точка входа 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
завершается неудачей. У сервисов со взвешиванием и зеркалированием нет
собственных серверов, и они не учитываются.