Implementando un sistema centralizado de bitácoras

Arquitectura general

Dada la naturaleza de la nube, cada vez es mas común que un administrador sea responsable de varios cientos o quizá miles de servidores. No olvidemos que cada servidor cuenta con cierto nivel de dinamismo donde se procesa cantidad de datos resultando en la generación de eventos, estos últimos registran su actividad en las bitácoras o entradas en el sistema. Estos datos contienen información valiosa que nos puede servir para prevenir fallas en los equipos.

Desgraciadamente la información que se generada por cada uno de los sistemas supera por mucho la capacidad de análisis que un operador puede realizar de manera cotidiana como parte de sus actividades de prevención en los equipos, es por ello que su análisis lejos de ser una actividad preventiva termina siendo una actividad reactiva. No obstante, muchas aplicaciones se encuentran distribuidas en varios equipos o su interacción implica el uso de varios servidores, lo cual agrava aun mas el poder determinar la principal causa de un problema.

Es aquí donde nace la necesidad de contar con un sistema central de registros. Donde se busca el que los datos generados sean enviados y almacenados en un lugar único, para así mas tarde puedan ser procesados y consultados en tiempo real con el fin de prevenir posibles fallas.

Logstash es una herramienta que maneja eventos y registros de las bitácoras. Ademas, su uso en conjunto con otras herramientas como redis, elasticsearch y kibana, nos permite crear un sistema central de registros.

En esta ocasión, tratare de cubrir los pasos básicos para su instalación. Con el fin de tener una arquitectura modular es recomendable la utilización varios servidores, ademas nos permitirá un crecimiento horizontal en caso de tener una carga excesiva de datos.

Arquitectura de componentes

El primer componente que configuraremos es el negociador(«broker), su función es la de regular el flujo de datos que entran a nuestro sistema. Para ello utilizaremos una base de datos de tipo diccionario muy robusta como lo es Redis.

Instalación de redis

electrocucaracha@precise64:~# apt-get install build-essential
electrocucaracha@precise64:~# cd /opt/
electrocucaracha@precise64:~# wget http://download.redis.io/releases/redis-2.8.8.tar.gz
electrocucaracha@precise64:~# tar -xvf redis-2.8.8.tar.gz
electrocucaracha@precise64:~# cd /redis-2.8.8
electrocucaracha@precise64:~# make
electrocucaracha@precise64:~# src/redis-server

Como segundo componente necesario es el indexador(«indexer), el cual nos permite ir procesando la información almacenada por el negociador. Para ello no solo es necesario instalar el servicio, también se requiere especificar las direcciones tanto del negociador(como origen de los datos) como del destino(como análisis de información).

Instalación de logstash

electrocucaracha@precise64:~# add-apt-repository ppa:webupd8team/java
electrocucaracha@precise64:~# apt-get update
electrocucaracha@precise64:~# apt-get install oracle-java7-installer
electrocucaracha@precise64:~# cd /opt/
electrocucaracha@precise64:~# wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.0.tar.gz
electrocucaracha@precise64:~# tar -xvf logstash-1.4.0.tar.gz
electrocucaracha@precise64:~# cat < /etc/logstash-indexer-redis.conf
>input {
>  redis {
>    host => "mi_servidor_redis.com"
>    data_type => "list"
>    key => "logstash"
>  }
>}
>output {
>  elasticsearch {
>    host => "mi_servidor_elasticsearch.com"
>  }
>}
EOL
electrocucaracha@precise64:~# bin/logstash -f /etc/logstash-indexer-redis.conf

El tercer componente sera una otra base de datos que nos permitirá consumirlos desde una interfaz gráfica. Para esta base de datos utilizaremos elasticsearch y su instalación se realiza de la siguiente manera.

Instalación de elasticsearch

electrocucaracha@precise64:~# add-apt-repository ppa:webupd8team/java
electrocucaracha@precise64:~# apt-get update
electrocucaracha@precise64:~# apt-get install oracle-java7-installer
electrocucaracha@precise64:~# cd /opt
electrocucaracha@precise64:~# wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.1.tar.gz
electrocucaracha@precise64:~# tar -xvf elasticsearch-1.0.1.tar.gz
electrocucaracha@precise64:~# cd elasticsearch-1.0.1/
electrocucaracha@precise64:~# ./bin/elasticsearch

El ultimo componente y no por ello el menos importante es la interfaz gráfica. Es necesario contar con un elemento que nos permita desplegar la información procesada y que mejor que tomar ventaja de las bondades de node.js con kibana.

Instalación de kibana

electrocucaracha@precise64:~# apt-get install -y apache2
electrocucaracha@precise64:~# wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz
electrocucaracha@precise64:~# tar -xvf kibana-3.0.1.tar.gz
electrocucaracha@precise64:~# cd kibana-3.0.1
electrocucaracha@precise64:~# cp -R * /var/www/

Hasta el momento solo hemos creado la infraestructura que almacenara, procesara y mostrara los datos. En la siguiente publicación mostrare como los clientes pueden utilizar este sistema.