Cómo instalar ELK (Elasticsearch, Logstash y Kibana)

En este post os vamos explicar como instalar Elasticsearch, Kibana y Logstash. Con estas 3 herramientas podemos tener nuestros registros logs centralizados, podremos realizar búsquedas avanzadas o analizar datos.

Instalar Java JDK

Para instalar JDK añadiremos el repositorio ppa, actualizaremos repositorios e instalaremos java, para ellos ejecutaremos:
# add-apt-repository ppa:webupd8team/java
# apt-get update
# apt-get install oracle-java8-installer
# java -version

El último comando nos sirve para ver si se ha instalado correctamente, nos ha de mostrar algo similar a:
java version “1.8.0_144”
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

Instalar Elasticsearch

Elasticsearch es un motor de búsqueda y análisis distribuido, para instalarlo añadiremos el repositorio de Elastic y procederemos con la instalación:
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
# apt-get update
# apt-get install elasticsearch

Ahora cambiaremos la configuración de Elasticsearch para que funcione con la IP Privada de nuestro servidor:
# vi /etc/elasticsearch/elasticsearch.yml
Añadiremos o modificaremos:

network.host: IP-Privada

Ahora arrancaremos Elasticsearch y configuraremos que arranque automáticamente al reiniciar el servidor.
# systemctl start elasticsearch
# systemctl enable elasticsearch

Instalar Kibana

Kibana te permite explorar, visualizar o descubrir datos. Además podemos obtener gráficas o colocar datos geográficos en cualquier mapa, para instalar Kibana:
# apt-get install kibana

server.host: "IP-Privada"
elasticsearch.url: "http://IP-Privada:9200"

Ahora arrancaremos Kibana y configuraremos que arranque automáticamente al reiniciar el servidor.
# systemctl start kibana
# systemctl enable kibana

Instalar Nginx

Kibana funciona a través del puerto 5601, usaremos Nginx para redireccionar todo el tráfico del puerto 80 al puerto 5601 mediante el usuario adminkibana y la contraseña que elijamos.
# apt-get install nginx apache2-utils
# htpasswd -c /etc/nginx/htpasswd.kibana adminkibana
# echo > /etc/nginx/sites-available/default

Contenido para fichero default, hemos de cambiar los valores de la linea 4 y 10:

server {
    listen 80;

    server_name IP-Publica;

    auth_basic "Acceso a Kibana";
    auth_basic_user_file /etc/nginx/htpasswd.kibana;

    location / {
        proxy_pass http://IP-Privada: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;        
    }
}

Ahora arrancaremos Nginx y configuraremos que arranque automáticamente al reiniciar el servidor.
# systemctl start nginx
# systemctl enable nginx

Instalar Logstash

Logstash nos permite centralizar, transformar y almacenar nuestros datos. En el siguiente artículo os enseñamos más ejemplos de filtros. Para instalar Logstash ejecutaremos:
apt-get install logstash
Ahora crearemos los siguiente filtros:

input {
  beats {
    port => 5044
    ssl => false
  }
}
filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
      add_field => [ "program", "%{syslog_program}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}
output {
  elasticsearch {
    hosts => "IP-Privada:9200"
    sniffing => true
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

Ahora arrancaremos Logstash y configuraremos que arranque automáticamente al reiniciar el servidor.
systemctl start logstash
systemctl enable logstash

Cargar Beats Dashboards

# wget https://github.com/elastic/beats-dashboards/archive/master.zip
# unzip master.zip
# cd beats-dashboards-master
# vi load.sh

Modificamos la linea que contenga ELASTICSEARCH:

ELASTICSEARCH=http://IP-Privada:9200

# ./load.sh

Entraremos en Kibana http://IP-Pública con el usuario y contraseña que hemos creado en “Instalación Nginx”, dentro de Kibana iremos a Management > Index Patterns haremos clic en filebeat-* y luego en la “estrella”. Así establecemos este filtro por defecto.

Ya tenemos nuestro ELK funcionando:

Puede que te interesen estos otros artículos: Filtros para Logstash o Como enviar datos a ELK mediante Filebeats.

To write a comment on this article, fill out the form below. Fields marked with an asterisk (*) are required.