Envío de logs de Mysql a servidores remotos

Si queremos enviar los logs de las consultas que recibe nuestra base de datos Mysql a un servidor de logs remoto, ya que esto no es posible mediante directivas de configuración en el fichero my.cnf, podemos hacer uso de las funcionalidades del servicio rsyslog, en concreto las que nos ofrecen los módulos imfile y omrelp para monitorizar los cambios que se produzcan en ficheros y reenviar dichos cambios al sistema remoto de logs.

Para ello, vamos a suponer que tenemos configurado el fichero my.cnf de nuestro servidor de base de datos (BBDD) para que genere los siguientes logs:
general_log_file = /var/log/mysql/mysql.log
log-error = /var/log/mysql/mysql.err
slow_query_log_file = /var/log/mysql/mysql-slow.log

En primer lugar, debemos instalar los módulos de rsyslog necesarios. En caso de utilizar una distribución CentOS, se haría mediante:

yum install librelp
yum install rsyslog-relp

A continuación configuramos, en el fichero /etc/rsyslog.conf, la monitorización de dichos ficheros por parte del servicio rsyslog del equipo que hace de servidor de BBDD:

# Modificaciones para poder enviar los logs de mysql a los servidores de logs
$ModLoad imfile.so
$ModLoad omrelp.so

# Fichero /var/log/mysql/mysql.log
$InputFileName /var/log/mysql/mysql.log
$InputFileTag mysql
$InputFileStateFile /var/log/mysql/mysql.state
$InputFileFacility local4
$InputFileSeverity notice
$InputRunFileMonitor

# Fichero /var/log/mysql/mysql.err
$InputFileName /var/log/mysql/mysql.err
$InputFileTag mysql-err
$InputFileStateFile /var/log/mysql/mysql-err.state
$InputFileFacility local5
$InputFileSeverity error
$InputRunFileMonitor

# Fichero /var/log/mysql/mysql-slow.log
$InputFileName /var/log/mysql/mysql-slow.log
$InputFileTag mysql-slow
$InputFileStateFile /var/log/mysql/mysql-slow.state
$InputFileFacility local6
$InputFileSeverity warn
$InputRunFileMonitor

local4.notice @servlogs.eps.ua.es
local5.error @servlogs.eps.ua.es
local6.warn @servlogs.eps.ua.es

# Fin de las modificaciones para poder enviar los logs de mysql a los servidores de logs

A modo de ejemplo, se han utilizado las facilities y severities local4.notice, local5.error y local6.warn.

Tras reiniciar el servidor rsyslog en nuestro servidor de BBDD, monitorizará los logs generados por el servidor de Mysql y los reenviará al servidor servlogs.eps.ua.es.

Por último, deberemos configurar en el fichero /etc/rsyslog.conf de nuestro servidor de logs, servlogs.eps.ua.es, el servicio rsyslog para recibir y filtrar adecuadamente los logs que le envía el servidor de BBDD:


# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514

local4.notice /var/log/mysql.log
local5.error /var/log/mysql-err.log
local6.warn /var/log/mysql-slow.log

Tras reiniciar el servicio rsyslog, ya se almacenarán los logs de Mysql enviados por nuestro servidor de BBDD en dicho servidor de logs en los ficheros especificados.

Deja un comentario