CreaRack-SL

AIInsight · Modelo monitoring

Entidadactiveverificado Sat Aug 29#monitoring#model#ai#cns#itsm

AIInsight · Modelo monitoring

Propósito

AIInsight es el registro central del diagnóstico generado por CNS (CreaRack Network Sentinel). Cada instancia encapsula el análisis de una anomalía: causa raíz detectada por IA, comandos correctivos sugeridos, nivel de riesgo y trazabilidad ITSM completa (SLA, grupo de incidentes, runbook). Transita por el ciclo pending → executing → applied/acknowledged/failed/expired.

Contrato

Campos principales:

CampoTipoDescripción
incident_idUUIDFieldIdentificador único global auto-generado
case_numberPositiveIntegerFieldSecuencial por organización (CNS-000042)
organizationFK(Organization)Tenant propietario
targetFK(MonitoringTarget)Dispositivo que originó la anomalía
summaryCharField(200)Resumen breve
root_causeTextFieldCausa raíz identificada
confidence_scoreFloatFieldConfianza del modelo (0.0-1.0)
osi_layerIntegerField(null)Capa OSI afectada (1-7)
risk_levelTextChoicesLOW / MEDIUM / HIGH
commandsJSONFieldComandos correctivos
rollback_commandsJSONFieldComandos de reversión
statusTextChoicespending/executing/applied/acknowledged/expired/failed
ai_providerCharField(20)gemini o static
anomaly_triggerTextFieldDescripción original de la anomalía
raw_snmp_dataJSONField(null)Telemetría SNMP cruda
raw_ssh_logsTextField(null)Logs SSH crudos
sla_ack_deadlineDateTimeFieldLímite SLA para acknowledgement
sla_resolve_deadlineDateTimeFieldLímite SLA para resolución
sla_ack_breachedBooleanFieldFlag de brecha SLA
incident_groupFK(IncidentGroup, null)Correlación (SET_NULL)
known_issueFK(KnownIssue, null)Problema conocido (SET_NULL)
suggested_runbookFK(Runbook, null)Runbook auto-asignado
expires_atDateTimeFieldTTL: created_at + episode_ttl() — 4h por defecto, 48h si category=CONNECTIVITY (desde v1.87.2, task #239)

Métodos y propiedades:

  • case_id — etiqueta formateada CNS-XXXXXX.
  • is_expired — True si timezone.now() > expires_at.
  • is_actionable — True si PENDING, no expirado y commands no vacío.
  • episode_ttl() — (v1.87.2) devuelve el TTL del episodio a aplicar: 48h si category == Category.CONNECTIVITY, 4h en el resto. Una avería de conectividad se cierra por recuperación (auto_resolve_connectivity_insights), no por esta caducidad — la caducidad es solo red de seguridad para equipos que el Agente deja de reportar del todo.
  • save() — auto-asigna expires_at (+episode_ttl()) y auto-incrementa case_number por org bajo un advisory lock de PostgreSQL (pg_advisory_xact_lock, namespace _CASE_LOCK_NAMESPACE=4272 — distinto del 4271 de la flota en terminal/fleet_lifecycle.py) con lock_timeout='3s'. Antes era un leer-luego-escribir sin bloqueo que chocaba contra unique_case_number_per_org cuando dos insights de la misma org se creaban a la vez (hallazgo #20); el lock es de asesoramiento (no bloquea la fila real de core_organization, que otras vistas también escriben) para no colgar el ORM async bajo el Daphne único de PROD — cola de auditoría B, task #286, 04-09-2026 (commit fbcfec01).

Meta:

  • Orden: -created_at.
  • Índices: (organization, status), (target, -created_at), (status, expires_at), (status, sla_ack_deadline).
  • unique_together: (organization, case_number).

Dependencias entrantes

MóduloArchivoRol
insight_servicemonitoring/services/insight_service.pyCrea, aplica, revierte, expira — orquesta ciclo de vida
escalation_servicemonitoring/services/escalation_service.pyEscala pending/executing según EscalationPolicy
correlation_servicemonitoring/services/correlation_service.pyAgrupa en IncidentGroup por target/subnet/causa
sla_servicemonitoring/services/sla_service.pyCalcula deadlines, detecta brechas, MTTA/MTTR
API insightsmonitoring/api/insights.pyREST: consulta, acknowledge, purge
API insight_executionmonitoring/api/insight_execution.pyEndpoint de aplicación vía Agent — apply/rollback exigen Agente conectado antes de mutar el insight y revierten el estado si el despacho falla (cola de auditoría B, task #286)

Dependencias salientes

  • core.Organization — FK CASCADE.
  • monitoring.MonitoringTarget — FK CASCADE.
  • core.User — 3 FKs opcionales: applied_by, acknowledged_by, revised_by.
  • monitoring.IncidentGroup — FK SET_NULL.
  • monitoring.KnownIssue — FK SET_NULL.
  • monitoring.Runbook — FK SET_NULL (auto-asignado por _match_runbook()).
  • AIInsightAuditLog — una entrada por transición.
  • monitoring.consumers.broadcast_insight — difusión WS al Observatory, gated por cns:view desde la cola de auditoría B.

Ejemplos

# Creación desde insight_service.create_insight()
insight = await AIInsight.objects.acreate(
    organization=org,
    target=target,
    summary=result.diagnosis.summary[:200],
    root_cause=result.diagnosis.root_cause,
    confidence_score=result.diagnosis.confidence_score,
    risk_level=result.recommendation.risk_level,
    commands=result.recommendation.commands,
    rollback_commands=result.recommendation.rollback_commands,
    status=AIInsight.Status.PENDING,
    ai_provider=provider.name,
    anomaly_trigger=anomaly_description,
)

Rate limiting: máx 5 insights/dispositivo/hora y 100/tenant/hora. Si Gemini falla, fallback a static_rules.

  • entity--monitoring--model--monitoringtarget — origen de cada insight.
  • entity--monitoring--model--insightconversation — Q&A posterior al diagnóstico.
  • concept--monitoring--cns — sistema productor de insights.
  • feature--monitoring--sentinel-episodio-unico — dedup por episodio y su TTL (episode_ttl()).
  • incident--20260904--cola-auditoria-b-cns-insights — tanda de auditoría que introdujo el advisory lock de case_number y el gate de permiso del WS.

Véase también

  • [[entity—monitoring—model—monitoringtarget]]
  • [[entity—monitoring—model—insightconversation]]
  • [[concept—monitoring—cns]]
  • [[feature—monitoring—sentinel-episodio-unico]]
  • [[incident—20260904—cola-auditoria-b-cns-insights]]