jueves, 5 de marzo de 2009

Centralizando logs con Syslog-ng, Mysql y php-syslog-ng

Syslog-ng es un demonio que corre a la espera de registros de logs, basicamente utilizado para cuando las virtudes del clasico Syslog no alcanzan. Las mejores caracteristicas se describen a continuación:
  • Centralizado de logs en un único servidor
  • Almacenamiento en multiples bases de datos.
  • Disponibilidad de herramientas de análisis con interfaz web (como el phpsyslog-ng)
  • Compatibilidad con sistemas operativos de MS.

A continuación se detalla el procedimiento para la instalación en un servidor Ubuntu Server 8.10 en donde se almacenaran los eventos de varios servidores Linux y Windows en una base de datos Mysql y serán visualizados con la interfaz web que proporciona el phpsyslog-ng.

Para ello es necesario contar con:
  • Syslog-ng [1]
  • Servidor Web Apache [1]
  • Php [1]
  • Base de datos Mysql Server [1]
  • php-syslog-ng [2]
  • NTsyslog-ng [3]

Nota: El php-syslog-ng quedó freezado en sourceforge en la versión 2.9.1.x . Para versiones posteriores (acutalmente la 2.9.8l) descargar el instalador de http://code.google.com/p/php-syslog-ng/

Configuración del syslog-ng:

Hay que modificar el archivo /etc/syslog-ng/syslog-ng.conf agregando la siguiente linea de destino:


destination d_mysql {
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs (host, facility, priority, level, tag, datetime, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") template-escape(yes));
};


y en las secciones src y log agregar las siguientes líneas:

source net { udp(); };


log { source(net); destination(d_mysql); };

Luego debemos crear un programa, el cual leerá el pipe generado por el syslog-ng (ver destination) y enviará los INSERTs a la base de datos mysql.

en /etc/syslog-ng/syslog2mysql.sh escribimos:


#!/bin/bash

if [ ! -e /var/log/mysql.pipe ]
then
mkfifo /var/log/mysql.pipe
fi
while [ -e /var/log/mysql.pipe ]
do
mysql -u mysqlfeeder --password=miPassWord syslog < /var/log/mysql.pipe >/dev/null
done


Y le damos permiso de ejecución:

chmod +x /etc/syslog-ng/syslog2mysql.sh


Recordar agregar un usuario mysqlfeeder con permiso de INSERT para la base syslog.


Descomprimimos el phpsyslog-ng en /usr/share/syslog-ng y agregamos un vhost en el apache (sino se puede descomprimir en el /var/www y acceder con http://127.0.0.1/)

Dentro de /install tendremos una serie de pantallas que nos iran llevando por la instalación típica.


Instalación del cliente MS Windows:

Sencillamente descargamos el instalados del NTsyslog y lo instalamos en el sistema a monitorear. El servidor se define en la siguiente clave de registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\SaberNet]"Syslog"="IP-Server_Syslog-NG"

Mediante el acceso directo generado se puede ararncar/parar el servicio, y configurar que logs serán enviados a nuestro servidor.


Instalación del cliente Linux

Despues de instalar (apt-get nuevamente) el syslog-ng, solo debemos agregar las siguientes lineas al archivo de configuración:

destination dest_server0102{udp("syslog-ng.midominio.com" port(514));};
log { source(s_all); destination(dest_server0102); };



[1] Instalacion vía el comando apt-get
[2] http://code.google.com/p/php-syslog-ng/
[3] http://ntsyslog.sourceforge.net/

No hay comentarios: