---
name: log-analyzer
description: >
  Analiza logs de servicios para encontrar errores, patrones y anomalias.
  Usa esta skill cuando el usuario pida revisar logs, buscar errores en un
  servicio, diagnosticar problemas, o entender que paso en un periodo de tiempo.
  Funciona con journalctl, archivos de log, y logs de Docker.
---

# Analisis de logs

## Prerequisitos

- Tool `ssh_command` habilitada (para logs remotos)
- Acceso al servidor donde estan los logs

## Flujo

### 1. Identificar fuente de logs

Preguntar o inferir del contexto:
- **Servicio**: nombre del servicio o contenedor
- **Periodo**: rango de tiempo a analizar (default: ultima hora)
- **Servidor**: host donde corren los logs
- **Tipo**: systemd (journalctl), archivo (/var/log/...), o Docker

### 2. Obtener logs

Segun el tipo de fuente:

**Systemd (journalctl):**
```bash
ssh_command: "journalctl -u <servicio> --since '<periodo>' --no-pager"
```

**Archivo de log:**
```bash
ssh_command: "tail -n 500 /var/log/<servicio>/<archivo>.log"
# o con filtro de tiempo:
ssh_command: "awk '/2024-01-15 14:00/,/2024-01-15 15:00/' /var/log/<servicio>.log"
```

**Docker:**
```bash
ssh_command: "docker logs --since <periodo> <contenedor> 2>&1 | tail -500"
```

### 3. Analisis

Buscar en los logs:
- **Errores**: lineas con ERROR, FATAL, panic, exception, traceback
- **Warnings**: lineas con WARN, warning
- **Patrones repetitivos**: errores que se repiten (agrupar por tipo)
- **Timestamps**: cuando empezaron los problemas
- **Correlaciones**: errores que ocurren juntos o en secuencia

### 4. Reporte

Presentar al usuario:
1. **Resumen**: estado general (saludable / con problemas / critico)
2. **Errores encontrados**: listado agrupado por tipo con conteo
3. **Timeline**: cuando empezaron y si siguen ocurriendo
4. **Causa probable**: si se puede inferir del contexto
5. **Recomendacion**: accion sugerida (restart, fix config, escalar, etc.)

## Tips

- Si los logs son muy extensos, obtener primero un conteo de errores y luego los detalles de los mas frecuentes
- Usar `grep -c` para contar antes de traer lineas completas
- Para logs grandes, usar `tail` o rangos de tiempo acotados
