Tutorial: Como instalar Kibana 5 para leer logs de Apache/Nginx

¿Por qué Kibana?

Porque Kibana te permite analizar que archivos se han solicitado y/o servido de tu web, lo que te aporta una visión diferentes respecto al análisis por medio de recolección de datos por scripts de javascript como Analytics.

analizar logs apache nginx con kibana


¿Cuál es la ventaja de analizar logs?

Los logs son simplemente el registro de todas las solicitudes y errores que se realizan a tu servicio web (Apache/Nginx por ejemplo), por lo tanto, los logs te aportan una visión muy veraz respecto a que es lo que pasa a nivel de archivos solicitados y/o servidos, independientemente de si se ha llegado a cargar del todo la petición en el navegador del cliente, o si se está ejecutando javascript en el cliente. Es también una forma muy veraz de ver que errores se están generando al intentar servir datos a los navegadores. Y no olvidar que cuando pasa algo con un portal respecto al comportamiento, un posible hackeo, caídas, es un buen sitio por donde empezar a indagar por donde van los tiros.

¿Por dónde empezamos?

Hay 3 programas necesarios:

Logstash: Permite recolectar de un servidor o varios, los logs que queremos almacenar y posteriormente analizar.

ElasticSearch: Es un motor de búsqueda que permite hacer búsquedas de forma rápida en grandes volúmenes de datos y que a su vez, es fácilmente escalable.

Kibana: Es la herramienta para visualizar los datos a través de un entorno web, permitiendo generar dashboards y exportar CSVs con datos.

Instalar Logstash

En mi caso la instalación la estoy realizando en un Debian Little Endian. Algunos comandos pueden variar para tu entorno pero por lo general no deberías tener demasiados problemillas.

Para empezar toca abrir un terminal con ssh y actualizar los repositorios con el comando  sudo apt-get update

Nuestra versión Logstash 2.4 requiere Java 7 así que tocará instalarlo antes. Podemos comprobar nuestra versión de Java con el comando java -version Si te aparece «java version «1.7.xxx» entonces perfecto. Si no toca instalarlo.

Instalar Java si no lo tenemos

Añadir los repositorios oficiales de Java:

Añadir la firma pública del repositorio:

Actualizar los repositorios: sudo apt-get update
Instalamos Java: sudo apt-get install oracle-java8-installer
Cuando nos aparezca

pulsamos «Y»
Después en la ventana <Ok>:

instalar-java-debian-jessie

Ahora en <Yes>:

instalar-java-debian-jessie-2

Y finalmente comprobamos si tenemos Java instalado ejecutando java -version
Si nos aparece algo parecido a

Entonces querrá decir que lo tenemos instalado correctamente.
Nota: Logstash requiere mínimo Java 7 ( java version "1.>=7.X_XXX" ).

Seguimos con Logstash

Descargar e instalar la firma pública de los repositorios de elastic

Añadimos el repositorio a nuestro listado de repositorios (usualmente está en /etc/apt/source.list):

Actualizamos los repositorios: sudo apt-get update
Instalamos Logstash: sudo apt-get install logstash
Si te aperece:

Entonces es que todo ha ido bien.

Configurar Logstash

La configuración de Logstash se podría clasificar en 3 bloques principales:

  • Input: Todo lo relacionado con de donde se cogen los datos. Por ejemplo para definir que queremos leer los logs de Apache de la propia máquina y de otras máquinas (para lo cuál se usa Logstash-Forwarder).
  • Filter: Configuración relacionada con el filtrado, modificación de los datos. Por ejemplo para convertir logs de Nginx al formato estandar de Apache.
  • Output: A donde quiero enviar los datos. Que por lo general será la misma máquina (localhost) en donde se encontrará ElasticSearch (motor de base de datos).

 


Instalar Elasticsearch

Descargar e instalar la firma pública de los repositorios de elastic si no la tenemos ya.

Añadimos el repositorio a nuestro listado de repositorios si no lo tenemos ya añadido (usualmente está en /etc/apt/source.list):

Actualizamos los repositorios: sudo apt-get update
Instalamos Logstash: sudo apt-get -y install elasticsearch

Configurar Elasticsearch

Todos los parámetros de Elasticsearch se definen en un sólo archivo que está usualmente en /etc/elasticsearch/elasticsearch.yml. Como nuestra configuración de Elasticsearch es muy simple ya que sólo usaremos una máquina para almacenar la información, y sólo queremos que se acceda a Elasticsearh desde la propia máquina, simplemente tenemos que modificar una línea.

Abrimos el archivo con el editor Nano  sudo nano /etc/elasticsearch/elasticsearch.yml  y con Ctrl + W buscamos «network.host» y sustituimos:

