Saltar a contenido

Métricas, salud y registros#

Además de la consola, Empowerment Center se puede vigilar desde las herramientas de su organización: un orquestador de contenedores que pregunta si el servidor está vivo, Prometheus que recoge sus cifras y un syslog o un SIEM que recibe sus registros. Esta página explica qué expone ECenter para cada uno y cómo activarlo.

Antes de empezar#

  • Lo que se configura aquí son variables de entorno del backend (véase Configuración) y se aplica al reiniciarlo.
  • /actuator no pasa por el proxy del frontal, que solo manda al backend /api/, /embed/, /.well-known/oauth-protected-resource/ y las rutas del inicio de sesión único. Las sondas y Prometheus llegan al backend directamente, por la red interna.

La salud#

Ruta Para qué Sesión
/actuator/health El estado del servidor y de la BD propia No
/actuator/health/liveness Sonda de vida para un orquestador: si falla, hay que reiniciar el contenedor No
/actuator/health/readiness Sonda de disponibilidad: si falla, el balanceador no le manda peticiones No
/api/about El producto y la versión, sin sesión ni licencia. Es lo que comprueba el healthcheck de deploy/compose.yaml No

Las BD de los clientes no cuentan en la salud: que una no responda abre la alerta BD de cliente inaccesible, pero el servidor sigue atendiendo las demás conexiones y no debe salir del balanceador.

Con Docker Compose, docker compose -f deploy/compose.yaml ps enseña los servicios como healthy cuando están listos.

Las métricas#

ECenter publica sus cifras con Micrometer. Las propias empiezan por ecenter. y llevan solo etiquetas de pocos valores (la clase de trabajo, el resultado, la gravedad…), nunca logins, nombres, conexiones ni identificadores.

Métrica Tipo Etiquetas Qué mide
ecenter.jobs.running, ecenter.jobs.queued Medidor class Trabajos en ejecución y en cola, por clase
ecenter.sessions.active Medidor — Sesiones abiertas
ecenter.workbooks.locked Medidor — Libros abiertos para escritura
ecenter.alerts.open Medidor severity Alertas operativas abiertas, por gravedad
ecenter.connections.unreachable Medidor — Conexiones cuya BD no responde
ecenter.security.logins Contador outcome (success, failure) Inicios de sesión
ecenter.querying.queries Temporizador outcome (success, failure, canceled) Sentencias contra las BD de los clientes
ecenter.distribution.deliveries Contador status, reason Entregas de las suscripciones
ecenter.distribution.evaluations Contador result Evaluaciones de las alertas de datos
ecenter.distribution.subscriptions.active Medidor — Suscripciones activas
ecenter.distribution.runs.running Medidor kind (subscription, alert) Envíos y evaluaciones en marcha
ecenter.distribution.alerts Medidor state Instancias de las alertas de datos activas, por estado
ecenter.api.requests Contador surface (query, mcp), outcome Peticiones a la API de consulta y al MCP
ecenter.api.rejections Contador surface, reason Peticiones rechazadas (límite, consulta pesada, columnas ocultas…)
ecenter.api.queries Temporizador outcome, reason Consultas de la API terminadas
ecenter.api.runs.active Medidor — Consultas de la API en curso
ecenter.api.tool.calls Contador tool, outcome Llamadas a las herramientas del MCP
ecenter.credentials.active, ecenter.credentials.expiring Medidor scope Credenciales de servicio vigentes y que caducan en 30 días
ecenter.embedding.tokens.issued, .redeemed, .rejected Contador source, stage, reason Tokens de incrustación
ecenter.embedding.sessions.active Medidor — Sesiones incrustadas vivas
ecenter.render.renders Contador result Dibujos del navegador sin interfaz
ecenter.render.duration Temporizador — Lo que tarda cada dibujo
ecenter.render.active Medidor — Dibujos en curso
ecenter.provisioning.requests Contador resource, method, outcome Peticiones de SCIM del proveedor de identidad
ecenter.metadata.impact Temporizador outcome Análisis de impacto al guardar el metadata
ecenter.usage-index.pending Medidor module Objetos que quedan por reindexar tras una actualización
ecenter.metadata.groupings.loads Contador outcome Cargas de las tablas de trabajo de las agrupaciones
ecenter.metadata.exchange Contador kind, outcome Exportaciones, análisis, importaciones y restauraciones del metadata
ecenter.portal.layout.restores Contador outcome Restauraciones de copias de plantillas
ecenter.bookmarks Medidor scope, visibility Marcadores

