Centralizar Logs – FileBeat + ElasticSearch + Kibana

 

Introducción

Al igual que en la entrada monitorizar tus hosts recopilábamos información sobre el sistema de varios hosts gracias a varios componentes, ahora con la ayuda de estos componentes:

Con FileBeat recolectaremos los logs de nuestras máquinas clientes para enviarlos al servidor donde se almacenarán los logs gracias al componente ElasticSearch directamente. Luego gracias a una plantilla para FileBeat filtraremos los logs y los podremos visualizar gracias al componente Kibana, que recogerá la información de los logs de ElastiSearch.

Versiones:

  • Filebeat 6.1.1
  • ElasticSearch 6.1.1
  • Kibana 6.1.1

Esquema:

Instalación de ElasticSearch & Kibana en la máquina servidor

Java

Lo primero de todo es instalar java en dicha máquina, para que estos componentes puedan funcionar.

Para verificar que la instalación se ha hecho correctamente verificamos con el siguiente comando:

ElasticSearch

ElasticSearch puede ser instalado desde RPM, un paquete deb o desde el código fuente. Si quieres descargar la última versión, puedes hacerlo aquí.

En este caso vamos a descargar el .deb de Elastic

Instalamos con dpkg el paquete:

Ahora cambiamos la asignación de memoria máxima:

Nota: si tenemos menos de 2GB de ram en dicha máquina, donde estamos instalando elasticsearch, nos dará un failed a la hora de iniciarlo, diciendo que no tiene suficiente memoria ram, si fuera el caso tendríamos que modificar estos parámetros en /etc/elasticsearch/jvm.options:

Nota: si descargáis elasticsearch desde el repositorio 6.x, puede ser que no se os cree el fichero jvm.options, desconozco el motivo pero en otras versiones del repositorio anteriores si me venían, y con el paquete .deb no he tenido ningún tipo de problema.

Antes de iniciar elasticsearch, vamos a realizar una comprobación mínima de la configuración

Una vez tengamos instalado elasticsearch y las dependencias java, en el directorio /etc/elasticsearch tenemos dos ficheros:

  • elasticsearch.yml: donde configuramos todas las opciones del servidor ElasticSearch, excepto las de registro
  • logging.yml: aquí es donde se tocarían las opciones de registro, en un principio dejaremos dicha configuración por defecto, aún así de manera predeterminada es bueno saber que los logs se almacenan en /var/log/elasticsearch

Ahora modificamos el nombre del nodo y de nuestro cluster (/etc/elasticsearch/elasticsearch.yml):

Esta sería la configuración mínima aún así, vamos a mirar alguna más.

El parámetro que determina si un nodo es maestro es el siguiente, Por defecto un es maestro, si solo tenemos un nodo como es nuestro caso, dejaríamos esta opción en True, ya que al menos necesitamos 1 nodo maestro en cualquier escenario. Si quisieramos que el nodo actuará en esclavo solamente tendríamos que cambiar el valor a False:

Otra opción importante y que determina si el nodo almacenará información o no, y en la que en la mayoria de los casos deberá dejarse en True. Si por ejemplo queremos que el nodo recoga la información y la muestre solamente, el nodo actuaría como un balanceador de carga:

En despliegues de muchos nodos, hay dos opciones muy importantes, la primera determina en cuantos fragmentos se dividirán en el índice y la segunda cuantas replicas se distribuirán dentro del cluster. Contra más fragmentos indiquemos mejor rendimiento de indexación y mientras más replicas hará que la búsqueda sea más rápida.

Si solamente estuviéramos probando con un nodo podríamos indicar mejor los valores: 1 y 0.

Otra opción muy interesante es la ruta de donde se almacenan los datos:

Por defecto la ruta es /var/lib/elasticsearch, si estuviéramos en producción sería recomendable cambiar la ruta.

Por último tendremos que modificar para que elasticsearch escuche en todas las interfaces y direcciones en:

Necesitaremos instalar también un plugin que utiliza en algunos dashboard filebeat:

Ahora iniciamos Elasticsearch:

Y activamos el inicio del servicio ahora en el arranque del sistema:

Por último si ejecutamos la siguiente instrucción con la dirección IP de la máquina:

Nos debería devolver una salida parecida a esta:

Nota: recordar tener abierto el puerto 9200 tcp, si estamos utilizando algún tipo de cortafuegos.

Kibana

Kibana no requiere de java, vamos a conseguir kibana de los repositorios públicos de Elastic:

Instalamos:

Editamos el fichero de configuración: /etc/kibana/kibana.yml

Editamos lo siguiente:

Verificamos que este escuchando en el puerto a todas las direcciones:

Activamos kibana en el arranque del sistema y ahora:

Nota: Habilitar el puerto 5601 por defecto en Kibana, en tu cortafuegos.

Instalación de FileBeat en máquinas clientes

Instalación en Ubuntu 16.04 – Debian 9

Este nodo actuará como un agente como cualquier otra máquina cliente en cualquier entorno que necesite enviar todos sus logs a una ubicación central.

Filebeat puede ser instalado desde RPM, un paquete deb o desde el código fuente. Si quieres descargar la última versión, puedes hacerlo aquí.

Nosotros vamos a instalar Filebeat usando apt. Necesitaremos añadir la clave apt que nos proporciona elastic, de la siguiente forma:

