Elastic Stack es una colección de Software de Código Abierto producido por Elastic, que permite buscar, analizar y visualizar registros generados desde cualquier fuente y en cualquier formato.

A nivel de sistemas, podemos utilizarlo para analizar los registros de todos nuestros servidores y ver donde hay problemas. Elastic Stack cuenta con cuatro componentes principales:

  • ElasticSearch: Es un motor de búsqueda distribuido que almacena todos los datos recopilados.
  • Logstash: Es un componente de procesamiento de datos de Elastic Stack que envia datos entrantes a ElasticSearch.
  • Kibana: Es una interfaz web par buscar y visualizar los registros.
  • Beats: Es un transportador de datos ligeros de uso único que pueden enviar datos a cientos o miles de maquinas de ElasticSearch.

En el siguiente tutorial, instalaremos las herramientas mencionadas anteriormente en una maquina con Ubuntu 20.04. También instalaremos FileBeat, un Beat que se usa para reenviar y centralizar registros y archivos. Además, también instalaremos un Nginx par Proxy Inverso ya que Kibana se tendrá que configurar en localhost.

Requisitos previos

Para seguir con el tutorial es necesario tener instalado en el servidor:

  • Un servidor con Ubuntu 22.04,con 4GB de RAM y 2 CPU configuradas con un usuario sudo no root. Estos son los requisitos mínimos para ElasticSearch.
  • OpenJDK 11 instalado.
  • Nginx instalado en el servidor, que configuraremos más adelante como Proxy Inverso.
  • También será necesario un dominio o subdominio para configurar el acceso a Kibana.

Instalación de ElasticSearch

Los componentes de ElasticSearch no se encuentran en los repositorios de Ubuntu, pero se pueden instalar por APT añadiendo los repositorios.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

Actualizaremos los repositorios:

sudo apt update

Y luego procederemos a instalarlo:

sudo apt install elasticsearch

Editaremos el fichero de configuración /etc/elasticsearch/elasticsearch.yml y descomentaremos la siguiente línea:

network.host: localhost

Después de la instalación, habilitaremos y arrancaremos el servicio de ElasticSearch:

systemctl enable elasticsearch
systemctl start elasticsearch

Si comprobamos los puertos habilitados, veremos que ElasticSearch está utilizando el puerto 9300:

# netstat -tulnp | grep 9300
tcp6  0      0 ::1:9300         :::*   LISTEN      17464/java          
tcp6  0      0 127.0.0.1:9300   :::*   LISTEN      17464/java

Instalación de Kibana

Kibana es una plataforma de visualización de datos de código abierto para Elasticsearch. Instalaremos Kibana desde el mismo repositorio que Elasticsearch:

apt install kibana

Habilitaremos y arrancaremos el servicio Kibana igual que hicimos con Elasticsearch:

systemctl enable kibana
systemctl start kibana

Por defecto, Kibana se ejecuta en el puerto 5601.

# netstat -tulpn | grep 5601
tcp   0      0 127.0.0.1:5601     0.0.0.0:*    LISTEN     17797/node
💡
Es importante asegurarse de que el firewall de tu servidor permita el tráfico en este puerto.

Instalación de Logstash

Logstash es una herramienta para la recolección, procesamiento y envío de logs y eventos. Para instalar Logstash, usaremos el mismo repositorio.

apt install logstash

A diferencia de Elasticsearch y Kibana, no iniciaremos Logstash todavía. Primero, es necesario configurar un 'pipeline' que defina específicamente cómo debe procesar los logs.

Configuración de Logstash

Los pipelines de Logstash se configuran usando archivos de configuración, que especifican inputs, filters y outputs. Crearemos un archivo de configuración básico:

nano /etc/logstash/conf.d/basic.conf

Un ejemplo de contenido podría ser:

input {
  file {
    path => "/var/log/*.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
  }
  stdout { codec => rubydebug }
}

Este archivo de configuración básico indica a Logstash que lea los archivos de logs de una aplicación específica, los procese y los envíe a Elasticsearch ejecutándose localmente.

Después de configurar el pipeline, ahora podemos iniciar Logstash:

systemctl enable logstash
systemctl start logstash

Configuración de Nginx Proxy

Para poder acceder a la interfaz de Kibana, tendremos que configurar un Nginx Proxy que permita acceder al puerto 5601 mediante un dominio.

Para ello tendrás que seguir con el siguiente tutorial:

Configurar Proxy Inverso con Nginx para que escuche a un puerto interno
En ocasiones tenemos servicios o aplicaciones web que escuchan directamente a un puerto interno. Para evitar acceder a dicha aplicación o servicio por la IP del servidor, una configuración que podemos hacer es acceder desde un Nginx Proxy.

Accediendo por primera vez a Kibana

Una vez tengamos configurada el acceso por domino, accederemos con nuestro navegador favorito y seguiremos estos pasos:

Aquí podemos configurar un token que podemos crear en la configuración de Kibana, pero en nuestro caso utilizaremos la configuración manual. Hacemos clic en Configure manually y seguimos.

ElasticSearch lo tenemos escuchando al puerto 9200, por lo que seguiremos haciendo clic en Check Address.

El nombre de usuario deberá de ser kibana_system. Para mostrar la contraseña deberemos de ejecutar el siguiente comando:

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system

Luego marcaremos el certificado y haremos clic sobre Configure Elastic.

Nos pedirá un código de verificación que podremos obtener ejecutando el siguiente comando:

# /usr/share/kibana/bin/kibana-verification-code
Your verification code is:  535 063 

Tras esto, Kibana iniciará la configuración automáticamente:

Una vez acabe y nos muestre el login podremos crearnos el usuario de la siguiente forma:

/usr/share/elasticsearch/bin/elasticsearch-users useradd [Nombre_usuario] -r kibana_user

Configuramos la contraseña y ya podremos acceder con nuestro usuario:

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación