Monitorización
monitoring es la máquina de observabilidad: Prometheus para las métricas, Loki para los logs, Tempo para las trazas, Grafana para explorarlo todo, Traefik publicándolo por HTTPS y cAdvisor informando de los propios contenedores.
Una VM, seis contenedores, cada uno en su propio proyecto de Docker Compose.
Que cada servicio sea un proyecto separado no es casualidad: con uno único, una imagen que no se puede descargar tumba los seis contenedores. Así, un tag erróneo solo afecta a su servicio.
Despliegue
La plantilla Monitoring se despliega en tres fases:
| Fase | Qué hace |
|---|---|
| 1 | Crea la VM con su disco de datos |
| 2 | Instala Docker, crea la red ingress y prepara lo que comparten los servicios |
| 3 | Despliega los seis servicios en paralelo, un trabajo por servicio |
Si algo falla, el trabajo fallido indica exactamente qué servicio fue.
| Recurso | Recomendado | Mínimo |
|---|---|---|
| vCPU | 4 | 2 |
| Memoria | 8 GiB | 4 GiB |
| Disco raíz | 32 GiB | 32 GiB |
| Disco de datos | 50 GiB | 32 GiB |
La retención es de 15 días para las tres señales. Son datos de vida corta y reproducibles, así que no tienen copia de seguridad.
Loki tarda unos tres minutos en estar listo. Su check de Nagios usa una plantilla lenta para que un reinicio no genere alertas.
Nombres y certificados
Cada servicio responde en un nombre elegido entre los alias del registro DNS de la máquina en Horizon, así que hay que crearlos antes de desplegar:
| Nombre | Servicio | Acceso |
|---|---|---|
grafana.<dominio> | Grafana | Login propio de Grafana (y Keycloak) |
prometheus.<dominio> | Prometheus | Autenticación básica |
loki.<dominio> | Loki | Autenticación básica |
tempo.<dominio> | Tempo (OTLP por HTTP) | Autenticación básica |
Traefik obtiene un único certificado de Let's Encrypt para todos ellos mediante el reto DNS-01, así que los nombres solo necesitan resolver dentro de la red, pero el dominio debe existir públicamente.
Las credenciales de ingesta son las salidas ingest_username e ingest_password del trabajo traefik. Son las que usa FluxCD para enviar la telemetría del clúster. Si ingest_password se deja vacío en el primer despliegue, se genera.
Recogida de datos
- VMs: Prometheus recoge el Node Exporter (
9100) de cada VM. Los targets de los stacks los escribe Horizon desde su página de Prometheus. - Kubernetes: el clúster envía métricas, logs y trazas a los tres endpoints. La máquina de monitorización no necesita acceso al clúster ni ninguna credencial suya, y sigue funcionando cuando se reconstruye el clúster.
- Autocontrol: Prometheus recoge sus propios servicios y avisa si alguno deja de responder.
Cambios
No hay acciones: todo ajuste es una variable de su trabajo, y editarla vuelve a ejecutar únicamente ese trabajo.
| Para | Editar |
|---|---|
| Actualizar un servicio | image_version en su trabajo |
| Cambiar una retención | settings en Prometheus, Loki o Tempo |
| Añadir un dashboard o una alerta de base | Los ficheros de services/grafana/ y volver a desplegar el trabajo grafana |
| Rotar la credencial de ingesta | ingest_password en el trabajo traefik |
Las versiones son exactas (nunca latest), de forma que actualizar es un cambio deliberado y volver atrás es poner el tag anterior.
La contraseña de administrador de Grafana, el inicio de sesión con Keycloak y el correo no son de este stack: los gestiona Horizon desde Admin › Grafana. Si el SSO falla y nadie puede entrar, la contraseña se puede restablecer en la máquina:
printf '%s' "$password" | sudo docker exec -i grafana \
grafana-cli --homepath /usr/share/grafana admin reset-admin-password --password-from-stdin
Documentación
- architecture.md: componentes, puertos, almacenamiento y tamaño.
- operations.md: fases, cambios y mantenimiento.
- networking.md: Traefik, certificados y nombres.
- alerting.md: las alertas de Grafana y su reparto con Nagios.
- kubernetes.md: el contrato con el clúster y la configuración recomendada de Alloy.