Centralización de logs de nivel producción con Graylog 6 + OpenSearch + MongoDB, lista para desplegar con Docker Compose.
La pieza que le falta a cualquier stack de observabilidad: métricas (Prometheus/Zabbix) te dicen que algo anda mal; los logs te dicen por qué. Graylog los recolecta, indexa y hace buscables en segundos.
Fuentes de logs ┌───────────────┐
┌─────────────────┐ │ │
│ Syslog (514/udp)│───────────────▶│ │
├─────────────────┤ │ Graylog 6 │ ┌────────────┐
│ GELF (12201) │───────────────▶│ │────▶│ OpenSearch │ (índices)
├─────────────────┤ │ web :9000 │ └────────────┘
│ Docker (gelf │───────────────▶│ │
│ driver) │ └──────┬────────┘ ┌────────────┐
└─────────────────┘ └─────────────▶│ MongoDB │ (config)
└────────────┘
cp .env.example .env
# Generar los dos secretos obligatorios:echo"GRAYLOG_PASSWORD_SECRET=$(openssl rand -hex 32)">> .env
echo"GRAYLOG_ROOT_PASSWORD_SHA2=$(echo -n 'tu-password-admin'| sha256sum | cut -d'' -f1)">> .env
docker compose up -d
# Web: http://localhost:9000 (admin / tu-password-admin)| Input | Puerto | Para qué |
|---|---|---|
| Syslog UDP | 5514 | routers, switches, Linux (rsyslog), equipos de red |
| GELF TCP | 12201 | Docker (log driver nativo), apps con librerías GELF |
| Raw/Plaintext TCP | 5555 | cualquier cosa que pueda mandar texto por TCP |
Un Linux con rsyslog (una línea en /etc/rsyslog.d/90-graylog.conf):
*.* @IP_DEL_GRAYLOG:5514;RSYSLOG_SyslogProtocol23Format
Contenedores Docker (log driver GELF — los logs del container van directo):
logging:
driver: gelfoptions:
gelf-address: "udp://IP_DEL_GRAYLOG:12201"tag: "{{.Name}}"Windows: agente NXLog o Winlogbeat → sidecar de Graylog.
- OpenSearch single-node con
discovery.type=single-node— un cluster ES de 3 nodos para una PyME es incendiar RAM al pedo - Heap acotada (
ES_JAVA_OPTS=-Xms1g -Xmx1g) — OpenSearch sin límite de heap se come todo el RAM del host; ajustar según el servidor - Rotación de índices configurada (índice por día, retención 30 días) — sin rotación, OpenSearch llena el disco en semanas
- Puertos mapeados no estándar (5514) — el 514 real requiere privilegios; el mapeo lo resuelve sin correr como root
- MongoDB solo para config — los logs viven en OpenSearch; Mongo guarda usuarios, dashboards y streams
Estimación práctica: ~1 KB por línea de log indexada. Un servidor típico genera 50-200 MB/día → con 30 días de retención y 10 servidores: ~15-60 GB de disco. Planificar el volumen de OpenSearch acorde.
- Métricas: infra-monitoring-stack (Prometheus)
- Alertas: Graylog puede disparar notificaciones por email/webhook igual que Alertmanager
- El combo completo para un cliente: Zabbix o Prometheus (métricas) + Graylog (logs) + mi zabbix-inventory-reporter para el informe mensual
MIT