Están además las de Spring Boot: JVM (memoria, recolección, hilos), proceso, peticiones HTTP por plantilla de ruta y el pool de la BD propia. Los pools de las BD de los clientes no publican métricas: se ven en la consola.

Los contadores son de cada instancia y empiezan en cero al arrancarla. Con varias instancias, recoja cada una.

El puerto de gestión para Prometheus#

Prometheus recoge las métricas en su formato en /actuator/prometheus, que solo responde por un puerto de gestión aparte, pensado para la red interna y apagado por defecto.

Activarlo#

  1. Elija un puerto que no publique fuera de la red de ECenter, por ejemplo 9090.
  2. Póngalo en el fichero de entorno del backend:

    ECENTER_MANAGEMENT_PORT=9090
    

    Para atarlo a una sola interfaz, añada MANAGEMENT_SERVER_ADDRESS con su dirección.

  3. Reinicie el backend.

  4. Compruébelo desde la red interna:

    curl http://ecenter-1:9090/actuator/prometheus
    

    El resultado es texto con líneas como ecenter_jobs_running{class="cube"} 2.0 (las clases de trabajo van en minúsculas en la etiqueta class).

Cómo cambia Actuator con el puerto de gestión#

Sin puerto de gestión Con puerto de gestión
/actuator/prometheus No responde a nadie Sin sesión, en el puerto de gestión
/actuator/health y sus sondas Sin sesión, en el puerto de la aplicación Sin sesión, en el puerto de gestión
/actuator/info Sin sesión, en el puerto de la aplicación Sin sesión, en el puerto de gestión
/actuator/metrics y el resto Con una sesión de Administración del sistema Denegado (403)
/actuator en el puerto de la aplicación Sí Deja de existir

El puerto de gestión no tiene cookies, CSRF ni sesiones, y por él no llega la aplicación (/api/ no existe allí). Con él activo, apunte también las sondas del orquestador a ese puerto: http://<instancia>:<puerto>/actuator/health/liveness y /readiness.

Configurar Prometheus#

scrape_configs:
  - job_name: ecenter
    metrics_path: /actuator/prometheus
    static_configs:
      - targets: ['ecenter-1:9090', 'ecenter-2:9090']

Los nombres pasan al formato de Prometheus: ecenter.jobs.running es ecenter_jobs_running, y los contadores llevan _total (ecenter_api_requests_total).

Los registros#

El backend escribe su registro en la salida estándar. Con Docker Compose se lee con:

docker compose -f deploy/compose.yaml logs -f backend

deploy/compose.yaml hace que los registros roten: el controlador json-file de Docker con 5 ficheros de 50 MB como mucho por servicio. Sin rotación, los registros crecerían sin tope, porque cada acceso es una línea. Si su organización recoge los registros con journald o syslog, cambie el controlador en el ancla x-logging de deploy/compose.yaml, y la rotación pasa a ser la de ese sistema.

Loggers que interesan#

Logger Qué escribe Nivel por defecto
ecenter.operations.alert Una línea por alerta operativa que se abre (ERROR o WARN) o se resuelve (INFO), y el arranque Activo
ecenter.audit Una línea por entrada de la auditoría, en ecenter.audit.<categoría> info
ecenter.audit.query Una línea por consulta a una BD de cliente warn (apagado)
ecenter.audit.job Una línea por trabajo terminado warn (apagado)

Los niveles se cambian como cualquier propiedad de Spring Boot. Por ejemplo, para sacar también las consultas al registro:

LOGGING_LEVEL_ECENTER_AUDIT_QUERY=info

Las líneas de la auditoría y cómo llevarlas a un syslog o un SIEM se explican en el capítulo de Auditoría.

Qué buscar en el registro#

  • Al arrancar, el identificador de la instalación («Instalación …»), que es el que pide Action Ware para la licencia.
  • Un fallo interno de una petición: «Fallo interno en una petición de …» con la traza. Es lo que hay detrás de un 500 INTERNAL_ERROR o de un trabajo fallido con «Error interno al calcularlo».
  • El correo sin configurar: «Hay avisos de operación por correo pero no hay servidor de correo (spring.mail.host)», una sola vez.
  • Un aviso que no se pudo enviar: «No se pudo avisar por correo: …».

Véase también#