Tradicionalmente las URLS de los repositorios apt son http, no https. Por lo visto recientemente estan empezando a soportar SSL/TLS. Para que esto funcione necesitamos tener instalado en nuestro sistema el paquete apt-transport-https:

Ahora vamos a conseguir un .list para el directorio /etc/apt, que contiene la URL del repositorio del cual descargaremos el paquete filebeat. Así:

Actualizamos la cache de los paquetes:

E instalamos filebeat:

Instalación en Centos 7

Para añadir el repositorio Beats para YUM:

Descargamos e instalamos la clave pública:

Creamos un fichero por ejemplo llamado elastic.repo dentro del directorio /etc/yum.repos.d/ y añadimos las siguientes lineas:

Una vez añadido correctamente, instalamos filebeat ejecutando:

Para configurar que inicie en el arranque del sistema:

Configuración de FileBeat

Como suele ser normal, el directorio donde se encuentran los ficheros de configuración en este caso es /etc/filebeat

Antes de retocar el fichero, suele ser una buena práctica que tengamos una copia del fichero original:

Por defecto el fichero viene con configuraciones de ejemplo, modificaremos algunas y otras la dejaremos tal cual.

Importante: indicar el fichero log “auth.log” o no es capaz de volcar la información de los logs en el dashboard de kibana con el index pattern “filebeat-*”. Ni que decir que no hay que poner la ruta de los logs en el fichero de configuración si en esa distribucción no existen.

Podemos identificar dos secciones diferentes principales en este fichero:

  • Filebeat prospectors: donde se detalla la información de los logs, la localización y sus orígenes.
  • Output: donde le indicamos a filebeat donde tiene que enviar los mensajes.

En un principio y ya que esto es un primer acercamiento solo vamos a modificar la sección para enviar los logs, a elasticsearch, que se encuentra en la máquina que hará el rol de server. Por lo tanto la dirección IP que tendremos que indicar en dicho fichero es la de la máquina servidor 🙂

Por defecto, FileBeat automáticamente carga el fichero de plantilla recomendado /etc/filebeat/fields.yml si “Elasticsearch output” esta habilitado.

Nota: en este caso estamos utilizando Filebeat, pero si quisiéramos que la salida fuera con Logstash, deberíamos cargar una plantilla manualmente de la siguiente forma

Siendo así también necesario indicar en la configuración de FileBeat, la dirección del otro componente Kibana, para que pueda cargar el dashboard gracias a la API de Kibana.

Indicar la dirección de donde esta el servidor de elasticsearch, en este caso indicamos también la dirección del servidor:

Habilitar el módulo system, que nos facilitará la visualización de syslog, podemos simplemente quitar la extensión “disabled” al nombremodulo.yml.disabled

O ejecutar la siguiente instrucción (ambas son válidas):

Si queremos ver los módulos que tenemos activados y desactivados:

Por último activamos el inicio del servicio ahora y en el arranque del sistema:

Ahora podemos ver la información que arroja filebeat con el siguiente comando:

Esto es de muchísima ayuda en el caso de que queramos ir depurando o ver porque motivo no esta enviando los logs 🙂

Si la salida que os muestra es parecida a esta, es que esta correctamente:

 

Si necesitáramos más opciones de configuración para filebeat, Podríamos mirar aquí

Accediendo al panel web de Kibana

Ahora entramos en la URL: http://172.22.201.43:5601

Nos vamos al apartado Management -> Index Patterns -> e introducimos filebeat-* , en el caso de que no, nos lo reconociera automáticamente.

Ahora si nos vamos a la sección Dashboard y filtramos por Syslog, veremos un gráfico parecido a este 😉

Desde el propio panel, arriba en el input, podemos filtrar los campos que nos devuelve cada uno de los logs, en este caso os muestro unas capturas donde se filtran el campo system.syslog.message

Dashboard SSH Logins

Filebeat también nos proporciona un dashboard, para poder visualizar las veces que se ha conectado por ssh a la máquina, las conexiones ssh aceptadas y fallidas y si fueron por contraseña o por clave pública.

Nota: para que este dashboard funcione hace falta filtrar el log: /var/log/auth.log

Enviar notificaciones

Si quisiéramos que se nos notificase ante cualquier evento, podríamos usar “watcher

Solución de problemas

Can only start a prospector when all related states are finished

Si cuando accedamos al panel web de Kibana en el apartado “Dashboard” nos aparece el mensaje “No results found”, por defecto en FileBeat, si hacemos cambios en el propector, no podremos arrancar el proceso hasta que no borramos un fichero, que es donde se vuelca la información de dicho prospector.

Solución:

El fichero a eliminar es: /var/lib/filebeat/registry

ERR Failed to connect

Si al ejecutar la instrucción:

Os aparece una linea como esta:

Solución:

En la máquina donde tenemos instalado elasticsearch, instalar el siguiente plugin:

Referencias:

https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html

https://www.howtoforge.com/tutorial/how-to-install-elastic-stack-on-ubuntu-16-04/#step-install-and-configure-filebeat-on-an-ubuntu-client

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html

https://manuelfrancoblog.wordpress.com/2017/12/04/metricbeat-elasticsearch-y-kibana/

Autor entrada: CharlieJ

Deja un comentario

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