Fase 5.2
Workflow 2

Log Analysis · Loki → LLM → Discord

Cada hora, este workflow consulta Loki buscando errores en los logs del cluster, procesa los resultados con JavaScript para optimizar el uso de tokens, los analiza con LLM y genera un reporte de salud del sistema en Discord.

01

Flujo del Workflow

Cinco nodos. A diferencia del Workflow 1 que es reactivo (webhook), este es proactivo (cron). No espera a que algo falle — busca proactivamente patrones de error en los logs.

1
Schedule TriggerCron — cada hora

Dispara el workflow automaticamente cada hora (0 * * * *). No requiere intervencion manual.

El schedule de n8n usa sintaxis cron estandar. Se puede ajustar la frecuencia sin modificar el resto del workflow.
2
HTTP RequestQuery Loki

GET a la API de Loki consultando logs con nivel ERROR o WARN de las ultimas 2 horas en el namespace aiops.

URL: http://loki.aiops.svc.cluster.local:3100/loki/api/v1/query_range. Query: {namespace="aiops"} |~ "(?i)(error|warn|fail|critical)". Limit: 50 lineas.
3
CodeProcesar resultados

JavaScript que agrupa los logs por servicio, limita a 20 lineas para no exceder tokens del LLM, y limpia timestamps y metadata innecesaria.

Toma el array de streams de Loki, extrae los valores, agrupa por app label, y genera un resumen estructurado para el prompt del LLM.
4
HTTP RequestLLM Analysis

Envia los logs procesados al LLM para que identifique patrones, priorice problemas y sugiera acciones.

El prompt pide: resumen de problemas detectados, frecuencia de cada uno, prioridad (alta/media/baja), y recomendaciones. Respuesta en Markdown para Discord.
5
HTTP RequestDiscord Report

Envia el analisis del LLM a Discord como un mensaje estructurado con embed.

Si no hay errores, envia un mensaje corto: 'Log Analysis: sin errores detectados en la ultima hora'. Si hay, envia el reporte completo del LLM.
02

Query de Loki

La query busca patrones de error en los logs usando regex. Se limita a 50 resultados para mantener el tiempo de respuesta bajo y no saturar al LLM con tokens innecesarios.

HTTP Request — Query Loki
GET http://loki.aiops.svc.cluster.local:3100/loki/api/v1/query_range

Query Params:
  query: {namespace="aiops"} |~ "(?i)(error|warn|fail|critical)"
  start: {{ $now.minus(7200) }}
  end:   {{ $now }}
  limit: 50
03

Procesamiento con JavaScript

El nodo Code procesa los resultados de Loki antes de enviarlos al LLM. Agrupa por aplicacion, limita lineas y limpia metadata. Sin este paso, los logs crudos excederian el limite de tokens del modelo.

Nodo Code — JavaScript
// Procesar resultados de Loki para el LLM
const streams = $input.first().json.data.result;
if (!streams || streams.length === 0) {
  return [{ summary: 'No errors found' }];
}

// Agrupar por app y limitar lineas
const byApp = {};
streams.forEach(s => {
  const app = s.stream.app || 'unknown';
  if (!byApp[app]) byApp[app] = [];
  s.values.forEach(v => byApp[app].push(v[1]));
});

// Limitar a 20 lineas total
let lines = [];
Object.entries(byApp).forEach(([app, logs]) => {
  lines.push(`--- ${app} (${logs.length} errors) ---`);
  lines = lines.concat(logs.slice(0, 5));
});

return [{ logSummary: lines.slice(0, 20).join('\n') }];
03

Variantes del Workflow

El workflow de analisis de logs tiene dos variantes complementarias que corren con diferentes frecuencias.

Daily Health Report
Cada dia a las 8:00 AM
Consulta 3 metricas de Prometheus (disponibilidad 24h, memoria, pods activos) y genera un reporte formateado en Discord. Es el resumen matutino del estado del cluster.
Pod Restart Detector
Cada 15 minutos
Consulta Prometheus buscando pods con mas de 3 reinicios en la ultima hora. Disenio silencioso — solo notifica si encuentra algo. Evita fatiga de alertas.

Siguiente: Workflow 3 — Incident Simulation

El momento de la verdad: grabar el loop completo crash → alerta → LLM → Discord. La demo que va en el README del proyecto.

Simulation