Visión general: qué hace
Visión general del servicio es la primera pantalla del menú principal Servicio (/service): un panel de operaciones en vivo y curado para los servicios (demonios) en ejecución. El operador elige a mano los servicios que le importan y los dispone como tarjetas de prioridad. Cada tarjeta muestra un conjunto de métricas en vivo propio de su tipo, la primera tarjeta web/db/session (la de mayor prioridad) alimenta un medidor de disponibilidad y una franja inferior dibuja las series temporales en vivo de las tarjetas seleccionadas.
Rasgos clave:
- La selección y el orden viven en el navegador (localStorage): no se guarda nada en el servidor. Incluso para la misma cuenta, la disposición del panel puede diferir de un navegador a otro.
- Solo lectura y ligero:
ServiceBoardService(caché de 15 segundos) unifica los subsistemas subyacentes (web, BD, sesión, Catálogo) en una única forma canónica de tarjeta. La pantalla no abre nuevas conexiones directas a servidores remotos (salvo la muestra de frescura puntual de la tarjeta de BD; véase más abajo). - Solo alcanzabilidad lógica / carga. El escaneo físico de puertos abiertos y exposición corresponde a Cortafuegos (frontera de roles).
Este panel no es una flota de demostración: todo son datos reales. Las fuentes de las métricas son las tablas que los recolectores ya rellenan:
infr_web_metric,infr_db_metric,infr_redis_metriceinfr_service(Catálogo).
Cuándo usarlo
- Para echar un vistazo a un puñado de servicios centrales (por ejemplo, el sitio web insignia, la BD principal, el Redis de sesiones) en una sola pantalla al comienzo del turno.
- Como cuadro de mando NOC / panel de pared (el botón de pantalla completa y los deslizadores de altura lo ajustan a la pantalla).
- Para comprobar la tendencia reciente de un servicio (1h / 6h / 1d) como serie temporal.
- Como punto de partida: hágase una idea aquí y luego profundice en Web, Base de datos, Sesiones o Catálogo para el detalle.
Disposición
Franja superior de KPI
Resumen para toda la organización calculado por realKpi() (se actualiza con el sondeo de 30 segundos):
| KPI | Significado | Fuente |
|---|---|---|
| Tráfico web | RPS total + ancho de banda de todos los servicios web registrados | WebMetricService::kpi(dashboard()) |
| Carga de BD | Suma del último QPS almacenado + total de conexiones de los recolectores access=database | DbCollectorService::latest() |
| Disponibilidad web | Disponibilidad en 24 h | WebProbeService::availabilityOrPassive() (primero la sonda activa) |
| Latencia | Respuesta media de la sonda (ms) | ídem |
| Incidencias | Incidencias abiertas en los últimos 7 días | InfrIncident created_at ≥ now-7d |
La disponibilidad web y la latencia prefieren la sonda sintética activa. Los contadores de tráfico vts pasivos, por sí solos, diagnostican mal las caídas sin tráfico, los 5xx ocultos tras un 3xx y los reinicios de contador, así que el panel usa los resultados de sonda HTTP reales de
WebProbeService. Si la sonda todavía no se ha ejecutado (sin cobertura), se recurre al modo pasivo (web24h).
Medidor de disponibilidad del servicio
Se dibuja a partir de la primera tarjeta web/db/session en orden de prioridad (si ninguno de esos tres tipos está en el panel, se muestra una pista de marcador de posición).
| Tipo de tarjeta | Forma del medidor | Valor central | Regla de tono |
|---|---|---|---|
| web | rosquilla de códigos de respuesta en 4 segmentos | REQ (RPS actual) | 2xx=good · 3xx=info · 4xx=warn · 5xx=crit |
| database | arco de saturación de conexiones (conn_pct) | QPS | ≥90 crit · ≥70 warn · en otro caso good |
| session | arco de tasa de aciertos | OPS | ≥90 good · ≥70 warn · en otro caso crit |
Panel de servicios (cuadrícula de tarjetas)
Los servicios seleccionados se disponen como tarjetas en orden de prioridad. Cada tarjeta muestra un conjunto de KPI distinto según el tipo:
| Tipo | Demonio por defecto | Cabecera (alias) | KPI principales |
|---|---|---|---|
| web | nginx | dominio representativo | latencia · RPS · sesiones abiertas (conexiones activas) · peticiones acumuladas en 24 h · tasa de error |
| database | mysql/mariadb/postgres/mongo | alias del recolector | QPS · plazas (usadas/máx.) · saturación · en ejecución · bloqueo (ms medios de bloqueo de fila) · total de slow · en espera |
| session | redis | alias del nodo | OPS · tasa de aciertos · clientes (sesiones actuales) · claves · saturación (% de memoria usada) |
| proxy | software_key/proxy | alias de la instancia | dependencias (+N) · latencia · puertos a la escucha |
| docker | software_key/docker | alias de la instancia | dependencias (+N) · latencia · puertos a la escucha |
- Las tarjetas se reordenan con el asa de arrastre (SortableJS): el orden del DOM pasa a ser la prioridad (
sel) y se persiste en localStorage. - La ✕ de la esquina superior derecha de la tarjeta la quita del panel.
- Las tarjetas proxy/docker no tienen rosquilla de disponibilidad ni serie temporal (solo web/db/session).
Servicio en vivo (serie temporal inferior)
Las tarjetas seleccionadas que tienen serie (web/db/session) se dibujan como minigráficos SVG de área+línea en una cuadrícula de 2 columnas. Cada gráfico lleva una regla (líneas de rejilla verticales + etiquetas HH:MM de inicio/medio/fin) para identificar la línea de tiempo. Un selector de rango (1h · 6h · 1d) en la parte superior cambia la ventana (1h por defecto).
Controles de cabecera
- Interruptor LIVE: activa o desactiva el sondeo de 30 segundos.
- Botón de pantalla completa: oculta la navegación superior y ocupa todo el cuerpo (ESC para salir · mixin
fullscreen·body.infr-fs). - Dos deslizadores de altura: altura de la tarjeta del panel (118px por defecto, 90–240) y altura del gráfico en vivo (50px por defecto, 34–160). Los valores de ajuste se persisten en localStorage.
Cómo usarlo
1) Elegir servicios
- Haga clic en [Elegir servicios] / [Añadir servicio] en la cabecera del panel para abrir el modal de selección.
- El modal agrupa todos los servicios disponibles por tipo (web → database → session → proxy → docker).
- Active (✓) o desactive los servicios. La selección se refleja de inmediato en el panel y se guarda en localStorage.
Valor por defecto en la primera visita = se selecciona automáticamente el primer elemento de web, database y session, de modo que el medidor de disponibilidad funcione sin más. Deseleccione en el modal si no los quiere.
2) Ajustar la prioridad
- Agarre el asa de arrastre de una tarjeta y muévala. La tarjeta web/db/session que quede la primera pasa a ser el objetivo del medidor de disponibilidad.
3) Cambiar la ventana temporal
- Use los botones 1h / 6h / 1d de la franja en vivo inferior. Al cambiar se emite
POST /service/series, que vuelve a obtener las métricas representativas de las tarjetas seleccionadas en esa ventana (submuestreadas a 60 puntos como máximo); si la respuesta viene vacía, se recurre a la serie incluida en la tarjeta.
// Ejemplo de petición POST /service/series
{ "keys": ["web:12", "db:db@blue", "session:blue"], "range": "6h" }
Convenio de clave de tarjeta:
web:{infr_web_service.id}
db:{infr_collector.key} p. ej. db@blue
session:{node_alias} p. ej. blue
proxy:{infr_service.id}
docker:{infr_service.id}
4) Panel de situación a pantalla completa
- Botón de pantalla completa → ajuste con los deslizadores la altura de tarjetas y gráficos para encajar en la pantalla de un panel NOC montado en pared.
Fuentes de datos
| Tipo de tarjeta | Constructor | Tablas reales |
|---|---|---|
| web | WebMetricService::dashboard() + WebProbeService::overlayStatus() |
infr_web_metric (contadores vts) · infr_web_check (sonda activa) · infr_web_service |
| database | InfrCollector(access=database) + DbCollectorService::latest()/series() |
infr_db_metric · infr_collector |
| session | RedisMetricService::dashboard() |
infr_redis_metric · infr_instance |
| proxy/docker | InfrService(kind IN proxy,container) |
infr_service · infr_instance |
| Incidencias del KPI | — | infr_incident (últimos 7 días) |
Fuentes de las series temporales:
- web: delta del
request_counterdel dominio principal / nodo principal eninfr_web_metric→ RPS (evita mezclar contadores de varios nodos). - database:
infr_db_metric.qps(métrica almacenada, sin conexión en vivo). - session:
infr_redis_metric.instantaneous_ops_per_sec.
Tokens de estado
| Token | Significado |
|---|---|
| up | correcto |
| degraded | degradado |
| down | caída (fallo real de conexión o sonda) |
| pending | en espera (juicio aplazado, p. ej. por retraso de datos) |
Evitar el falso rojo de la tarjeta de BD: en modo de recolección economy, si la recolección se retrasa brevemente y la última muestra tiene más de 5 minutos,
statusOfdevuelvedownpor motivo de obsolescencia. La base de datos está bien, pero vería una alarma roja, así que el panel degrada ese down obsoleto apendingy reserva down solo para un fallo real de conexión (ok=false). Además, únicamente cuando hay un usuario presente mirando el panel, si la última muestra tiene más de 45 segundos se toma una muestra puntual medianteensureFresh(45)(que no hace nada ni abre conexión si el planificador ya está recolectando), y ese muestreador purga la conexión en un bloque finally para evitar fugas.
Acceso
- Lectura (visualización): cualquier usuario autenticado (demo=1 en adelante).
/serviceestá en el grupoinfr.authsin ninguna restricción de nivel adicional. - Sin escrituras: esta pantalla es puramente de lectura. La selección de tarjetas, el orden, las alturas y el rango se guardan solo en el localStorage del navegador; no se escribe nada en el servidor. Al no haber ninguna acción destructiva, tampoco se registra ningún log de auditoría.
- Las escrituras en las pantallas de detalle (gestión de sitios web de Web, Base de datos, construcción/edición de Catálogo) se controlan allí (por ejemplo, nivel≥2).
Claves de localStorage:
infr:svcboard:sel:v1 array de claves de servicio seleccionadas (orden = prioridad)
infr:svcboard:h:v1 valores de los deslizadores de altura de panel/vivo
infr:range:service-overview rango de la serie temporal inferior (1h/6h/1d)
Resolución de problemas y preguntas frecuentes
El panel está vacío. Use [Añadir servicio] en la cabecera para colocar los servicios que le importan. Si no hay ningún servicio disponible (los recolectores todavía no han rellenado datos), los grupos del selector pueden parecer vacíos: verifique primero el registro de Recolectores y la cadena de recolección.
No aparece el medidor de disponibilidad. El medidor necesita una primera tarjeta web/db/session en orden de prioridad. Si solo ha elegido proxy/docker, verá una pista de marcador de posición. Coloque al menos una tarjeta web/db/session cerca del principio.
La serie temporal inferior está vacía. Solo las tarjetas web/db/session tienen serie; proxy/docker quedan excluidas. Además, si la tabla de origen no tiene datos en la ventana elegida (1h/6h/1d), el gráfico saldrá vacío.
Una tarjeta de BD está roja pero la base de datos está bien.
El retraso de datos se degrada a pending (gris/en espera). Si sigue en down, se trata de un fallo real de conexión: revise la pantalla Base de datos y el estado del recolector access=database en Recolectores.
Las tarjetas persisten al recargar / se ven distintas en otro PC. La selección y el orden pertenecen al localStorage del navegador, no a un ajuste de cuenta en el servidor. Son independientes por navegador y por dispositivo.
Quiero una ventana de 5 minutos. La implementación actual ofrece ventanas de 1h · 6h · 1d (1h por defecto). Para una observación más corta, use pantallas dedicadas como Servidores o Base de datos.
Relacionado
- Servicio ▸ Web: monitorización vts en vivo de los sitios registrados + disponibilidad por sonda activa
- Servicio ▸ Base de datos: carga de BD por conexión directa y análisis de esquema
- Servicio ▸ Sesiones: capacidad y rendimiento de las sesiones en Redis
- Servicio ▸ Catálogo: derivar servicios del libro de versiones (origen de proxy/docker)
- Administración ▸ Recolectores: registro de recolectores (fuente de métricas)
- Tiempo real / sondeo: cómo funciona la actualización en vivo
