Перейти к содержанию

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

  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 отдаётся в другом месте.

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