Instalando un servidor de logs. RSyslog + phpLogCon + MySQL
Cuando el número de dispositivos en una red aumenta, así como los servicios, resulta difícil mantener los mensajes de registros que generan cada uno de ellos. Un modo de centralizar estos mensajes es montando un servidor de logs, donde cada dispositivo o servicio enviará sus mensajes a este.
Existen varios productos de pago que cumplen estas necesidades, pero en nuestro caso vamos a usar software de código abierto, en concreto una combinación de RSyslog y phpLogCon. Con RSyslog recibimos los mensajes clientes y los almacenamos en un servidor de bases de datos MySQL, para posteriormente ser consultados mediante una gestión web con phpLogCon.

La instalación la vamos a realizar en una máquina virtual Debian Lenny 5 ejecutada en VMware Player 3. Con una instalación base disponible iremos instalando los componentes necesarios hasta tener nuestra solución. Los pasos que seguiremos durante el artículo son los siguientes:
- Instalar herramientas de compilación.
- Instalar y configurar MySQL.
- Descargar e instalar RSyslog.
- Configurar RSyslog.
- Instalar y configurar Apache + PHP.
- Descargar e instalar phpLogCon.
- Configurar phpLogCon.
Instalar herramientas de compilación
El primer paso es instalar las herramientas de compilación necesarias, para ella ejecutamos el siguiente comando:
apt-get install build-essential
Cuando aparezcan las dependencias necesarias, pulsamos la tecla intro para comenzar la instalación.
Instalar y configurar MySQL
Una vez instaladas las herramientas de compilación, vamos a instalar un servidor MySQL, para ello ejecutamos el siguiente comando:
apt-get install mysql-server libmysqlclient15-dev
Cuando aparezcan las dependencias necesarias, pulsamos la tecla intro para comenzar la instalación.
A continuación aparece el asistente de configuración, el primer parámetro a introducir es la contraseña del usuario root de MySQL, tecleamos la contraseña y pulsamos la tecla intro.
Repetimos la contraseña y pulsamos de nuevo la tecla intro.
El siguiente paso es crear una base de datos donde RSyslog guardará la información recibida, para ello ejecutamos el comando:
mysqladmin -u root -p create rsyslog
Introducimos la contraseña del usuario root y pulsamos la tecla intro.
Ahora vamos a crear un usuario MySQL que será usado por RSyslog para almacenar la información en la base de datos anteriormente creada, para ello ejecutamos el siguiente comando:
mysql -u root -p
Una vez conectados a nuestro servidor MySQL, ejecutamos los siguientes comandos para crear el usuario y asignarlos a la base de datos anteriormente creada.
GRANT SELECT, INSERT, UPDATE, DELETE ON rsyslog.* TO '<usuario_rsyslog>'@'localhost' IDENTIFIED BY '<contraseña_usuario_rsyslog>';
Descargar e instalar RSyslog
Una vez creada la base de datos para nuestro RSyslog y asignados los permisos al usuario también creado, vamos a bajar las últimas fuentes estables de la aplicación, para ello nos dirigimos a su sitio oficial y copiaremos el enlace para posteriormente descargarlo en nuestra máquina virtual mediante el comando wget.
Una vez hemos copiado la dirección de enlace, nos ubicamos en el directorio /usr/local/src y ejecutamos los siguientes comandos:
cd /usr/local/src
wget <dirección_de_enlace>
Una vez descargado el paquete nos situamos en el directorio /tmp y ejecutamos el siguiente comando:
cd /tmp
tar xzvf /usr/local/src/rsyslog-5.2.0.tar.gz
Una vez descomprimido el paquete, nos situamos en el directorio creado y configuramos el instalador con los siguientes comandos:
cd rsyslog-5.2.0
./configure --enable-mysql
Una vez configurado el instalador ejecutamos los siguientes comandos:
make
make install
Configurar RSyslog
El siguiente paso es crear las tablas necesarias en la base de datos que creamos anteriormente, para ello tenemos que editar primero el script SQL que se encuentra en el directorio /tmp/rsyslog-5.2.0/plugins/ommysql. Realizaremos una copia del script createDB.sql, donde editaremos a que base de datos ejecutar el script. Para ello ejecutamos los siguientes comandos:
cd /tmp/rsyslog-5.2.0/pluging/ommysql
cp createDB.sql createDB.sql.orig
vi createDB.sql
Comentar la línea la primera línea introduciendo #.
En la segunda línea cambiar la base de datos Syslog por rsyslog.
mysql -u root -p < createDB.sql
Una vez creada la base de datos totalmente, vamos a parametrizar el fichero de configuración de RSyslog, que se encuentra en /etc/rsyslog.conf. Para ello realizaremos una copia de seguridad del fichero rsyslog.conf, para posteriormente configurar el módulo MySQL y añadir el parámetro para almacenar los registros en la base de datos. Para ello ejecutamos los siguientes comandos:
cd /etc
cp rsyslog.conf rsyslog.conf.orig
vi rsyslog.conf
En el apartado ## MODULES ## agregamos las líneas
# provee conexion a MySQL
$ModLoad ommysql
Al final del fichero agregamos las líneas
# almacena TODOS los logs en MySQL
*.* :ommysql:<IP_servidor>,<base_de_datos>,<usuario_mysql>,<contraseña_usuario_mysql>
Por último cambiamos el orden de arranque de los servicios, ya que si arranca antes RSyslog que MySQL dará errores de conexión a la base de datos, para ello hacemos que arranque antes los servicios MySQL cambiando los valores en el directorio /etc/rc2.d con los siguientes comandos:
cd /etc/rc2.d
ls -l
Observamos el orden de arranque de los servicios, serán los que modifiquemos.
Cambiaremos RSyslog para que arranque en el número 20, para ello ejecutamos el siguiente comando:
mv S10rsyslog S20rsyslog
Para un correcto funcionamiento de la nueva instalación de RSyslog, usaremos el script ya existente en Debian Lenny, ya que esta distribución ya lo trae en el sistema base instalado. Para ello haremos una copia de seguridad del script y lo configuraremos con los parámetros necesarios. Los comandos que vamos a ejecutar para realizar esta operación son los siguientes:
cd /etc/init.d
cp rsyslog rsyslog.orig
vi rsyslog
En el apartado PATH añadimos los directorios /usr/local/sbin y /usr/local/bin
En el apartado RSYSLOGD_BIN cambiamos el ejecutable /usr/sbin/rsyslogd por /usr/local/sbin/rsyslogd
Por último modificamos el fichero de configuración rsyslog creado por Debian durante la instalación, para activar el modo de compatibilidad con la nueva versión instalada y el modo de almacenar los ficheros de logs. Para ello ejecutamos los siguientes comandos:
cp /etc/default/rsyslog /etc/default/rsyslog.orig
vi /etc/default/rsyslog
Cambiamos el modo de compatibilidad de c3 a c4.
Por último sólo falta reiniciar el servicio, para ello ejecutamos el siguiente comando:
/etc/init.d/rsyslog restart
Instalar y configurar Apache + PHP
Una vez instalado y funcionando nuestro Rsyslog, es necesario instalar un servidor web como Apache con soporte PHP para poder ejecutar el software phpLogCon, para ello ejecutamos los siguientes comandos:
apt-get install apache2 php5 php5-mysql php5-gd
Descargar e instalar phpLogCon
Una vez instalado y funcionando nuestro RSyslog, vamos a instalar phpLogCon, para poder consultar nuestros logs desde una página web. Para ello nos dirigimos al sitio oficial y vamos a copiar el enlace de descarga para después descargarlo con wget.
Una vez copiado el enlace de descarga, nos ubicamos en el directorio /usr/local/src para descargarlo, ejecutando los siguientes comandos:
cd /usr/local/src
wget <dirección_de_enlace>
Una vez haya finalizado la descarga nos ubicamos en el directorio /tmp y allí descomprimimos el paquete ejecutando los siguientes comandos:
cd /tmp
tar xzvf /usr/local/src/phplogcon-2.6.5.tar.gz
Una vez hemos descomprimido el paquete, vamos a copiar el contenido del directorio /tmp/phplogcon-2.6.5/src al directorio que crearemos en /var/www con el nombre phplogcon. Para ello ejecutamos los siguientes comandos:
mkdir /var/www/phplogcon
cp -R /tmp/phplogcon-2.6.5/src/* /var/www/phplogcon
Configurar phpLogCon
Ahora vamos a crear un sitio en nuestro Apache para poder ejecutar phpLogCon, para ello ejecutamos el siguiente comando:
echo 'Alias /phplogcon "/var/www/phplogcon"' > /etc/apache2/sites-enabled/001-phplogcon
/etc/init.d/apache2 force-reload
Para poder ejecutar el asistente web de configuración, es necesario crear el fichero config.php. En el directorio /tmp/phplogcon-2.6.5/contrib disponemos de un script para su creación, para ello ejecutamos los siguientes comandos:
cd /var/www/phplogcon
chmod +x /tmp/phplogcon-2.6.5/contrib/configure.sh
/tmp/phplogcon-2.6.5/contrib/configure.sh
A continuación vamos a ejecutar el asistente web para finalizar la instalación, para ello mediante nuestro explorador web introducimos la dirección http://<IP_servidor>/phplogcon. Para comenzar la instalación hacemos clic con el ratón en la palabra here.
Para continuar y hacer un test de los requisitos previos hacemos clic con el ratón en el botón Next.
En el siguiente paso hace un test de permisos sobre el fichero config.php, para continuar hacemos clic con el ratón en el botón Next.
En el siguiente apartado nos permite configurar algunos parámetros básicos, como el número de mensajes por página, el límite de caracteres a mostrar en un mensaje, mostrar la descripción en una ventana emergente, etc. Una de las opciones es crear una base de datos para usuario, de este modo limitamos el acceso a nuestro visor web. En nuestro caso no vamos a marcar dicha opción, si alguien desea hacerlo puede usar la misma base de datos rsyslog y el usuario que creamos anteriormente. Dejamos como aparece todo de forma predeterminada y hacemos clic con el ratón en el botón Next.
A continuación vamos a configurar cual es nuestra fuente syslog, en nuestro caso un servidor MySQL, por lo que tenemos que elegir en el apartado Source Type la opción MySQL Native. Le asignaremos a dicha fuente el nombre e2h PiPo e introducimos los datos de la base de datos, como el nombre, usuario y contraseña. Dejamos también la opción Enable Row Counting, ya que en bases de datos con gran tamaño se ve un importante descenso de rendimiento. Es muy importante que el nombre de la tabla esté escrita exactamente como aparece, con mayúsculas y minúsculas, ya que es sensible a los caracteres, la tabla es SystemEvents. Una vez introducidos todos los datos hacemos clic en el botón Next.
Para finalizar hacemos clic con el ratón en el botón Finish y ya tendremos nuestro servidor totalmente instalado y en producción.
Por último y para dejar seguro nuestro phpLogCon, tenemos que dejar los permisos del fichero config.php con los mínimos posibles para el funcionamiento. Para ello ejecutamos el siguiente comando:
chmod 644 /var/www/phplogcon/config.php
También sería importante que el fichero rsyslog.conf sólo pudiera ser leído por el usuario root, ya que aparece la contraseña de conexión a MySQL, para ello ejecutamos el siguiente comando:
chmod 600 /etc/rsyslog.conf















































16 Febrero, 2010 - 10:10
Buenos días,
Ante todo decir que es un buen articulo y muy útil.
He seguido tus indicaciones y funciona bien, pero necesito que reciba los logs de otras maquinas, activo las siguientes opciones pero no recibe los logs. ¿Alguna idea de lo que puede estar pasando?
ModLoad imudp
$UDPServerAddress
$UDPServerRun 514
Muchas gracias de antemano.
16 Febrero, 2010 - 12:02
Buenos días,
Te aconsejo instalar la versión 5.3.x, ya que con la 5.2.x tuve problemas de rendimiento a la hora de la recepción de logs. Como comentas hay que descomentar esas líneas, otra opción que puedes hacer es mediante un netstat –anp ver si está escuchando en dicho puerto el rsyslog.
Te pego mi configuración del fichero /etc/rsyslog.conf
————————————-
# if you experience problems, check
# http://www.rsyslog.com/troubleshoot for assistance
# rsyslog v3: load input modules
# If you do not load inputs, nothing happens!
# You may need to set the module load path if modules are not found.
$ModLoad immark # provides –MARK– message capability
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # kernel logging (formerly provided by rklogd)
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* -/var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit -/var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# Remote Logging (we use TCP for reliable delivery)
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /rsyslog/spool # where to place spool files
#$ActionQueueFileName uniqName # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ######### Receiving Messages from Remote Hosts ##########
# TCP Syslog Server:
# provides TCP syslog reception and GSS-API (if compiled to support it)
#$ModLoad imtcp.so # load module
#$InputTCPServerRun 514 # start up TCP listener at port 514
# UDP Syslog Server:
$ModLoad imudp.so # provides UDP syslog reception
$UDPServerRun 514 # start a UDP syslog server at standard port 514
$ModLoad ommysql.so
*.* :ommysql:localhost,Syslog,usrsyslog,usrsyslog
————————————-
Y en el fichero /etc/default/rsyslog
————————————
# Options for rsyslogd
# -m 0 disables ‘MARK’ messages (deprecated, only used in compat mode < 3)
# -r enables logging from remote machines (deprecated, only used in compat mode < 3)
# -x disables DNS lookups on messages received with -r
# -c compatibility mode
# See rsyslogd(8) for more details
RSYSLOGD_OPTIONS="-c5"
————————————-
Un saludo y gracias por visitar nuestro blog :)
16 Febrero, 2010 - 17:06
OK, muchas gracias, he actualizado a la versión 5.3.7 y el problema se ha solucionado.
16 Febrero, 2010 - 17:21
De nada Alberto, me alegro que se haya solucionado el problema, editaré ahora el artículo y pondré una nota respecto los problemas que incorpora dicha versión.
Un saludo y gracias por seguirnos.
13 Marzo, 2010 - 17:39
Muy interesante, la duda la tengo en la comparacion las ultimas versiones de Syslog- Ng Vs RSyslog, cual es mejor? Los dos son COdigo abierto y se pueden hacer modificaciones personales?
GUstavo
13 Marzo, 2010 - 20:17
Hola Gustavo,
Gracias por tu comentario. Respecto a las preguntas que realizas, no puedo darte una respuesta concreta, ya que cada uno tiene sus cosas y amplias características, si te dejo aquí los enlaces de cada uno Rsyslog y Syslog-ng.
Personalmente prefiero Rsyslog, ya que Debian desde Lenny cambió Syslog-ng por Rsyslog, la cual es la distribución que uso. Además Rsyslog no tiene versión de pago, mientras que Syslog-ng tiene la versión OSE (Open Source Edition) y la PE (Premium Edition) con características diferentes.
Las dos herramientas son de código abierto, Rsyslog se basa en GPLv3 y Syslog-ng GPLv2.
Un saludo
14 Marzo, 2010 - 13:59
Hola.
Ante todo decir que este artículo es muy interesante, está muy bien explicado y detallado con los pantallazos y tal.
Toda la instalación ha ido perfecta, pero a la hora de ver los registros, phologcon me dice que no existe ni un sólo registro. La bbdd está creada, así como la tabla, ¿puede que la base de datos esté vacia? no estoy muy seguro de lo que puede estar fallando, las versiones de rsyslog son la 5.5.2 y de phplogcon 2.8.1
Muchas gracias y un saludo
14 Marzo, 2010 - 16:51
Mea culpa, puse un . donde tenía que haber puesto una , en rsyslog.conf (la última línea) todo funciona perfectamente.
Un saludo y gracias por este estupendo artículo, mil gracias.
14 Marzo, 2010 - 17:45
Hola Oscar,
Perdona por no haber podido responderte antes. Me alegra que hayas dado con la solución, las soluciones que iba a proponerte no iban por esos caminos (la falta del punto por la coma), así que nos hubiésemos llevado bastante tiempo.
Espero seguir viendote por el blog, un saludo y disfruta de tu Syslog con ese entorno web tan útil :).
8 Abril, 2010 - 02:29
Esta aplicacion puede servir para cualquier maquina.? Tengo muchos servidores con Windows, MS-SQL, IIS y otras, y me gustaria manejar todos estos logs centralizados, ademas de todos los servidores de linux y servicios que tengo con el como Apache, FTP, Postgres,SSH y otros.
Se podria ?
8 Abril, 2010 - 16:46
Hola Edwin,
Esta aplicación sirve para cualquier cliente que se rija por el estándar de envió de logs, ya que de no ser así saldrán descuadrados en su visualización, pero por norma suelen estar estandarizados.
Puedes consultar las RFCs de Rsyslogd en su página web, pero 100% seguro que Cisco funciona, Linux, Unix, BSD también, tendrías que mirar la estructura de logs de IIS y otros servicios Windows.
Un saludo.
10 Mayo, 2010 - 14:39
Hola.
He instalado la versión 5.4 de rsyslog. Realicé el configure, make y make install como indicas en el tutorial, pero finalmente no aparecen archivos del programa, como por ejemplo rsyslog.conf en /etc, rsyslog en /etc/init.d/, S10rsyslog en /etc/rc2.d y rsyslog en /etc/default/. He tratado de crear algunos enlaces simbólicos hacia el binario rsyslogd en /usr/local/sbin (que supongo es el programa en sí), pero me faltan archivos de configuración para completar la instalación tal como lo indicas.
Me podrías ayudar con este tema?
Muchas gracias.
10 Mayo, 2010 - 16:46
Hola Marvin,
Deberáis comprobar que en el paso de hacer make no te lanza ningún error la compilación. Si echas de nuevo un vistazo al artículo comprobarás que de forma automática no se crea /etc/rsyslog.conf, sino que tenemos que copiarlo desde las fuentes descomprimidas.
Un saludo.
10 Mayo, 2010 - 22:28
Hola, José, gracias por tu respuesta.
Sería posible que postees el script ‘/etc/init.d/rsyslog’ ? De igual forma como posteaste los otros 2 archivos de configuración? Es lo único que me faltaría.
Muchas gracias por la atención.
10 Mayo, 2010 - 23:18
Hola Marvin,
Dentro de las fuentes has de tener un directorio que se llama distro-specific. Ahí debe aparecerte varios directorios de varias distribuciones, entra dentro de la que necesites y copia el script de autoarranque.
Para más información puedes visitar http://www.rsyslog.com/doc-install.html e ir al paso 7.
Un saludo.
27 Junio, 2010 - 06:44
Hola!.
Muchas gracias por el tuto, bastante explicado y muy sencillo! me dio un poco de trabajo encontrar este post, ahora los peros :S
resulta que la instalacion paso bastante bien! pero en la pag me aparece que no existe ningun record, he descomentado en /etc/rsyslog
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
y en /etc/default/rsyslog tengo:
# Options for rsyslogd
# -m 0 disables ‘MARK’ messages (deprecated, only used in compat mode < 3)
# -r enables logging from remote machines (deprecated, only used in compat mode < 3)
# -x disables DNS lookups on messages received with -r
# -c compatibility mode
# See rsyslogd(8) for more details
RSYSLOGD_OPTIONS="-c4"
aqui esta comentado el "-r" pero no he entendido como agrego esta opcion…..
mucho les agradezco de antemano la ayuda!!
saludos!
27 Junio, 2010 - 10:52
Hola Jorge,
Gracias a ti por seguir el blog. Primero deberías comprobar que el sericio está corriendo con un ps aux o netstat -anp | grep 514 y ver como decimos que está funcionando. Además te aconsejo descargar la última versión ya que con la versión del artículo existían algunos problemas. También repasaría el fichero de configuración /etc/rsyslog.conf y comprobar los “.” y las “,”
Un saludo.
8 Julio, 2010 - 16:33
Hola a todos, fui configurando paso a paso como esta el manual, pero tengo el siguiente error en la web:
No syslog records found – Error Details:
Could not find the configured table, maybe misspelled or the tablenames are case sensitive
More Information
Si alguien me puede dar una mano se los agradecería.
saludos
8 Julio, 2010 - 17:48
Gente ya resolvii el problema, muchas gracias
8 Julio, 2010 - 17:57
Hola Pablo,
Sería interesante que comentarás donde estaba el error por si a algún otro usuario le ocurriese lo mismo.
Un saludo y adelante con tu servidor de logs.
12 Julio, 2010 - 19:44
El problema era que tenia mal escrita la tabla del mysql, la escribí toda en minuscula y hay dos letras que son en mayuscula.-
Saludos y gracias por tu respuesta
12 Julio, 2010 - 23:30
Hola Pablo,
Gracias a ti por facilitarnos la respuesta, suele ser común que nos equivoquemos al teclear y nos volvamos locos para dar con el problema.
Un saludo.
13 Julio, 2010 - 12:54
Hola como estas, te molesto nuevamente con otra consulta, como puedo ver como va creciendo la base de datos que se creo para los logs…
En cuanto al logrotate, al usar base de datos, tiene algún funcionamiento?…
Saludos
13 Julio, 2010 - 12:57
Una cosita mas, hay alguna forma de ponerle user y pass para el acceso a la página web del phplogcon, y que los usuarios tenga distintos perfiles para establecer algún tipo de restricción.-
Saludos
14 Julio, 2010 - 16:17
Hola Pablo,
Puedes probar el siguiente documento, por ahora nunca he necesitado de dicha utilidad.
http://wiki.rsyslog.com/index.php/PhpLogCon_Delete_Records#Purging_via_the_Command_Line
Un saludo y ya nos cuentas la experiencia.
14 Julio, 2010 - 23:02
Hola Pablo,
Para hacer eso has de activar la opción UserDB durante el asistente de instalación, pero para ello necesitas disponer de una tabla adicional para el almacenamiento de estos.
Nunca lo he usado, pero puedes verlo en http://wiki.rsyslog.com/index.php/How_to_to_use_convert.php_to_install_the_Userdb-System_in_an_existing_phpLogCon_installation%3F
Un saludo.