Descripción general — qué hace
Infraestructura ▸ Alertas (/infra/alert) es la consola de grupos de alerta (políticas). Un operador añade condiciones de cuatro áreas (sistema / web / BD / seguridad) a una única política (infr_alert_policy), ajusta en pantalla el factor de cada umbral y, cuando se produce un incumplimiento, los destinatarios del grupo (infr_alert_recipient) reciben una notificación por SMS/correo de forma automática.
Sustituye a la antigua página «Capacidad y alertas» (/infra/capacity), que ahora redirige aquí.
Características clave:
- Una política es un paquete de supervisión: gravedad, supresión de repeticiones (enfriamiento), áreas, condiciones, canales y destinatarios conviven en una sola tarjeta. Cree varias políticas separadas por equipo o turno (p. ej. «Guardia nocturna de infraestructura», «Operaciones de seguridad»).
- Evaluación y envío están separados:
AlertEvaluatorevalúa las condiciones;AlertDispatcherabre las alertas y las envía. Ambos son compartidos por el botón [Comprobar ahora] de la consola y por el comando programadoinfr:eval-alerts. - Deduplicación, enfriamiento, envío por lotes y cierre automático: los incumplimientos repetidos se agrupan en una sola alerta, durante el enfriamiento se suprimen los reenvíos, las notificaciones de una política se agrupan en un único mensaje (evita avalanchas de SMS) y las alertas se cierran automáticamente cuando el incumplimiento desaparece.
- Datos en vivo de solo lectura: sistema desde
server_status, BD desdeinfr_db_metric, seguridad desde las tablas de detección delegacy_glory, y web desde un sondeo HTTP en vivo. La caducidad de certificados web recorreinfr_web_certde forma global.
Esta pantalla gestiona únicamente políticas, alertas e historial de envíos. Para gráficas por servidor consulte Servidores; para disponibilidad web, Servicio ▸ Web; para carga de BD, Servicio ▸ Base de datos. Los valores predeterminados de los umbrales se definen en Política de operaciones.
Cuándo usarla
- Quiere aviso inmediato cuando la carga media o el espacio libre en disco de un servidor cruzan una línea de peligro.
- Quiere avisar a la guardia cuando una URL de aterrizaje está caída (estado inesperado / sin respuesta) o responde con lentitud.
- Quiere vigilancia continua de la renovación automática TLS fallida en servicios web registrados (certificado a punto de caducar).
- Quiere alertas cuando la cola de espera de una BD registrada se acumula o el recuento horario de consultas lentas se dispara.
- Quiere difundir señales de incumplimiento al equipo: avalanchas de alertas IDS, picos de bloqueos por anomalía de IA, picos de IP recién bloqueadas.
Disposición
Cuadrícula de tarjetas de política
Cada política se muestra como una tarjeta que resume su interruptor de actividad, la insignia de gravedad, las áreas habilitadas y el número de destinatarios, con estas acciones:
| Acción | Descripción | Acceso |
|---|---|---|
| Interruptor activo/pausado | is_active — si el planificador la evalúa |
nivel≥2 |
| Editar | Modal de áreas, condiciones, canales y destinatarios | nivel≥2 |
| Comprobar ahora | Evaluar y enviar esta política de inmediato (run) |
nivel≥2 |
| Probar | Enviar ahora un correo/SMS de prueba a los destinatarios (test) |
nivel≥2 |
| Eliminar | Borrar la política y sus destinatarios | nivel≥2 |
| Reordenar arrastrando | Orden de visualización/evaluación (seq, reorder) |
nivel≥2 |
Modal de edición (áreas, condiciones, canales, destinatarios)
- Básico: nombre, gravedad (info/warn/crit), supresión de repeticiones (minutos), activa, nota.
- Áreas de alerta: habilitar sistema / web / BD / seguridad (sistema activado de forma predeterminada).
- Condiciones: por cada área habilitada, activado/desactivado + factor de umbral (véase el catálogo de condiciones más abajo).
- Canales: SMS y correo. El envío real requiere un proveedor en Adaptadores de correo/Adaptadores SMS; la tarjeta avisa cuando no hay ningún proveedor configurado.
- Destinatarios (repetidor): nombre, correo, teléfono + casillas
via_mail/via_sms. El canal efectivo es la intersección de los canales de la política ∩ los via_* del destinatario.
Flujo de alertas recientes
Muestra infr_alert ordenado por last_seen descendente, hasta 60 filas (sondeo cada 30 s). Cada fila muestra el valor observado, el umbral, el count agregado y los envíos ok/total (desde infr_alert_delivery), con las transiciones de estado [Confirmar] y [Cerrar].
Cómo usarla
1) Cree una política
- [Nuevo grupo de alerta] → introduzca nombre, gravedad y enfriamiento.
- Habilite las áreas que quiera vigilar.
- Para cada área, habilite condiciones y ajuste los factores de umbral. Los valores predeterminados se rellenan desde
alertDefaults()de Política de operaciones. - Elija los canales (SMS/correo) y añada destinatarios.
- Guarde.
2) Catálogo de condiciones
Sistema (server_status, ventana de seq)
| Condición | Interruptor | Factor | Predeterminado | Métrica emitida |
|---|---|---|---|---|
| Carga media por encima de | sys_load_on |
sys_load_max |
20 | load_avg (>20, por servidor) |
| Disco libre por debajo de | sys_disk_on |
sys_disk_free_mb |
500 | disk_free (<500MB) |
- El objetivo son todos los servidores de forma predeterminada (
targets.system.all=true); puede acotarlo a los alias seleccionados (máx. 200). - La instantánea lee solo la última ventana de seq (
distinct seq desc limit 3) para evitar consultas lentas (heredado de HealthService). Los servidores desconectados o sin datos no se evalúan: un servidor debe tenerloadavgen los 2 últimos ciclos para considerarse en línea. - El disco libre usa la partición más ajustada entre
df-,df-dataydf-home(DfParse::availableGb).
Web (sondeo HTTP en vivo · infr_web_cert)
| Condición | Interruptor | Factor | Predeterminado | Métrica emitida |
|---|---|---|---|---|
| Servicio caído (estado ≠ esperado) | web_code_on |
web_expect_code |
200 | http_status |
| Latencia por encima de | web_latency_on |
web_latency_ms |
5000 | latency |
| Caducidad de certificado inminente | web_cert_on |
web_cert_hours |
48 | cert_expiry |
- Las URL objetivo provienen de
targets.web.urls[](con etiquetas, máx. 30 por política). Cada ciclo de evaluación las solicita directamente medianteHttp::connectTimeout(4)->withoutVerifying()->get(). Un estado distinto del esperado, o un fallo de conexión/tiempo de espera agotado, se trata como servicio caído (cuando la condición de código está activada). - La caducidad de certificado es un único interruptor, pero el barrido es global: independientemente de las URL objetivo de la política, recorre los registros de
infr_web_certde todos los dominios de todos los servicios web registrados y genera un incumplimiento por cada dominio que caduque dentro del umbral (web_cert_hours, 48 h de forma predeterminada), hasta 50 por evaluación. Los certificados se actualizan en una rotación de 6 horas mediante WebProbeService. Así se detecta una renovación automática fallida antes de que la caducidad sorprenda a nadie.
Con solo habilitar «Caducidad de certificado inminente» se vigila el certificado de todos los sitios. No funciona por sitio: es un barrido global de todos los dominios.
Base de datos (última muestra de infr_db_metric)
| Condición | Interruptor | Factor | Predeterminado | Métrica emitida |
|---|---|---|---|---|
| Cola de espera creciente | db_waiting_on |
db_waiting_max |
5 | db_waiting (>=5) |
| Consultas lentas por hora | db_slow_on |
db_slow_per_hour |
60 | db_slow (slow_qps×3600 >= 60) |
- Los objetivos son
targets.database.collectors[](claves de recolectores con access=database). Si no se selecciona ningún objetivo, no se evalúa nada. - Lee
DbCollectorService::latest($collector), pero solo evalúa muestras que esténoky tengan menos de 10 minutos (evita falsos positivos por datos obsoletos). Registre y recopile mediante Recolectores de BD.
Seguridad (tablas de detección de legacy_glory · compuesta)
La ventana de evaluación es sec_window_min (10 min de forma predeterminada). Cualquier señal que supere su umbral provoca un incumplimiento.
| Condición | Interruptor | Factor | Predeterminado | Origen |
|---|---|---|---|---|
| Gravedad + recuento de IDS | sec_ids_on |
sec_ids_severity, sec_ids_count |
2, 20 | suricata_alert_ct (gravedad≥S, recuento en ventana≥N) |
| Pico de bloqueos por anomalía de IA | sec_kitsune_on |
sec_kitsune_count |
5 | kitsune_detail_log (is_blocked=1, recuento≥N) |
| Pico de IP recién bloqueadas | sec_blacklist_on |
sec_blacklist_count |
10 | blacklist_info (created_at nuevo dentro de la ventana, recuento≥N) |
Relacionado: Amenazas · Detecciones · Lista de bloqueo.
3) Comprobar ahora / Probar
- [Comprobar ahora] (
run): ejecutaevaluate()→handle()para esta única política de inmediato y devuelve un resumen de incumplimientos/envíos (breaches :b · sent :s) junto con el flujo actualizado. Úselo para confirmar que una condición dispara de verdad sin esperar al planificador. - [Probar] (
test): envía ahora mismo un correo/SMS de prueba a los destinatarios activos para confirmar que el canal funciona (independiente de cualquier incumplimiento: es una comprobación de salud del proveedor).
4) Evaluación automática (programación)
Las políticas activas se evalúan y se envían automáticamente cada minuto.
Schedule::command('infr:eval-alerts --quiet-if-ok')
->everyMinute()
->withoutOverlapping(2)
->onOneServer()
->when($is_leader);
Ejecuciones manuales:
# Evaluar todas las políticas activas (una sola pasada, termina después — no es un demonio)
php artisan infr:eval-alerts
# Solo una política
php artisan infr:eval-alerts --policy=12
# Silenciar la salida cuando no hay incumplimientos (predeterminado del planificador)
php artisan infr:eval-alerts --quiet-if-ok
infr:eval-alertses un comando de una sola pasada que termina (recorre las políticas y retorna). Nunca lo convierta en un demonio de bucle infinito: lanzar desde el planificador un demonio que nunca termina agota las conexiones compartidas de base de datos (véase la lección de la fuga de conexiones de pulse:check). El planificador arranca con seguridad una instancia nueva cada minuto.
Orígenes de datos
Tablas de escritura (nuevas infr_)
| Tabla | Migración | Función |
|---|---|---|
infr_alert_policy |
000700 | Grupo de alerta (política). JSON de scopes/targets/conditions/channels + gravedad, cooldown_min, seq |
infr_alert_recipient |
000701 | Destinatarios por política (en línea). email/phone + via_mail/via_sms/is_active/seq |
infr_alert |
000702 | Instancia de alerta (registro de disparo / cola de triaje). Clave de deduplicación (policy_id, metric, entity_key, status='open'), enfriamiento por notified_at |
infr_alert_delivery |
000703 | Historial de envíos. channel/address/ok/provider_code/message_id/error/latency_ms |
Orígenes de lectura (heredados + nuevos, solo lectura)
- Sistema:
server_status(conexiónlegacy, part=loadavg/df-*). - Web: GET HTTP en vivo (URL objetivo) +
infr_web_cert(caducidad de certificado). - BD:
infr_db_metric(alimentada por los recolectores con access=database). - Seguridad:
suricata_alert_ct,kitsune_detail_log,blacklist_infoenlegacy_glory.
Flujo de deduplicación / enfriamiento / cierre automático
AlertEvaluator::evaluate($policy)→ matriz de candidatos a incumplimiento por área activa. Las excepciones de un área quedan aisladas (que falle un área no bloquea al resto).AlertDispatcher::handle($policy, $breaches):- Cada incumplimiento se busca por
(policy_id, metric, entity_key, status=open)→ si se encuentra, se actualiza ycount++; si no, se inserta uno nuevo (first_seen, count=1, notified_at=null). - Notificable = nuevo O
notified_atnull Onotified_at <= now - cooldown_min. - Cierre automático: las alertas abiertas de esta política que no aparecen entre los incumplimientos de esta ronda →
status='closed'. - Envío por lotes: las alertas notificables se agrupan en un único mensaje por destinatario y canal (cuerpo de 8 líneas como máximo, con «+N more» para el excedente; SMS limitado a 140 caracteres). Tras el envío, cada objetivo pasa a
notified_at=now. - Una fila de
infr_alert_deliverypor cada (destinatario, canal).
- Cada incumplimiento se busca por
Acceso
| Operación | Nivel mínimo | Auditoría |
|---|---|---|
| Ver consola/lista/flujo (index/list/feed) | 1 (lectura) | — |
| Guardar/eliminar/reordenar política (save/delete/reorder) | 2 (escritura) | alert_policy.create / .update / .delete |
| Confirmar/cerrar alerta | 2 | alert.ack / alert.closed |
| Comprobar ahora (run) | 2 | alert.fire al enviar |
| Envío de prueba (test) | 2 | alert.test |
| Envío automático programado | (sistema) | alert.fire |
Escala de niveles: demo=1 · staff=5 · admin=10. Las lecturas requieren nivel≥1; las escrituras y los envíos requieren nivel≥2. Todas las operaciones destructivas o de envío quedan registradas en infr_audit_log (véase Registro de auditoría). Los proveedores de los canales de envío los configura un administrador (nivel≥10).
Resolución de problemas y preguntas frecuentes
P. He habilitado una condición pero no llega ninguna alerta.
- Confirme que la política está activa y que el planificador (
schedule:work/ supervisor de producción) está en ejecución. - No hay proveedor de canal: consulte el aviso de la tarjeta y configure un proveedor predeterminado en Adaptadores de correo/Adaptadores SMS.
- Compruebe que la intersección de
via_mail/via_smsdel destinatario con los canales de la política no está vacía y que el correo y el teléfono están rellenados. - Durante el enfriamiento se suprimen los reenvíos (
cooldown_min, 30 min de forma predeterminada). Use [Comprobar ahora] para verificarlo al momento, pero una alerta ya notificada solo se reenvía cuando pasa el enfriamiento.
P. Mis condiciones de BD/sistema siguen en silencio.
- Sistema: el servidor objetivo debe estar en línea (loadavg en los 2 últimos ciclos de seq) para ser evaluado. Desconectado o sin datos se omite.
- BD: la última muestra de
infr_db_metricdebe estar ok y tener menos de 10 minutos. Confirme que el recolector está en marcha en Recolectores de BD.
P. ¿La caducidad de certificado vigila solo un sitio concreto?
- No.
web_cert_ones un barrido global: recorreinfr_web_certpara todos los dominios de todos los servicios web registrados, independientemente de las URL objetivo de la política.
P. ¿El mismo incumplimiento se va acumulando?
- No. Se agrega sobre una única alerta abierta identificada por
(policy_id, metric, entity_key)(count++). Cuando el incumplimiento desaparece, la siguiente evaluación la pasa automáticamente aclosed.
P. ¿El sondeo web ralentiza la evaluación?
- Las URL están limitadas a 30 por política, con un tiempo de espera de conexión de 4 s y un tiempo de espera corto basado en la latencia. La instantánea del sistema lee solo la ventana de seq para evitar consultas lentas.
Relacionado
- Política de operaciones — define los valores predeterminados de los umbrales (
alertDefaults()) - Adaptadores de correo · Adaptadores SMS — proveedores de los canales de envío
- Servicio ▸ Web — origen de certificados/disponibilidad (
infr_web_cert) - Recolectores de BD — origen de la condición de BD (
infr_db_metric) - Servidores · Estado — origen de la condición de sistema (
server_status) - Amenazas · Lista de bloqueo — orígenes de las condiciones de seguridad