por

Guardamos el archivo con Ctrl + O e Intro.

De este modo limitamos el acceso a Elasticsearch haciendo que sólo acepte conexiones desde propia máquina, ya que Logstash, quien va a enviar los datos a ElasticSearch se encuentra en la misma máquina en nuestro caso.

Sólo queda comprobar que todo está bien, para lo cual paramos con  service elasticsearch stop y arrancamos de nuevo Elastichsearch con  service elasticsearch start . Si no aparece ningún mensaje de error estupendo. Ahora para estar seguros de que funciona si ejecutas

debería de aparecerte un mensaje de Elasticsearch.

Si ElasticSearch te devuelve el error de:

Es que posiblemente intentas instalar ElasticSearch en una máquina de menos de 2gb de RAM libres. Con  sudo journalctl --unit elasticsearch  podrás ver que Java te dice no tiene memoria suficiente:

 

 

 

Como un servidor se puede reiniciar por cualquier motivo es importante asegurarnos que cuando el servidor vuelva a arrancar, Elasticsearch también lo haga, lo cual podemos configurar simplemente ejecutando:

Instalar Kibana 5

Antes de nada debemos instalar la firma pública del repositorio oficial de Kibana 5:

Si no tienes el paquete apt-transport-https debes instalarlo con

Actualizamos con  sudo apt-get update y añadimos el repositorio de Kibana 5:

Volvemos a actualizar  sudo apt-get update  e instalamos Kibana 5 con

Vamos a comprobar que arranca correctamente asegurandonos que está detenido sudo service kibana stop y arrancándolo nuevamente con  sudo service kibana start.

Vamos a configurar que Kibana arranque con el encendido/reinicio del servidor con:

Kibana 5 limita por defecto el acceso a sólo localhost, es decir, que sólo la propia máquina puede acceder a Kibana, que es nuestra caso ya que el servidor web que usaremos está en el mismo servidor.

Instalar servidor web para visualizar Kibana 5

Es necesario instalar un servidor web para poder autentificar a los usuarios que acceden al panel. En nuestra caso vamos a instalar Nginx.

Lo instalamos ejecutando:

Creamos un archivo simple con los usuarios y contraseñas que queremos usar autenticar:

En este momento es en el que te pedirá una contraseña para tu usuario, que en nuestro caso es «usuariokibana».

Nota: El programa de htpasswd está incluido en el paquete «apache2-utils». Si no has instalado Nginx porque ya lo tenías en la máquina deberás instalar el paquete para poder generar un archivo de claves  sudo apt-get install apache2-utils .

Ahora vamos a configurar el sitio web en nuestro servidor web, en este caso Nginx. En Nginx se configura en la ruta «/etc/nginx/sites-available/» cada una de las webs que quieres servir. Por lo tanto vamos  a empezar a crear nuestro archivo de configuración. Con  sudo nano /etc/nginx/sites-available/kibana creas el archivo. Copia el código de abajo (Shift + Insert para pegar) :

En la línea «server_name nombredetudominio.com» debes indicar el dominio que quieres usar para acceder a tu Kibana 5. Recuerda que las DNSs de tu dominio deberán apuntar a la ip pública del servidor donde estés montando tu Kibana.

Nota: Con Cloudflare puedes gestionar las DNSs de tu dominio gratis. Hay algunos proveedores de dominios en los cuales no es gratuito.

Para habilitar tales webs se debe crear un enlace simbólico en «/etc/nginx/sites-enabled/» hacia el archivo que define el sitio web en «/etc/nginx/sites-available/» lo cual se hace con el comando

Ya sólo queda reiniciar el servicio de Nginx con  sudo service nginx restart

Ahora si accedes a nombredetudominio.com te debería pedir un usuarios y una contraseña y posteriormente te deberia de aparecer la siguiente imagen:

Efectivamente, aún no aparece ningún dato ni nada. Eso es porque aún lo le está llegando nada, pero está todo listo para empezar a recibir datos. Para ello, vamos a configurar las fuentes de datos que ElasticSearch va a almacenar y posteriormente Kibana 5 nos permitirá analizar.

Configurar Input, Filter y Output de Logstash

Te dejo seguir la aventura con ayuda de las siguientes rutas:

https://www.elastic.co/guide/en/logstash/current/config-examples.html

https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html

El comando ./logstash -f /etc/logstash/conf.d/01-input-nginxLocal.conf te permite comprobar si la sintaxis de tu archivo de configuración es correcto.

Si tuvieras alguna duda escríbeme un comentario y ampliaré este punto o el que sea necesario. ¡Un saludo!

 

 

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *