Cómo instalar Elasticsearch, Logstash y Kibana (ELK Stack) en Ubuntu/Debian

Artículos Guías Manuales Sistemas Linux Windows Binario 0

Esta guía detalla el proceso para instalar y configurar Elasticsearch, Logstash y Kibana en un servidor basado en Debian o Ubuntu.

Requisitos Previos

  1. Un servidor Debian/Ubuntu actualizado con acceso sudo.
  2. Al menos 4 GB de RAM para un rendimiento básico.
  3. Configuración inicial del servidor, incluyendo la instalación de curl, wget y ufw:

    sudo apt update && sudo apt install -y curl wget apt-transport-https
  4. Instalar Java, que es necesario para Elasticsearch y Logstash:

    sudo apt install -y openjdk-11-jdk

Puedes verificar la versión instalada con:

java -version

Paso 1: Instalar Elasticsearch

Elasticsearch es un motor de búsqueda y análisis que se encargará de almacenar y consultar los registros.

  1. Agregar la clave GPG de Elasticsearch:

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  2. Agregar el repositorio:

    echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
  3. Actualizar los repositorios e instalar Elasticsearch:

    sudo apt update sudo
    apt install -y elasticsearch
  4. Configurar Elasticsearch:
    • Abre el archivo de configuración:

      sudo nano /etc/elasticsearch/elasticsearch.yml
    • Configura las siguientes opciones básicas:

      network.host: localhost
      cluster.name: my-cluster
      node.name: node-1
  5. Habilitar e iniciar Elasticsearch:

    sudo systemctl enable elasticsearch
    sudo systemctl start elasticsearch
  6. Probar Elasticsearch:

    Ejecuta este comando para verificar que está funcionando:

    curl -X GET 'http://localhost:9200'

    Deberías ver una respuesta en formato JSON con información del nodo y la versión.

Paso 2: Instalar Kibana

Kibana proporciona una interfaz gráfica para visualizar y analizar los datos almacenados en Elasticsearch.

  1. Instalar Kibana: Usa el mismo repositorio de Elasticsearch:

    sudo apt install -y kibana
  2. Configurar Kibana:
    • Edita el archivo de configuración:

      sudo nano /etc/kibana/kibana.yml
    • Establece el host del servidor como localhost:

      server.host: "localhost"
  3. Habilitar e iniciar Kibana:

    sudo systemctl enable kibana
    sudo systemctl start kibana
  4. Acceder a Kibana:

    Abre un navegador y navega a http://<IP-del-servidor>:5601.

Paso 3: Instalar Logstash

Logstash se utiliza para procesar y transformar los datos antes de enviarlos a Elasticsearch.

  1. Instalar Logstash:

    sudo apt install -y logstash
  2. Configurar Logstash:
    • Crea un archivo de configuración en /etc/logstash/conf.d/logstash.conf:

      sudo nano /etc/logstash/conf.d/logstash.conf
    • Añade un pipeline básico:

      input {
      beats {
      port => 5044
      }
      }
      filter {}
      output {
      elasticsearch {
      hosts => ["localhost:9200"]
      }
      }
  3. Habilitar e iniciar Logstash:

    sudo systemctl enable logstash
    sudo systemctl start logstash

Paso 4: Instalar Filebeat

Filebeat recopila los registros desde los servidores cliente y los envía a Logstash.

  1. Instalar Filebeat en el servidor cliente:

    sudo apt install -y filebeat
  2. Configurar Filebeat para enviar registros a Logstash:
    • Edita el archivo /etc/filebeat/filebeat.yml:

      output.logstash:
      hosts: ["<IP-Logstash>:5044"]
    • Habilita el módulo de logs del sistema:

      sudo filebeat modules enable system
  3. Probar Filebeat:

    sudo filebeat test output
  4. Habilitar e iniciar Filebeat:

    sudo systemctl enable filebeat
    sudo systemctl start filebeat

Paso 5: Configurar el Firewall

Permite el tráfico necesario para los servicios del ELK Stack:

sudo ufw allow 5601  # Kibana
sudo ufw allow 9200 # Elasticsearch
sudo ufw allow 5044 # Logstash
sudo ufw enable

Paso 6: Validar la Configuración

  1. Enviar datos de prueba a Elasticsearch:

    curl -X POST "localhost:9200/logs/_doc/" -H 'Content-Type: application/json' -d'
    {
    "message": "Prueba de Elasticsearch",
    "timestamp": "2024-11-28T00:00:00"
    }'
  2. Ver los registros en Kibana:
    • Abre Kibana, ve a la pestaña "Discover" y selecciona el índice creado (logs-*).

Paso 7: Configurar Nginx como proxy inverso para Kibana

1. Instalar Nginx

Primero, asegúrate de que Nginx esté instalado:

sudo apt update
sudo apt install -y nginx

2. Crear un archivo de usuarios para autenticación básica

  1. Genera un archivo con credenciales de usuario para proteger el acceso a Kibana:

    echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
    • Sustituye kibanaadmin por el nombre de usuario deseado.
    • Cuando se te solicite, ingresa la contraseña para el usuario. Esta será cifrada automáticamente.
  2. Verifica el contenido del archivo generado:

    cat /etc/nginx/htpasswd.users

3. Configurar un bloque de servidor en Nginx

  1. Crea un archivo de configuración para tu dominio o subdominio en Nginx:

    sudo nano /etc/nginx/sites-available/kibana
  2. Añade la configuración siguiente al archivo:

    server {
    listen 80;

    server_name example.com;
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    location / { proxy_pass http://localhost:5601;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
    }
    • Sustituye example.com por tu dominio o dirección IP.
  3. Enlaza este archivo de configuración a sites-enabled:

    sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
  4. Verifica la configuración de Nginx para asegurarte de que no haya errores:

    sudo nginx -t
  5. Reinicia Nginx para aplicar los cambios:

    sudo systemctl restart nginx

4. Probar la configuración

  1. Abre tu navegador y navega a http://example.com (o el dominio configurado).
  2. Deberías ver un cuadro de autenticación solicitando las credenciales.
  3. Ingresa el nombre de usuario y contraseña configurados anteriormente.

5. Opcional: Configurar HTTPS con Let’s Encrypt

Para mayor seguridad, puedes configurar HTTPS usando Let's Encrypt:

  1. Instala el cliente Certbot para Nginx:

    sudo apt install -y certbot python3-certbot-nginx
  2. Genera el certificado SSL:

    sudo certbot --nginx -d example.com
  3. Renueva automáticamente los certificados:

    sudo crontab -e

    Añade esta línea para ejecutar la renovación automáticamente:

    0 3 * * * certbot renew --quiet

Conclusión

Ahora tienes un entorno seguro donde Kibana está protegido por una capa de autenticación y redirigido a través de Nginx. Además, puedes usar HTTPS para cifrar el tráfico hacia tu servidor. Esta configuración es ideal para entornos de producción donde se manejan datos sensibles.