miércoles, 22 de febrero de 2012

Servidor Syslog

Instalación de un servidor Syslog para logs centralizados (parte 1)

   Tenemos un cliente que dispone de una serie de máquinas que no permiten el envío de alertas por correo. Lo que si permiten,es hacer uso de un servidor Syslog. Con esta entrada trataré de explicar como montar un sistema que nos permita recopilar información desde cualquier origen y tratar dicha información.

Sistema

   El sistemas donde realizamos la instalación tiene las siguientes características: (no es muy difícil adaptarlo a otros sabores linux)

  • Centos 6.2 x64
  • Apache 2.2.15  (Ponemos una página donde ver los logs)
  • MySql 5.1.61 (Aquí guardamos los logs)
  • loganalyzer
  • Php 5.3.3
  • rsyslog 4.6.2
Parte del servidor

   La instalación de los componentes del servidor no es compleja. Aún así comento todos los paquetes que he tenido que instalar:
  1. Apache
    • yum install httpd
  2. MySql
    • yum install mysql-server
  3. Php
    • yum install php php-mysql 
   Ahora preparo el sistemas para que arranque automáticamente el MySql y el Apache.
    •  chkconfig mysqld on
    • chkconfig httpd on
Como queremos que funcione el receptor de mensajes 


   En esta instalación nos interesa que los mensaje de la empresa donde reside el syslog, se alojen en una tabla de la base de datos y los mensajes que vendrán de la otra empresa en otra tabla dentro de la misma base de datos.

Generación de la base de datos

   De la configuración del MySql, sólo comentar que añadimos el parámetro bind=127.0.0.1 a el fichero /etc/my.cfg para que el servidor escuche sólo en la dirección local. No acepta conexiones externas a la base de datos. De este modo, añadimos un plus de seguridad al sistema. 

   El fichero con la estructura de la base de datos que usa el rsyslog, lo podemos encontrar en /usr/share/doc/rsyslog-mysql-4.6.2/createDB.sql. Ahora sólo necesitamos cargar dicho fichero en el MySql para que se genere la Base de Datos.

     mysql -u root -p < /usr/share/doc/rsyslog-mysql-4.6.2/createDB.sql

   Este comando nos genera la base de datos Syslog con dos tablas, SystemEvents y SystemEventsProperties. A nosotros nos interesa tener dos tablas diferenciadas para cada empresa. Desde dentro del gestor MySql, generamos las tablas como queremos "create table EMPRESA01 like SystemEvents;" y "create table EMPRESA02 like SystemEvents;". Por último, nos falta generar un usuario con acceso a la base de datos. (Eso seguro que lo sabes hacer).


Ahora instalamos el loganalyzer

   Descomprimimos el paquete en una carpeta y lo movemos al directorio elegido para servir las páginas de la aplicación. Previamente hay que configurar el Apache para que sirva dichas páginas. Si colocas los fichero en /var/www/html será donde los busque por defecto. Yo te sugiero cambiarlos de ubicación a por ejemplo /var/www/loganalizer.

  1. mkdir /var/www/loganalyzer-3.5.1
  2. cd /var/www
  3. ln -s loganalyzer-3.5.1 loganalyzer    (Esto nos permite cambiar de versión sin tocar nada en el Apache, sólo cambiando el enlace simbólico).
  4. cd /etc/httpd/conf.d
  5. vi loganalyzer.conf   (Dentro del fichero vale con colocar "Alias /loganalyzer /var/www/loganalyzer)
  6. /etc/init.d/httpd restart
    Ahora copiamos la aplicación.
  1. cp -r /opt/loganalyzer/src/* /var/www/loganalyzer
  2. cp -r /opt/loganalyzer/contrib/* /var/www/loganalyzer
  3. Creamos la base de datos loganalyzer en el MySql y un usuario para acceder a la misma.
  4. Desde un navegador http://NUESTROSERVIDOR/loganalyzer   (Rellenamos los campos que nos va pidiendo activando la creación de la base de datos para el loganalyzer)
Configuración del rsyslog del servidor

   Al fichero por defecto del rsyslog le añadimos las cosas que se ven en negrita. En este momento permitimos que envíen mensajes una serie de redes y que dichos mensaje vayan a la tabla que queremos.

#### MODULES ####

# Provides TCP syslog reception
$ModLoad imtcp.so 
$InputTCPServerRun 514
$ModLoad ommysql        # Mysql module

# Mensajes de la Empresa 01

$AllowedSender TCP, 127.0.0.1, 192.168.1.0/24

# Template
$template empresa01tmpl,"insert into Empresa01 (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQL
$template empresa02tmpl, "insert into Empresa02 (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQL

#### RULES ###
#

# Todo va al MySql
*.* :ommysql:127.0.0.1,Syslog,USUARIO_BD,CLAVE_USUARIO_BD;opencantmpl


   Al reiniciar el rsyslog (/etc/init.d/rsyslog restart) deben aparecer los eventos del reinicio en la base de datos Syslog, en la tabla Empresa01.

Enviar los mensajes desde un servidor remoto

   Editamos el fichero /etc/rsyslog.conf y añadimos *.warning @@servidor_remoto:514
a la configuración. Cuidado con el nivel de log que enviamos, en este caso warning o superior, o nos inundará de mensajes el sistema.


             .... Mañana vemos como hacer que otros dispositivos usen este receptor syslog