Descubre cómo instalar Elasticsearch, Logstash y Kibana (Elastic Stack) en Ubuntu 22.04 con un script Bash. Este script te guiará a través del proceso de instalación y configuración de cada componente, facilitando la implementación de una poderosa solución de gestión de registros y análisis de datos.
Requisitos previos
Para completar este tutorial, necesitará lo siguiente:
- Un servidor Ubuntu 20.04 con un usuario sudo. Puede configurar esto siguiendo nuestra guía de configuración inicial del servidor Ubuntu 20.04.
Requerimientos de sistema
- Memoria : 2GB o más
- Cpu: 4 Cores a más
- Disco duro : Más de 50GB de espacio disponible en disco duro
- Sistema : (Ubuntu20, Debian10), garantizar que sea un sistema operativo limpio
Contenido: En este tutorial, aprenderás a utilizar un script Bash para realizar la configuración automatizada de ELK Stack en tu servidor. El script aborda los siguientes pasos:
- Actualización y mejora del sistema operativo.
- Verificación e instalación de herramientas esenciales, como Nginx, Java y Whiptail.
- Configuración de Elasticsearch con ajustes personalizados, incluyendo la modificación de la dirección IP.
- Instalación y configuración de Kibana, con la opción de establecer contraseñas de usuario.
- Configuración de Nginx como un servidor proxy para Kibana, permitiendo el acceso desde un dominio personalizado o localhost.
- Instalación y configuración de Logstash, con la creación de archivos de entrada y salida para Elasticsearch.
- Configuración de Filebeat para enviar datos a Logstash o Elasticsearch, según las preferencias.
Este script interactivo guía al usuario a través de cada paso, proporcionando mensajes de progreso y pausas para revisar la información crítica. Al finalizar, tendrás un entorno ELK Stack completamente funcional y listo para la visualización y análisis avanzado de datos y registros.
#!/bin/bash
# Función para verificar la instalación de un paquete
check_installation() {
if [ $? -eq 0 ]; then
echo "$1 instalado correctamente."
else
echo "Error al instalar $1. Saliendo."
exit 1
fi
}
# Mensaje de inicio
echo "Iniciando la configuración del sistema..."
# Actualizar y mejorar el sistema
echo "Ejecutando apt update y apt upgrade..."
sudo apt update
sudo apt upgrade -y
# Verificar si whiptail está instalado
echo "Verificando si whiptail está instalado..."
if ! [ -x "$(command -v whiptail)" ]; then
echo 'whiptail no está instalado. Instalando...'
sudo apt-get install whiptail -y
check_installation "whiptail"
else
echo "whiptail ya está instalado."
fi
# Verificar si Nginx está instalado
echo "Verificando si Nginx está instalado..."
if ! [ -x "$(command -v nginx)" ]; then
echo 'nginx no está instalado. Instalando...'
apt-get install nginx -y
check_installation "Nginx"
else
echo "Nginx ya está instalado."
fi
# Verificar si Java está instalado
echo "Verificando si Java está instalado..."
if ! [ -x "$(command -v java)" ]; then
echo 'Java no está instalado. Instalando...'
apt-get install default-jre -y
check_installation "Java"
else
echo "Java ya está instalado."
fi
# Configurar Elasticsearch
echo "Configurando Elasticsearch..."
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch |sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
# Configurar Kibana
echo "Configurando Kibana..."
sudo apt install kibana
sudo systemctl enable kibana
sudo systemctl start kibana
# Obtener la contraseña del usuario para Elasticsearch
echo "network.host: "0.0.0.0"" | sudo tee -a /etc/elasticsearch/elasticsearch.yml
echo "cluster.name: demo-elk" | sudo tee -a /etc/elasticsearch/elasticsearch.yml
echo "node.name: elk-1" | sudo tee -a /etc/elasticsearch/elasticsearch.yml
echo "discovery.type: single-node" | sudo tee -a /etc/elasticsearch/elasticsearch.yml
# Configurar Nginx
echo "Configurando Nginx..."
domain_option=$(whiptail --title "Configuración de nginx" --menu "Seleccione una opción:" 15 60 4 \
"1" "Dominio personalizado" \
"2" "Localhost" \
3>&1 1>&2 2>&3)
case $domain_option in
1)
domain=$(whiptail --inputbox "Ingrese el dominio personalizado:" 10 60 3>&1 1>&2 2>&3)
domain_option2=$domain
;;
2)
# Obtener automáticamente la dirección IP local
domain_option2="kibana"
domain=$(hostname -I | awk '{print $1}')
;;
*)
echo "Opción no válida. Saliendo."
exit 1
;;
esac
config_file="/etc/nginx/sites-available/$domain_option2"
cat > "$config_file" << EOL
server {
listen 80;
server_name $domain;
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";
}
}
EOL
# Configurar Kibana
echo "Configurando Kibana..."
sudo bash -c 'cat >> /etc/kibana/kibana.yml' <<EOL
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
EOL
service elasticsearch restart
service kibana restart
# Pausa para revisar mensajes
read -p "Presiona Enter para continuar..."
# Crear enlace simbólico solo si el archivo de configuración se ha creado con éxito
if [ -e "$config_file" ]; then
sudo ln -s "$config_file" "/etc/nginx/sites-enabled/$domain_option2"
# Verificar la configuración de Nginx antes de recargar
sudo nginx -t && sudo systemctl reload nginx
else
echo "Error al crear el archivo de configuración. Saliendo."
exit 1
fi
echo "Configuración de Nginx completa."
# Pausa para revisar mensajes
read -p "Presiona Enter para continuar..."
# Configurar Logstash
echo "Configurando Logstash..."
sudo apt install logstash
# Crear archivo de entrada para beats
cat > /etc/logstash/conf.d/02-beats-input.conf << EOL
input {
beats {
port => 5044
}
}
EOL
# Crear archivo de salida para Elasticsearch
cat > /etc/logstash/conf.d/30-elasticsearch-output.conf << EOL
output {
if [@metadata][pipeline] {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
}
} else {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
}
EOL
# Verificar la configuración de Logstash antes de reiniciar
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
# Reiniciar Logstash
sudo systemctl restart logstash
sudo systemctl start logstash
sudo systemctl enable logstash
# Pausa para revisar mensajes
read -p "Presiona Enter para continuar..."
# Configurar Filebeat
echo "Configurando Filebeat..."
sudo apt install filebeat
filebeat_conf="/etc/filebeat/filebeat.yml"
# Descomentar las líneas de output.logstash y hosts
sed -i '/^#output\.elasticsearch:/,/^#hosts: \["localhost:9200"\]/ { s/^#output\.elasticsearch:/output.logstash:/; s/^ #hosts: \["localhost:9200"\]/ hosts: \["localhost:5044"\]/ }' "$filebeat_conf"
sudo filebeat modules enable system
sudo filebeat setup --pipelines --modules system
sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=[http://localhost:9200]'
sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
sudo systemctl start filebeat
sudo systemctl enable filebeat
echo "Configuración completa. Puedes acceder a Kibana en http://$domain_option/ o http://$domain/"
¡Transforma la gestión de registros y obtén insights significativos con ELK Stack de manera rápida y eficiente gracias a este script Bash!



Habilitando interfaz de login
se deseamos activar la interfaz de logueo, debemos reaalizar los siguiente pasos:
Activamos el xpack correspondiente al servicio de elasticsearch y reinciamos.
echo "xpack.security.enabled: true" | sudo tee -a /etc/elasticsearch/elasticsearch.yml
service elasticsearch restart
Luego establecemos las credenciales de acceso ejecutando el siguiente comando :
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
Luego debemos editar el fichero kibana.yml nano /etc/kibana/kibana.yml e ingresamos la clave generada :
xpack.security.enabled: true
elasticsearch.username: "kibana"
elasticsearch.password: "kibana_password"
y hacemos lo mismo con el archivo filebeat nano /etc/filebeat/filebeat.yml
username: "elastic"
password: elastic_password
luego reiniciamos ambos servicios
service elasticsearch restart
service kibana restart

1 comment
Me has dejado helado… Solo te falto agregar el certificado de letsencrypt y ya dejabas el servidor montado, esta es la quinta vez que monto un servidor elk pero nunca me habia resultado tan facil.