Cómo montar un servidor de log gratuito usando Rsyslog en Linux Ubuntu Server, guardando los datos en MySQL. Mostramos cómo instalar LogAnalyzer para generar informes y realizar consultas sobre los log.

Servidor de log syslog

Syslog es un estándar desarrollado para el envío de mensajes de registro a una IP en una red LAN. Syslog hace referencia tanto al protocolo de red como a la aplicación o biblioteca que envía los mensajes de registro.

Los equipos y servicios con soporte para envío de log a este sistema pueden enviar cualquier tipo de mensaje, normalmente suelen enviar información sobre la seguridad del sistema, errores, avisos, etc. aunque pueden contener cualquier información. Junto con cada mensaje se incluye la fecha y hora del envío, el equipo que envía, la prioridad y otros datos adicionales.

El protocolo syslog consiste en un equipo servidor ejecutando el servidor de syslog, conocido como syslogd (demonio de syslog) y clientes que envían un pequeño mensaje de texto (de menos de 1024 bytes) a este servidor.

Los mensajes de syslog se suelen enviar vía UDP, por el puerto 514, en formato de texto plano. Algunas implementaciones del servidor, como syslog-ng, permiten usar TCP en vez de UDP, y también ofrecen Stunnel para que los datos viajen cifrados mediante SSL/TLS.

Aunque syslog tiene algunos problemas de seguridad, su sencillez ha hecho que muchos dispositivos lo implementen, tanto para enviar como para recibir. Eso hace posible integrar mensajes de varios tipos de sistemas en un solo repositorio central.

