Instalación de Kibana para monitorizar logs

En esta guía se verá como instalar Kibana, ElasticSearch y Logstash, como configurarlos y como crear paneles con ellos. Con respecto a logs logs, usaremos los de un servidor web Apache.

Como paso previo a empezar la instalación necesitamos tener instalado Java Runtime ya que Elasticsearch trabaja sobre este. Para ello ejecutamos lo siguiente:

apt-get install default-jre-headless

Instalar Elasticsearch

Para ello ejecutamos lo siguiente:

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

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

apt-get update

Con ello, hemos añadido el repositorio oficial para ahora, proceder con su instalación:

sudo apt-get install elasticsearch

Una vez instalado, tenemos que tener en cuenta que Elasticsearch consume una cantidad considerable de memoria, por lo que según la documentación oficial debemos fijar el límite de memoria en 1/4 de la memoria del servidor. En mi caso, estoy trabajando con una máquina vitual de 1GB de RAM por lo que he fijado el limite de memoria en 258 MB. Esto lo hacemos en el fichero /etc/elasticsearch/jvm.options. Dentro de este, tendremos comentados dos lineas, las cuales tendremos que descomentar y modificar por la cantidad que queramos:

## -Xms4g
## -Xmx4g

Una vez hecho esto, habilitamos y ejecutamos el mismo:

 sudo systemctl enable elasticsearch
 sudo systemctl start elasticsearch

Instalación Logstash

Simplemente tenemos que ejecutar lo siguiente:

sudo apt-get install logstash

Instalación Kibana

Podremos instalarlo ejecutando lo siguiente:

 sudo apt-get install kibana

Configuración

Primero crearemos un template por defecto. Para ello crearemos el fichero template.json con el siguiente contenido:

{
  "index_patterns": ["*"],
  "template": {
    "settings": {
      "index": {
        "number_of_shards": 1,
        "number_of_replicas": 0
      }
    }
  }
}

Luego, mediante CURL, con una petición POST subiremos esta template:

curl -XPUT -H'Content-type: application/json' http://localhost:9200/_index_template/defaults -d @template.json

En segundo lugar, procederemos a configurar logstash. Para ello haremos lo que hicimos antes con el Elasticsearch, limitar la cantidad de memoria que puede usar. Esto lo haremos sobre el fichero /etc/logstash/jvm.options modificando las mismas lineas

Luego, crearemos el siguiente fichero /etc/logstash/conf.d/apache.conf donde indicaremos de donde coger el input de los datos, es decir, los ficheros de log. Los filtros y el output:

input {
  file {
    path => '/var/www/*/logs/access.log'
    start_position => 'beginning'
  }
}

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

output {
  elasticsearch { }
}

Una vez hecho lo anterior pondremos a funcionar el servicio:

sudo systemctl enable logstash
sudo systemctl start logstash

Lo segundo a configurar es el Kibana es habilitar el servicio:

sudo systemctl enable kibana
sudo systemctl start kibana

Por defecto, Kibana solo permite acceder de forma local, en mi caso he tenido que ejecutar lo siguiente para poder acceder de forma «remota»:

ssh -N -L 5601:localhost:5601 IPServidor

Con esto hemos creado un puente de forma que al acceder a localhost al puerto 5601, accecederemos al del servidor. Podemos comprobarlo accediendo: http://localhost:5601.

Debería cargar lo siguiente:

Visualizar logs

Para poder visualizar los logs tendremos que crear la vista en el panel de Kibana. Para ello vamos a la siguiente opción:

Y crearemos un index nuevo:

Con esto, podremos visualizar log logs desde el panel, viendo cuando se crean mas registros, menos, entre otras opciones:

También podremos crear visualizaciones de forma que podemos ver todo de forma más gráfica y crear paneles con ello. Ejemplificaré esto creando un gráfico sencillo. Para ello crearemos una nueva visualización:

Tras clicar en «Aggregation based» y luego en «Pie». Seleccionamos el index creado con anterioridad. Tras esto, en el caso de los logs de apache , no puede interesar ver las peticiones con código 404 que llegan a nuestro servidor. Para ello añadimos un bucket cubriendo los campos como en la siguiente captura: