Este bot está diseñado para integrarse con un stack ELK (Elasticsearch, Logstash, Kibana) y enviar eventos relevantes a un canal de Discord. Es útil para la monitorización en tiempo real de logs del sistema y servicios como PostgreSQL, Nginx, Apache, etc.
- Python 3.8+
- Logstash instalado y correctamente configurado
- Stack ELK funcional (Elasticsearch y Kibana)
- Bot de Discord configurado (token)
- Acceso de escritura a los archivos de log
Para que el bot pueda leer los logs procesados por Logstash, necesitas añadir una salida personalizada en tu configuración de Logstash. Esto se hace editando (o creando) el archivo de configuración correspondiente, por ejemplo:
Ruta sugerida:
/etc/logstash/conf.d/30-elasticsearch-output.conf
output {
stdout {
codec => rubydebug {
metadata => true # Esto permite que los logs aparezcan en consola
}
}
file {
path => "/var/log/logst.log"
codec => json_lines
create_if_deleted => true
}
}
Esto generará un archivo de logs en formato JSON que será leído por el bot para enviar eventos a Discord.
---
## Instalación
Clona el repositorio en tu máquina:
```bash
git clone https://github.com/Stuocs/ELK_discord_bot.git
cd ELK_discord_botCrea un entorno virtual e instala las dependencias:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtEdita el archivo .env para añadir tu token de Discord y configurar el ID del canal donde quieres enviar los logs:
DISCORD_TOKEN=tu_token_aquí
DISCORD_CHANNEL_ID=123456789012345678Asegúrate también de que el archivo bot.py tenga las rutas adecuadas para los logs del sistema. En especial, la línea correspondiente al log de Logstash:
'logstash': '/var/log/logst.log'Lanza el bot con:
python bot.pySi todo está configurado correctamente, el bot se conectará a Discord y comenzará a monitorizar los logs definidos en su configuración, enviando alertas relevantes al canal especificado.
- El bot utiliza
globpara resolver rutas con comodines comopostgresql-*.log. - Lee periódicamente los archivos de log definidos.
- Si detecta nuevos eventos relevantes, los formatea y los envía al canal de Discord.
- Los mensajes se formatean con información útil como timestamp, tipo de evento y contenido del log.
El bot está diseñado para soportar los siguientes servicios (configurables en el código):
syslogauth.logkern.logiptableslogstashnginxapache2mysqlpostgresql
#Es posible que de fallos referentes a algunas rutas dependiendo tanto de la versión como la del sistema opertivo así como si hay diferencias en la configuración sugerida en el documento
Puedes añadir o modificar las rutas de log directamente en el diccionario raw_paths dentro de bot.py.
- Asegúrate de que el usuario que ejecuta el bot tenga permisos de lectura sobre los archivos de log.
- Puedes ajustar los filtros en Logstash para enviar solo los eventos que te interesen al archivo
/var/log/logst.log.
Este proyecto está licenciado bajo los términos del repositorio original.