← Todos los posts

Observabilidad · · Lectura de 12 min

Instala Graylog Open en Debian con Data Node

Esta guía ofrece instalación nativa en Debian 12 x86_64 y Docker Compose en Debian 12 o 13. La exposición pública, DNS, TLS y firewall siguen bajo control del administrador.

Elige la ruta soportada

Graylog usa MongoDB para metadatos y Graylog Data Node para gestionar el backend OpenSearch compatible. Data Node es la arquitectura recomendada; no instales OpenSearch 3 por separado.

  • Nativa: solo Debian 12, x86_64 y AVX.
  • Docker Compose: Debian 12 o 13 en x86_64 o ARM64, después de instalar Docker Engine y Compose.
  • Usa al menos 4 GiB RAM, 2 vCPU y 20 GiB libres; 8 GiB, 4 vCPU y 50 GiB son una referencia práctica.

Ejecuta primero el pre-check

El pre-check verifica sistema, arquitectura, CPU, recursos, puertos, servicios existentes, vm.max_map_count y la imagen MongoDB fijada. Se detiene antes de cambiar el host ante una incompatibilidad.

sh
curl -fsSL https://scripts.lrq.lat/graylog/v1.0.0/install.sh | sudo bash

Abre el menú portátil. Elige Docker Compose en Debian 13 o ARM64.

sh
curl -fsSL https://scripts.lrq.lat/graylog/v1.0.0/install.sh | sudo bash -s -- preflight --mode docker

Ejecuta solo las verificaciones Docker sin crear la pila.

Instala con Docker Compose

Instala primero Docker Engine y el plugin Compose moderno. El instalador crea configuración restringida en /opt/lrqnet/graylog, usa volúmenes persistentes y fija cada imagen por digest OCI. La interfaz se enlaza a localhost por defecto.

sh
curl -fsSL https://scripts.lrq.lat/graylog/v1.0.0/install.sh | sudo bash -s -- install --mode docker

Ejecuta el pre-check, pide la contraseña inicial sin eco, genera el password secret compartido e inicia MongoDB, Data Node y Graylog.

sh
ssh -L 9000:127.0.0.1:9000 admin@graylog-host

Crea un túnel SSH para abrir http://127.0.0.1:9000 localmente sin exponer el puerto 9000.

Instalación manual y segura con Docker Compose

Usa esta ruta auditable si no quieres ejecutar un instalador de una línea. Es el procedimiento manual para Debian 12 y 13 en x86_64 o ARM64. La interfaz inicial permanece privada y la guía no configura DNS, TLS ni firewall.

sh
sudo sysctl -w vm.max_map_count=262144
printf 'vm.max_map_count=262144\n' | sudo tee /etc/sysctl.d/99-graylog.conf >/dev/null
sudo docker compose version

Aplica el requisito de map-count en un archivo dedicado y confirma Compose moderno. No continúes con menos de 4 GiB RAM, dos vCPU o 20 GiB libres.

sh
sudo install -d -m 0750 /opt/lrqnet/graylog
read -rsp 'Contraseña inicial del administrador Graylog: ' GRAYLOG_ADMIN_PASSWORD; printf '\n'
read -rsp 'Confirma la contraseña: ' GRAYLOG_ADMIN_PASSWORD_CONFIRM; printf '\n'
[ "$GRAYLOG_ADMIN_PASSWORD" = "$GRAYLOG_ADMIN_PASSWORD_CONFIRM" ] || { echo 'Las contraseñas no coinciden' >&2; exit 1; }
[ "${#GRAYLOG_ADMIN_PASSWORD}" -ge 12 ] || { echo 'Usa al menos 12 caracteres' >&2; exit 1; }
GRAYLOG_PASSWORD_SECRET="$(openssl rand -hex 48)"
GRAYLOG_ROOT_PASSWORD_SHA2="$(printf '%s' "$GRAYLOG_ADMIN_PASSWORD" | sha256sum | awk '{print $1}')"
unset GRAYLOG_ADMIN_PASSWORD GRAYLOG_ADMIN_PASSWORD_CONFIRM

Crea el directorio restringido, solicita la contraseña sin eco, la valida localmente, genera el secreto compartido y deriva el SHA-256 requerido por Graylog. La contraseña no se guarda en el historial ni en el archivo Compose.

