¿Cómo enviar las salidas de rsyslog a una base de datos MongoDB?

Guía rápida para almacenar eventos de syslog en MongoDB usando el módulo ommongodb de rsyslog.

1) Requisitos previos

Instalación en Debian/Ubuntu:

sudo apt-get update
sudo apt-get install rsyslog-mongodb

Instalación en RHEL/CentOS/Fedora:

sudo yum install rsyslog-mongodb

2) Cargar el módulo ommongodb

Edita /etc/rsyslog.d/mongodb.conf (o /etc/rsyslog.conf) y añade:

# Cargar el módulo de salida a MongoDB
module(load="ommongodb")

# Enviar todos los eventos a MongoDB
action(type="ommongodb"
       server="127.0.0.1"           # IP/host de MongoDB
       serverport="27017"           # Puerto de MongoDB
       db="rsyslog"                 # Base de datos destino
       collection="syslog"          # Colección destino
)

3) Estructura de los documentos

Por defecto, ommongodb inserta documentos similares a:

{
  "timestamp": "2025-08-20T10:45:30Z",
  "host": "mi-servidor",
  "sys": "authpriv",
  "severity": "notice",
  "msg": "Usuario root ha iniciado sesión"
}

4) Probar la configuración

  1. Reinicia rsyslog:
sudo systemctl restart rsyslog
  1. Genera un evento de prueba:
logger "Prueba de envío a MongoDB desde rsyslog"
  1. Verifica en MongoDB:
mongosh
use rsyslog
db.syslog.find().pretty()

5) (Opcional) Plantillas y filtros

Puedes definir una plantilla para controlar los campos enviados:

template(name="MongoTemplate" type="list") {
    property(name="timereported" dateFormat="rfc3339")
    constant(value=" ")
    property(name="hostname")
    constant(value=" ")
    property(name="syslogtag")
    constant(value=" ")
    property(name="msg")
}

action(type="ommongodb"
       server="127.0.0.1"
       db="rsyslog"
       collection="syslog"
       template="MongoTemplate")

6) Consideraciones

db.syslog.createIndex({ "timestamp": 1 })

© 2025 — Guía breve ommongodb.

Volver a todas las píldoras