Saltar al contenido principal

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:

FaseQué hace
1Crea la VM con su disco de datos
2Instala Docker, crea la red ingress y prepara lo que comparten los servicios
3Despliega los seis servicios en paralelo, un trabajo por servicio

Si algo falla, el trabajo fallido indica exactamente qué servicio fue.

RecursoRecomendadoMínimo
vCPU42
Memoria8 GiB4 GiB
Disco raíz32 GiB32 GiB
Disco de datos50 GiB32 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.

información

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:

NombreServicioAcceso
grafana.<dominio>GrafanaLogin propio de Grafana (y Keycloak)
prometheus.<dominio>PrometheusAutenticación básica
loki.<dominio>LokiAutenticació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.

ParaEditar
Actualizar un servicioimage_version en su trabajo
Cambiar una retenciónsettings en Prometheus, Loki o Tempo
Añadir un dashboard o una alerta de baseLos ficheros de services/grafana/ y volver a desplegar el trabajo grafana
Rotar la credencial de ingestaingest_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​