yaml
services:
  mongodb:
    image: mongo:8.0.16@sha256:4b58ebcb1dc7a7b4e84cd8ce9098d48764ae4478876898ff9551acf2ac4a6a6d
    restart: unless-stopped
    volumes: [mongodb-data:/data/db]
  datanode:
    image: graylog/graylog-datanode:7.1.6-1@sha256:4867cd8ad09ee7a129c0898fe326b0b638928d984789072eb3640fef42fccf5d
    restart: unless-stopped
    depends_on: [mongodb]
    environment:
      GRAYLOG_DATANODE_PASSWORD_SECRET: ${GRAYLOG_PASSWORD_SECRET}
      GRAYLOG_DATANODE_ROOT_PASSWORD_SHA2: ${GRAYLOG_ROOT_PASSWORD_SHA2}
      GRAYLOG_DATANODE_MONGODB_URI: mongodb://mongodb:27017/graylog
      GRAYLOG_DATANODE_OPENSEARCH_HEAP: 2g
    volumes: [datanode-data:/var/lib/graylog-datanode]
  graylog:
    image: graylog/graylog:7.1.6-1@sha256:b9a4fd841e4c49c148043265f579554a3bdadf8137ff381b686c194ccb9a3365
    restart: unless-stopped
    depends_on: [mongodb, datanode]
    environment:
      GRAYLOG_PASSWORD_SECRET: ${GRAYLOG_PASSWORD_SECRET}
      GRAYLOG_ROOT_PASSWORD_SHA2: ${GRAYLOG_ROOT_PASSWORD_SHA2}
      GRAYLOG_MONGODB_URI: mongodb://mongodb:27017/graylog
      GRAYLOG_HTTP_BIND_ADDRESS: 0.0.0.0:9000
      GRAYLOG_HTTP_EXTERNAL_URI: http://127.0.0.1:9000/
    ports: ["127.0.0.1:9000:9000/tcp"]
    volumes: [graylog-data:/usr/share/graylog/data]
volumes:
  mongodb-data:
  datanode-data:
  graylog-data:

Guárdalo como /opt/lrqnet/graylog/docker-compose.yml después de revisar las versiones de imagen. El mapeo expone Graylog solo en localhost; MongoDB y Data Node no se publican en la red.

sh
sudo install -m 0600 /dev/null /opt/lrqnet/graylog/.env
sudo sh -c 'printf "%s\n" "GRAYLOG_PASSWORD_SECRET=$1" "GRAYLOG_ROOT_PASSWORD_SHA2=$2" > /opt/lrqnet/graylog/.env' sh "$GRAYLOG_PASSWORD_SECRET" "$GRAYLOG_ROOT_PASSWORD_SHA2"
sudo chmod 0640 /opt/lrqnet/graylog/docker-compose.yml
sudo docker compose --project-directory /opt/lrqnet/graylog config
sudo docker compose --project-directory /opt/lrqnet/graylog up -d

Escribe los dos secretos generados en un archivo legible solo por root, valida la configuración resuelta antes de cambiar el estado e inicia la pila persistente. Después ejecuta unset GRAYLOG_PASSWORD_SECRET GRAYLOG_ROOT_PASSWORD_SHA2.

Instalación nativa en Debian 12 x86_64

Úsala solo si la VM expone AVX. El instalador bloquea Debian 13, ARM64 y CPU sin AVX en lugar de usar un repositorio MongoDB no soportado. En Proxmox, revisa el impacto de CPU type host, reinicia la VM y verifica la flag de nuevo.

sh
grep -w avx /proc/cpuinfo
curl -fsSL https://scripts.lrq.lat/graylog/v1.0.0/install.sh | sudo bash -s -- install --mode native

Confirma AVX e instala MongoDB 8.0, Graylog Data Node y Graylog Open desde repositorios soportados de Debian 12.

Completa el preflight de Graylog

El primer inicio abre el flujo propio de preflight. Usa localmente la credencial temporal emitida por Graylog, crea o importa la CA de Data Node y luego usa la contraseña administrativa elegida. No registres la credencial temporal en tickets, historial ni logs externos.

sh
sudo docker compose --project-directory /opt/lrqnet/graylog ps

Muestra el estado de los contenedores. En instalación nativa, usa systemctl status mongod graylog-datanode graylog-server.

Validación, backup y mantenimiento

Mantén respaldo de los volúmenes y del .env restringido. Las actualizaciones deben ser deliberadas: revisa notas y compatibilidad antes de cambiar imágenes o paquetes.

sh
sudo docker compose --project-directory /opt/lrqnet/graylog ps
sudo docker compose --project-directory /opt/lrqnet/graylog logs --tail=100 graylog datanode

Comprueba contenedores y logs recientes. Revísalos localmente porque la primera ejecución puede contener una credencial temporal.

sh
sudo docker compose --project-directory /opt/lrqnet/graylog down

Detiene la pila sin eliminar volúmenes. No uses --volumes sin intención explícita de borrar datos.

Script y release