Monitorización

Sondas de salud para un balanceador de carga o Kubernetes, métricas de Prometheus y la página Estado

  1. Sondas de salud
  2. Métricas de Prometheus
  3. La página Estado
    1. Comprobaciones
    2. Información

Sondas de salud

Dos endpoints indican a un balanceador de carga, al healthcheck de un contenedor o a Kubernetes si un proceso puede recibir tráfico. Ninguno necesita inicio de sesión, y ninguno devuelve nada sobre la configuración:

Endpoint Responde Úsalo para
/api/v2/live 200 con {"status":"live"} mientras el proceso esté en marcha Una sonda de liveness: reinicia el proceso cuando deje de responder
/api/v2/ready 200 con {"status":"ready"}, o 503 con {"status":"not ready","reason":"..."} Una sonda de readiness: envía tráfico solo a los procesos listos

Un proceso está listo cuando se cumple todo esto:

  • no se está apagando (stopping)
  • la base de datos responde (database unreachable)
  • el esquema existe (schema not provisioned) y está completo, con todas las tablas, columnas e índices de esta versión (schema not upgraded); esta última comprobación se guarda en caché durante 30 segundos, así que una sonda cada pocos segundos sigue siendo barata

Bajo un BASE_URL las rutas empiezan por él, por ejemplo /ansibleforms/api/v2/ready. Un entorno de ejecución (RTE) responde a las mismas sondas en /live y /ready, sin la comprobación de que el esquema esté completo; no está listo mientras vacía sus trabajos al apagarse, así que no se le envía ningún trabajo nuevo. Un RTE saliente tampoco está listo (not connected to the app) hasta que su socket hacia la aplicación está abierto. Un proceso arrancado con AF_ROLE=worker no tiene interfaz web: solo responde a /api/v2/version y a /health para el healthcheck de su contenedor. Consulta Escalado para los roles.


Métricas de Prometheus

Define METRICS_TOKEN como una cadena aleatoria larga para servir métricas de Prometheus. Un proceso que sirve la aplicación web responde en /api/v2/metrics, y un RTE en /metrics:

scrape_configs:
  - job_name: ansibleforms
    metrics_path: /api/v2/metrics
    authorization:
      type: Bearer
      credentials: <METRICS_TOKEN>
    static_configs:
      - targets: ['forms01.example.com:8000']

Sin METRICS_TOKEN los endpoints responden 404, como si no existieran, y una petición sin la cabecera Authorization: Bearer <token> correcta recibe 401. Cada proceso informa de sus propias cifras, así que recoge las de todos:

Métrica Qué mide
af_process_*, af_nodejs_* El proceso: CPU, memoria, retardo del bucle de eventos, recolección de basura
af_http_requests_total{route,method,status} Las peticiones atendidas
af_http_request_duration_seconds{route} Cuánto tardaron
af_jobs{status} Los trabajos en ejecución (running) o pendientes de aprobación (approve) en este momento
af_jobs_ended_24h{status} Los trabajos que terminaron en las últimas 24 horas, por estado
af_nodes{role,alive} Los procesos registrados en la base de datos, por rol, vivos o no
af_login_failures_total, af_login_lockouts_total Los inicios de sesión fallidos y los bloqueos de cuenta
af_rte_running_jobs, af_rte_max_jobs En un RTE: los playbooks que ejecuta ahora, y cuántos puede ejecutar a la vez
af_rte_socket_connected En un RTE en modo socket: 1 mientras su socket hacia la aplicación está abierto, 0 cuando no

Las cifras de trabajos y de nodos se leen de la base de datos en cada recogida. Cuando la base de datos no responde se omiten, y la recogida se completa igualmente con las demás métricas.


La página Estado

La página Estado, en Configuración > Sistema, muestra a los usuarios con la opción de rol showSettings cómo va la instancia. Solo lee, así que actualizarla nunca envía correo ni lanza un trabajo. Tiene dos pestañas, y el número de problemas aparece en la etiqueta de la pestaña Comprobaciones.

Comprobaciones

Cada comprobación está en verde (correcta), ámbar (requiere atención) o rojo (un problema), con sus detalles al desplegar la fila:

Comprobación Qué examina
Conexión a la base de datos La base de datos responde
Usuario de la base de datos Ámbar cuando el usuario tiene permisos sobre todas las bases de datos, como root, en lugar de solo sobre AnsibleForms.*
Esquema de base de datos Existen todas las tablas, columnas e índices de esta versión, y, si no, qué parche falló
Planificador Un worker ejecuta las tareas del sistema, y ninguna ha dejado de programarse
Nodos Los procesos registrados en la base de datos, en ámbar cuando ejecutan versiones distintas
Trabajos Los trabajos en ejecución y los pendientes de aprobación, en ámbar cuando un trabajo lleva más de 24 horas en ejecución
Herramientas de copia de seguridad El comando de volcado de MYSQLDUMP_COMMAND existe, y su versión
Última copia de seguridad Ámbar cuando no hay ninguna o la más reciente tiene más de dos días, rojo cuando no tiene un volcado utilizable
Bloqueo del diseñador Quién tiene el bloqueo del diseñador, en ámbar cuando lo tiene desde hace más de 8 horas
Repositorios Rojo cuando un repositorio falló o no tiene copia de trabajo en disco
Seed de configuración El archivo de la semilla de configuración se puede leer y analizar, y su última recarga funcionó
Almacenes de secretos Todos los almacenes de secretos responden, en ámbar cuando el token de un HashiCorp Vault caduca pronto
Runners Todos los runners responden, en ámbar cuando no hay ninguno o no hay un RTE predeterminado
Expresiones del servidor Ámbar cuando EXPRESSION_SANITIZER vale legacy
Secretos Ámbar cuando ENCRYPTION_SECRET es el valor público predeterminado o ACCESS_TOKEN_SECRET no está definido
LDAP El servidor LDAP es accesible y su certificado TLS es válido, sin iniciar sesión en él
Almacenamiento de trabajos El tamaño de las tablas de trabajos, en ámbar por encima de 1 GB cuando no hay retención de trabajos definida
Carpetas con permiso de escritura Se puede escribir en todas las carpetas configuradas
Espacio en disco El disco que contiene las copias de seguridad, en ámbar desde el 85% de uso y en rojo desde el 95%

Información

Datos de la instancia que no llevan veredicto, lo primero que se pide en una conversación de soporte: la versión de AnsibleForms, la URL base, la versión y el host de la base de datos, el origen de la configuración, la semilla de configuración, los ajustes de retención, los métodos de autenticación, el servidor del canal de correo activo, el nivel y la ruta del log, el tiempo en marcha, la zona horaria, la versión de Node.js y la plataforma.

La página lee /api/v2/health, que requiere un usuario con sesión iniciada y showSettings. Para un sistema de monitorización, usa las sondas y las métricas descritas arriba.