Ir al contenido

Traefik

El proxy inverso: routers desactivados por un error de configuración, servidores backend que fallan su comprobación de salud, certificados que un resolver nunca obtuvo o que no se renuevan, y la proporción de respuestas 5xx.

DumbMonit lee la API de Traefik, que solo lee: /api/overview, /api/http/routers, /api/http/services, /api/certificates (servido por Traefik 3.7) y /api/version. Cuando las métricas Prometheus de Traefik se sirven en el mismo puerto, /metrics añade la tasa de peticiones y la proporción de respuestas 5xx. Ningún método de la API cambia nada, y DumbMonit no envía ninguno.

Los fallos que vale la pena vigilar son los silenciosos. Un router cuyo servicio o middleware no existe, o cuya regla no se puede analizar, se desactiva: sus sitios responden 404, y Traefik solo lo indica en su registro. Un servicio cuyos servidores fallan todos su comprobación de salud responde 503 «no available server». Un router que pide a un resolver ACME un certificado que el resolver no puede obtener recibe el certificado autofirmado por defecto de Traefik, que los navegadores rechazan.

Todas las métricas tienen el prefijo dumbmonit_traefik_. Los totales son contadores: las gráficas y las reglas los convierten en tasas.

MétricaQuéEtiquetas
version_infovalor 1version
routers, routers_errors, routers_warningsrouters de todos los protocolos, y los en error o aviso
services, services_errors, middlewares_errorslo mismo para servicios y middlewares
router_statuspor router HTTP: 0 activado, 1 aviso, 2 desactivadorouter, provider
router_error_infovalor 1, para un router no activado: el primer error de Traefikrouter, error
service_error_infovalor 1, para un servicio no activado: el primer error de Traefikservice, error
service_statuspor servicio: 0 activado, 1 aviso, 2 desactivadoservice
service_servers, service_servers_upservidores de un servicio con balanceo de carga, y los que pasan su comprobación de saludservice
server_up1 cuando el servidor pasa su comprobación de salud (o no tiene ninguna)service, server
resolver_routersrouters que piden un certificado a un resolver de certificadosresolver
resolver_routers_uncoveredaquellos cuyos nombres de host ningún certificado que tiene Traefik cubre todavía (necesita /api/certificates)resolver
certificates, cert_expiry_dayscertificados que tiene Traefik, y los días restantes antes de que cada uno caduquecert
requests_total, requests_5xx_totalcon métricas: peticiones de cada entry point, y las respondidas con 5xx
router_requests_total, router_requests_5xx_totalcon métricas y etiquetas de router: lo mismo por routerrouter
config_reloads_totalcon métricas: recargas de configuración

Los propios routers y servicios de Traefik (@internal) se excluyen. Los routers, servicios y servidores se describen uno por uno hasta 500 cada uno; los totales siempre cubren todo.

Un router, servicio o servidor que Traefik ya no lista (el proveedor Docker elimina de inmediato los routers de un contenedor detenido) simplemente deja de reportarse: DumbMonit no conserva un valor «sano» para él, y sus series terminan. Las gráficas y reglas pueden seguir mostrando su último valor unos minutos, hasta que el almacén de métricas descarta la serie obsoleta. Traefik responde 404 para una ruta así, lo que ninguna regla reporta: solo un router que está listado y desactivado.

Las reglas integradas que se aplican: Traefik router disabled, Traefik backend server down, Traefik service without a server, Traefik certificate not obtained, Proxy certificate not renewed, Reverse proxy answering 5xx, además de Monitor unreachable.

El panel sobre las gráficas lee lo que guardó la sonda; abrir la página nunca consulta Traefik. Indica en una frase qué va mal (routers desactivados y el motivo de Traefik, servicios sin servidor, resolvers que no obtuvieron nada, certificados próximos a caducar, una proporción alta de 5xx), luego los routers, servicios, tasa de peticiones y proporción de 5xx, y después los servidores activos por servicio, los certificados que caducan antes primero, y las respuestas 5xx por router a lo largo de 24 horas.

  1. La API de Traefik solo lee: routers, servicios y certificados, nunca un cambio. Actívala junto con las métricas Prometheus, que añaden la tasa de peticiones y la proporción de respuestas 5xx: añade estos dos argumentos al comando de Traefik (o las mismas claves a su configuración estática) y reinícialo. Ambas se sirven entonces en el entry point traefik, puerto 8080.

    --api.insecure=true
    --metrics.prometheus=true
  2. El puerto 8080 responde sin contraseña: publícalo solo en una dirección que alcance el host de DumbMonit, fíltralo para que nada más lo haga, y comprueba que responde.

    curl -s http://traefik.lan:8080/api/overview
  3. Para exigir una contraseña en su lugar, dirige /api y /metrics a través de un entry point propio con un middleware basicAuth, como muestra la documentación, y elige basicAuth user abajo. Crea el usuario dumbmonit con htpasswd.

    htpasswd -nbB dumbmonit 'a-long-password'
  4. En DumbMonit, introduce el host de Traefik, por ejemplo «traefik.lan», con el puerto de ese entry point si no es 8080. Desmarca Read the metrics si /metrics se sirve en otro sitio.

En lugar de --api.insecure=true, dale a la API y a las métricas un entry point propio y pon un middleware basicAuth delante de ambos. En la configuración estática:

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

y en la configuración dinámica (se muestra el proveedor de archivo; las etiquetas Docker funcionan igual), con la línea impresa por 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]

Luego introduce traefik.lan:8082 en DumbMonit con el usuario dumbmonit. addRoutersLabels es lo que da las respuestas 5xx por router; sin él solo se cuentan los totales por entry point.

CredencialCampos
Sin contraseñaNada: el puerto de la API se filtra para que solo DumbMonit lo alcance.
Usuario basicAuthEl usuario y contraseña del middleware basicAuth delante de /api y /metrics.

Dirección: un nombre de host o IP (traefik.lan), host:puerto, o una URL completa. Opciones: protocolo (HTTP por defecto), puerto de la API (8080), Read the metrics (activado), comprobación de certificado y tiempo de espera de la petición (10 s).

Un servicio sin comprobación de salud reporta cada servidor como activo: Traefik solo marca un servidor caído cuando falla un healthCheck. Los servicios weighted y mirroring no tienen servidores propios y no se cuentan.