El mensaje enviado se compone de tres campos, entre todos no han de sumar más de 1024 bytes, pero no hay longitud mínima:

  • Prioridad: número de 8 bits que indica tanto el recurso (tipo de aparato que ha generado el mensaje) como la severidad (importancia del mensaje).
  • Cabecera: indica tanto el tiempo como el nombre del ordenador que emite el mensaje. Esto se escribe en codificación ASCII (7 bits), por tanto es texto legible. El primer campo, tiempo, se escribe en formato Mmm dd hh:mm:ss, donde Mmm son las iniciales del nombre del mes en inglés, dd, es el día del mes, y el resto es la hora. No se indica el año. Justo después viene el nombre de ordenador (hostname), o la dirección IP si no se conoce el nombre. No puede contener espacios, ya que este campo acaba cuando se encuentra el siguiente espacio.
  • Texto: lo que queda de paquete syslog al llenar la prioridad y la cabecera es el propio texto del mensaje. Éste incluirá información sobre el proceso que ha generado el aviso, normalmente al principio (en los primeros 32 caracteres) y acabado por un carácter no alfanumérico (como un espacio, «:» o «[«). Después, viene el contenido real del mensaje, sin ningún carácter especial para marcar el final.

Requisitos para montar servidor de log gratuito con Rsyslog

Para montar un servidor de log con el estándar syslog usando el software gratuito Rsyslog necesitaremos un equipo (físico o virtual) con el sistema operativo GNU Linux, utilizaremos la distribución GNU Linux Ubuntu Server 12.01. Además, necesitaremos un servidor web y una base de datos. En este tutorial explicamos cómo guardar los log de Rsyslog en el motor de base de datos MySQL Server y cómo consultarlos mediante LogAnalyzer vía web por lo que necesitaremos un servidor web con Apache y PHP.

En el siguiente tutorial explicamos cómo instalar el sistema operativo GNU Linux Ubuntu Server 12.01 en un equipo nuevo (virtual o físico) con el paquete LAMP que instala automáticamente Apache + PHP + MySQL:

Si ya tenemos el servidor con Linux en los siguientes tutoriales explicamos cómo instalar MySQL y Apache en Linux:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

A continuación vamos a explicar cómo instalar el servidor de log syslog gratuito Rsyslog en un equipo con Ubuntu Server 12, en primer lugar instalaremos la clave necesaria con el siguiente comando linux:

sudo apt-key adv –recv-keys –keyserver keyserver.ubuntu.com AEF0CF8E

Instalar Rsyslog en GNU Linux Ubuntu Server 12

A continuación editaremos el fichero sources.list y añadiremos una línea nueva, para ello ejecutaremos el comando linux:

sudo nano /etc/apt/sources.list

Añadiremos las siguientes líneas al final del fichero:

deb http://ubuntu.adiscon.com/v7-devel precise/
deb-src http://ubuntu.adiscon.com/v7-devel precise/

Guardaremos los cambios pulsando Control + O y cerraremos la edición pulsando Control + X:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Actualizaremos el sistema y la lista de paquetes con el comando linux:

sudo apt-get update && sudo apt-get upgrade

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Tras concluir la actualización instalaremos Rsyslog con el comando linux:

sudo apt-get install rsyslog

No solicitará confirmación para instalar, pulsaremos la tecla «s» e INTRO:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Ahora instalaremos el soporte de Rsyslog para bases de datos MySQL con el comando linux:

install rsyslog-mysql

Instalar Rsyslog en GNU Linux Ubuntu Server 12

El asistente para instalar el paquete nos preguntará si queremos configurar la base de datos para rsyslog-mysql con dbconfig-common, seleccionaremos «Sí» y pulsaremos INTRO:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Con el texto: Es necesario tener una base de datos instalada y configurada para rsyslog-mysql antes de poder utilizarlo. Puede gestionar esto opcionalmente a través de «dbconfig-common». Si ud. es un administrador de bases de datos avanzado o si la base de datos ya está instalada y configurada quizás quiera realizar esta configuración manualmente, y debería rechazar esta opción. Probablemente podrá encontrar los detalles de las operaciones que debe realizar en «/usr/share/doc/rsyslog-mysql».

Introduciremos la contraseña del superusuario root de MySQL Server, el paquete rsyslog-mysql deberá acceder a MySQL y crear un usuario, un catálogo y las tablas correspondientes:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Introduciremos ahora la contraseña para que rsyslog-mysql acceda al servidor de MySQL:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Confirmamos la contraseña:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

El asistente creará los ficheros de configuración necesarios, el usuario, catálogo y tablas en MySQL:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Accediendo con MySQL Administrator, MySQL MySQL Workbench o cualquier software para acceder a MySQL como AjpdSoft Administración Bases de Datos podremos consultar el esquema creado por rsyslog-mysql «Syslog», las tablas «SystemEvents» y «SystemEventsProperties»:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Y el usuario «rsyslog»:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

El systema Rsyslog ya habrá empezado a guardar los eventos de log en MySQL, podremos consultarlos con MySQL Administrator pulsando sobre la tabla «SystemEvents» con el botón derecho del ratón y seleccionando «Edit Table Data»:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Se abrirá MySQL Query Browser y mostrará los registros de log que Rsyslog ya ha guardado en la tabla:

Instalar Rsyslog en GNU Linux Ubuntu Server 12

Las consultas SQL de creación de las dos tablas del catálogo Syslog de MySQL:

De esta sencilla forma ya tendremos montado un servidor de log syslog con Rsyslog sobre Linux de forma gratuita y guardando los log en MySQL, por lo tanto podremos consultarlos desde cualquier aplicación que permita acceso a MySQL o bien usar algún software gratuito como LogAnalyzer.

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Explicaremos ahora cómo instalar el sistema LogAnalyzer en nuestro servidor de log syslog que nos permitirá consultar vía web con un entorno amigable los eventos que Rsyslog registre en MySQL. Para ello en primer lugar crearemos una carpeta para la descarga temporal del paquete comprimido con:

sudo mkdir /tmp/loganalyzer

Buscaremos en la web oficial de LogAnalyzer la última versión y anotaremos la URL de la descarga, para descargar el fichero comprimido desde la consola de Linux Ubuntu Server accederemos a la carpeta creada para la descarga con:

cd /tmp/loganalyzer

Y descargaremos el fichero con:

wget http://download.adiscon.com/loganalyzer/loganalyzer-3.6.3.tar.gz

( cambiando la URL por la que corresponda a la versión actual)

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Descomprimiremos el fichero descargado con el comando linux:

tar -xvf loganalyzer-3.6.3.tar.g

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Accederemos a la carpeta que se habrá creado al descomprimir con:

cd /tmp/loganalyzer/loganalyzer-3.6.3

Crearemos una subcarpeta dentro de la carpeta www de Apache de nuestro servidor web con:

sudo mkdir /var/www/loganalyzer

Ahora copiaremos el contenido de la carpeta «src» a la carpeta creada con:

sudo cp -R /tmp/loganalyzer/loganalyzer-3.6.3/src/* /var/www/loganalyzer

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Repetiremos la operación para la carpeta «contrib»:

sudo cp -R /tmp/loganalyzer/loganalyzer-3.6.3/contrib/* /var/www/loganalyzer

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Estableceremos permisos de escritura para los ficheros configure.sh y secure.sh:

cd /var/www/loganalyzer

sudo chmod +x configure.sh secure.sh

Iniciaremos LogAnalyzer vía web desde cualquier PC de la red abriendo un navegador e introduciendo la URL:

http://192.168.31.156/loganalyzer

(cambiaremos «192.168.31.156 por la IP de nuestro servidor syslog)

Se iniciará LogAnalyzer, en el primer inicio dará un error al detectar que aún no ha sido configurado, pulsaremos en «here» para instalar Adisco LogAnalyzer:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Con el texto: Critical Error occured. Error, main configuration file is missing! Click here to Install Adiscon LogAnalyzer!

Se iniciará el asistente para configurar e instalar definitivamente LogAnalyzer, pulsaremos «Next»:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

El fichero config.php debe ser escribible, en el siguiente paso el asistente de instalación de LogAnalyzer lo comprobará, de no serlo deberemos establecerle los permisos apropiados con el comando linux chmod:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Introduciremos los datos de configuración, los importantes son:

  • Enable User database: marcaremos «Yes».
  • Database Host: IP o nombre DNS (hostname) del equipo servidor de syslog con MySQL.
  • Database Port: puerto de la base de datos MySQL, por defecto 3306.
  • Database Name: nombre del catálogo de MySQL que el asistente creará para LogAnalyzer, por ejemplo «loganalyzer».
  • Table prefix: prefijo que se añadirá al nombre de las tablas, esto es últil si queremos usar un catálogo ya existente, así separaremos por nombre las tablas de otras existentes.
  • Database User: usuario que se creará en la base de datos MySQL para uso de LogAnalyzer.
  • Database Password: contraseña para el usuario anterior.
  • Require user to be logged in: marcaremos «Yes».
  • Authentication method: seleccionaremos «Internal authentication».

El resto de parámetros son de visualización de los log, podremos modificarlos en cualquier momento:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

A continuación el asistente para instalar LogAnalyzer nos indicará que se van a crear las tablas en el catálogo de MySQL elegido, pulsaremos «Next»:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Si el proceso es correcto nos indicará las tablas creadas, pulsaremos «Next»:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Introduciremos ahora los datos del usuario que se creará para acceder a LogAnalyzer:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Introduciremos ahora los datos de la fuente, LogAnalyzer permite analizar y consultar varios servidores de log con syslog, por lo que ahora crearemos el acceso a nuestro servidor de syslog con Rsyslog, para ello introduciremos los siguientes datos:

  • Name of the Source: nombre del origen, por ejemplo «Log AjpdSoft», este nombre se usará para diferenciar varios servidores de log con syslog.
  • Source Type: seleccionaremos «MYSQL Native».
  • Select View: seleccionaremos «Syslog Fields».
  • Table type: seleccionaremos «MonitorWare».
  • Database Host: introduciremos la IP o nombre DNS de nuestro servidor con Rsyslog y MySQL.
  • Database Name: introduciremos el nombre del catálogo que contiene las tablas de Rsyslog, por defecto «Syslog».
  • Database Tablename: nombre de la tabla con los eventos de Rsyslog en MySQL, por defecto «SystemEvents».
  • Database User: nombre de usuario de MySQL con permisos de acceso a las tablas de Rsyslog, por defecto «rsyslog».
  • Database Password: contraseña del usuario anterior.
  • Enable Row Counting: si vamos a tener un servidor de log con no demasiados eventos podremos marcar «Yes», si vamos a tener cientos de miles de eventos no es recomendable activar esta opción pues puede ralentizar el acceso.

De esta forma LogAnalyzer permite tener sus propias tablas alojadas en un servidor de MySQL diferente al de Rsyslog (o puede ser el mismo como en nuestro caso):

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

El proceso de instalación de LogAnalyzer habrá concluido:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Introduciendo la URL en un navegador:

http://192.168.31.156/loganalyzer

(cambiaremos «192.168.31.156 por la IP de nuestro servidor syslog)

Nos solicitará usuario y contraseña, introducimos el elegido en el proceso de instalación y pulsamos en «Login»:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Y ya tendremos acceso a la consulta avanzada de los log generamos por nuestro servidor de syslog con Rsyslog desde LogAnalyzer:

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog

Anexo

  • Si se produce el error: ERROR: At least one file or directory (or more) is not writeable, please check the file permissions (chmod 666)! al intentar instalar LogAnalyzer se deben revisar los permisos de la carpeta /var/www/loganalyzer, en concreto los de los ficheros configure.sh, secure.sh y config.php.
  • Si se poduce algún error de falta de permisos para algún usuario de MySQL tal vez sea necesario asignarle permisos, una forma para hacerlo es desde la línea de comandos de Linux, con los comandos:

mysql -u root -p

grant all privileges on Syslog.* to ‘rsyslog’@’%’ with grant option;

Instalar LogAnalyzer para consulta vía web de los log de Rsyslog