Introducción
La pila ELK es un conjunto popular de herramientas que consta de Elasticsearch, Logstash y Kibana. Estas tres herramientas forman una pila de software que puede funcionar como una herramienta de visualización de registro de servidor y análisis de datos de red centralizada extremadamente poderosa. La pila ELK también está diseñada para ser muy capaz de escalar a través de múltiples servidores para equilibrar la carga. En este instructivo, instalaremos todos los componentes de la pila ELK en un solo servidor.
Requisitos
- Un servidor que ejecuta Debian 8. Si aún no tiene un servidor, Atlantic.net ofrece servidores de alojamiento VPS confiables que puede activar en menos de 30 segundos.
Se admiten otros sistemas operativos, pero este artículo se concentra en Debian 8.
Instalación de la pila ELK en Debian 8
Sudo
Por lo general, se desaconseja trabajar como usuario raíz desde el punto de vista de la seguridad. Usando sudo
le permite ejecutar comandos que requieren privilegios de root de un usuario no root. Por defecto, Debian no incluye el sudo
paquete, así que lo instalaremos.
apt-get install sudo
Luego deberá agregar la cuenta de usuario estándar a sudo
grupo en el que desea poder ejecutar comandos de privilegios de root. Reemplazar <username>
con el nombre de usuario de la cuenta.
adduser <username> sudo
Cierra la sesión y vuelve a iniciarla con tu nuevo usuario, y podemos continuar.
La primera vez que usas sudo
en una sesión le pedirá la contraseña del usuario actual.
Instalación de Elasticsearch
Comencemos el proceso instalando Java en nuestro servidor.
Elasticsearch, el componente de indexación y búsqueda de datos de la pila ELK, requiere Java para ejecutarse. Instalaremos la versión OpenJDK 7, sin embargo, puede instalar cualquier JRE que figure en la matriz de soporte para Elasticsearch.
Primero, necesitaremos actualizar las listas de paquetes en nuestro servidor.
sudo apt-get update
Ahora podemos instalar el JRE.
sudo apt-get install openjdk-7-jre
Esta instalación puede demorar un tiempo ya que hay muchas dependencias que APT debe ordenar.
Una vez que haya terminado, podemos instalar Elasticsearch. La versión de Elasticsearch en los repositorios oficiales de Debian es muy antigua y no es compatible con las versiones más nuevas de Kibana, por lo que agregaremos el repositorio elastic.co a nuestro servidor e instalaremos Elasticsearch desde allí.
Descargue e instale la clave de firma del repositorio para elastic.co.
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
A continuación, podemos agregar el repositorio a /etc/apt/sources.list.d/
directorio.
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/Elasticsearch-2.x.list
En este punto, debemos actualizar las listas de paquetes nuevamente, lo que agregará la versión más nueva de Elasticsearch del repositorio de elastic.co a las listas de paquetes.
sudo apt-get update
Ahora, podemos instalar Elasticsearch.
sudo apt-get install elasticsearch
También necesitaremos configurar el servicio Elasticsearch para que se inicie al iniciar el sistema.
sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service
¡Eso es todo! Ahora puede iniciar el servicio Elasticsearch.
sudo systemctl start elasticsearch.service
Y asegúrese de que esté activo.
systemctl status elasticsearch.service
Configuración de búsqueda elástica
En nuestro caso, no es necesario, pero si va a ejecutar Kibana y Elasticsearch en diferentes servidores (como lo hacen muchas implementaciones de ELK), deberá editar el archivo de configuración de Elasticsearch, /etc/elasticsearch/elasticsearch.yml
en el servidor de Elasticsearch y agregue las siguientes dos líneas en cualquier parte del archivo:
http.cors.allow-origin: "/.*/" http.cors.enabled: true
En el mismo archivo, agregue una línea para nombrar el clúster de Elasticsearch. El nombre predeterminado es búsqueda elástica.
cluster.name: elasticcluster
Edición del archivo de configuración de Elasticsearch
Asegúrese de no agregar líneas o espacios en blanco al archivo de configuración, ya que los archivos YAML son sensibles a los espacios en blanco.
Y luego reinicie el demonio de Elasticsearch.
sudo systemctl restart elasticsearch.service
Una vez más, asegúrese de que el demonio se esté ejecutando correctamente.
systemctl status elasticsearch.service
Estado del servicio de Elasticsearch
Instalación de Logstash
Podemos instalar Logstash, el componente de transformación y envío de registros de la pila ELK, de forma muy similar a Elasticsearch.
Si ha estado siguiendo este tutorial, ya habrá agregado la clave de firma del paquete Elastic.co. Por lo tanto, podemos omitir esa parte e inmediatamente agregar el repositorio logstash de Elastic.co a nuestro /etc/apt/sources.list.d/
.
echo "deb http://packages.elastic.co/logstash/2.0/debian stable main" | sudo tee -a /etc/apt/sources.list
Y, por supuesto, actualice las listas de paquetes.
sudo apt-get update
A continuación, podemos instalar Logstash.
sudo apt-get install logstash
Al igual que con Elasticsearch, necesitaremos habilitar Logstash al iniciar el sistema.
sudo systemctl daemon-reload sudo systemctl enable logstash.service
Ahora podemos iniciar Logstash.
sudo systemctl start logstash.service
Y asegúrese de que se está ejecutando.
systemctl status logstash.service
¡Ahora podemos pasar a configurarlo!
Configuración de Logstash
Logstash usa archivos de configuración ubicados en /etc/logstash/conf.d
. Tendremos que crear tres nuevos archivos en ese directorio ya que no hay una configuración predeterminada.
cd /etc/logstash/conf.d sudo touch 01-input.conf 10-syslog.conf 30-lumberjack-output.conf
Usaremos el primer archivo, 01-input.conf
, para especificar cómo escuchará Lumberjack los registros entrantes.
Abra el archivo para editarlo (sustituyendo el editor de texto que prefiera, si tiene alguna preferencia).
sudo editor 01-input.conf
Agrega el siguiente bloque:
input { lumberjack { port => 5000 type => "logs" ssl_certificate => "/etc/ssl/certs/logstash-forwarder.crt" ssl_key => "/etc/ssl/logstash-forwarder.key" } }
Guarde y cierre el archivo.
No se preocupe por los certificados SSL todavía. Los generaremos en breve.
A continuación, debemos agregar una configuración de filtro a 10-syslog.conf
. Un filtro puede coincidir con los mensajes entrantes (registros) y aplicar transformaciones a los datos antes de indexarlos en Elasticsearch.
Abra el archivo en su editor,
sudo editor 10-syslog.conf
y agrega lo siguiente:
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}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
Este filtro intercepta cualquier registro entrante que coincida con el formato estándar de syslog y luego agrega una marca de tiempo y un campo de nombre de host a cada mensaje. También extrae cierta información del mensaje de registro, como el PID de syslog, qué programa generó el mensaje y el mensaje de syslog en sí.
Será necesario escribir un nuevo filtro para cada nuevo tipo de registro que desee utilizar con Logstash/Elasticsearch.
Finalmente, podemos ir a nuestro archivo de configuración de salida, 30-lumberjack-output.conf
. Este archivo contendrá un bloque de salida simple que especifica que los mensajes indexados deben enviarse a Elasticsearch y el nombre del clúster.
Abre el archivo en tu editor.
sudo editor 30-lumberjack-output.conf
Agrega el siguiente bloque:
output { elasticsearch { hosts => ["localhost"] } }
Ahora comenzaremos a generar los certificados SSL para su pila ELK.
Generar certificados SSL
El protocolo Lumberjack que utiliza Logstash para comunicar los mensajes de registro está diseñado para ser seguro de extremo a extremo, y SSL es un requisito estricto. Sin embargo, no se preocupe, es bastante simple generar los certificados.
Porque estamos usando una dirección IP en lugar de un nombre de host para los servers
directiva en /etc/logstash-forwarder.conf
, necesitaremos agregar un campo IP SAN al certificado SSL generado. Incluya uno agregando un subjectAltName
línea al archivo de configuración de OpenSSL, /etc/ssl/openssl.cnf
.
sudo editor /etc/ssl/openssl.cnf
Localice la línea que contiene [ v3_ca ]
e inserte la siguiente línea debajo. (Reemplace el 127.0.0.1
con la dirección IP de su servidor Logstash, si Logstash está instalado en un servidor separado).
[ v3_ca ] subjectAltName = IP:127.0.0.1
Guarde y cierre el archivo. Ahora podemos generar el certificado SSL.
sudo openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout /etc/ssl/logstash-forwarder.key -out /etc/ssl/certs/logstash-forwarder.crt sudo chown logstash:logstash /etc/ssl/logstash-forwarder.key sudo chmod 600 /etc/ssl/logstash-forwarder.key
Ahora, reinicie logstash y compruebe si se ha iniciado correctamente.
sudo systemctl restart logstash.service systemctl status logstash.service
Estado del servicio Logstash
Incluso si se ha iniciado, verifique los archivos de registro en /var/log/logstash/logstash.*
y asegúrese de que no haya errores durante el inicio.
Instalación de Logstash-Forwarder
Ahora que hemos instalado el componente del lado del servidor de Logstash, necesitamos instalar el cliente Logstash-Forwarder en cada servidor cuyos registros desee monitorear.
En este tutorial, instalaremos Logstash-Forwarder en el mismo servidor que ejecuta el resto de ELK, pero normalmente Logstash-Forwarder se ejecutaría en otros servidores.
Primero, nuevamente necesitaremos agregar un nuevo repositorio al sistema.
echo "deb http://packages.elasticsearch.org/logstashforwarder/debian stable main" | sudo tee -a /etc/apt/sources.list.d/logstash-forwarder.list
Y, de nuevo, actualice las listas de paquetes.
sudo apt-get update
Ahora, podemos instalar Logstash-Forwarder.
sudo apt-get install logstash-forwarder
Una vez completada la instalación, abra el archivo de configuración de Logstash-Forwarder.
sudo editor /etc/logstash-forwarder.conf
Borre la configuración predeterminada existente y agregue el siguiente bloque:
{ "network": { "servers": [ "127.0.0.1:5000" ], "timeout": 15, "ssl ca": "/etc/ssl/certs/logstash-forwarder.crt" }, "files": [ { "paths": [ "/var/log/syslog", "/var/log/auth.log" ], "fields": { "type": "syslog" } } ] }
Esta configuración verificará /var/log/syslog
y /var/log/auth.log
para nuevas entradas y luego etiquetará cada mensaje saliente de esos archivos con syslog
en el type
campo.
Si está instalando Logstash-Forwarder en un host separado, asegúrese de cambiar los servers
directiva para incluir la dirección IP del servidor remoto. Además, asegúrese de copiar el archivo del certificado SSL en la ubicación correcta del servidor remoto.
Ahora, habilitaremos Logstash-Forwarder en el arranque.
sudo systemctl daemon-reload sudo systemctl enable logstash-forwarder.service
Finalmente, podemos reiniciar el servicio Logstash-Forwarder para aplicar los cambios de configuración.
sudo systemctl restart logstash-forwarder.service
Si el demonio comienza bien, podemos avanzar para configurar Kibana y poner en funcionamiento la pila completa de ELK.
systemctl status logstash-forwarder.service
Estado del servicio del reenviador Logstash
Para verificar si logstash-forwarder está funcionando, observe el archivo de registro de los eventos que se están procesando.
tail -f /var/log/logstash-forwarder/*
Archivos de registro de Logstash-Forwarder
Instalando Kibana
Desafortunadamente, al momento de escribir este artículo, elastic.co no ofrece ninguna versión empaquetada de Kibana, lo que deja la administración de daemon al usuario. Tendremos que crear un archivo de servicio systemd e instalar Kibana manualmente.
Navegue hasta /opt
directorio y descarga Kibana.
cd /opt wget -qO - https://download.elastic.co/kibana/kibana/kibana-4.3.0-linux-x64.tar.gz | sudo tar -xzf -
Tendremos que crear un nuevo usuario para que Kibana se ejecute y establecer la propiedad del directorio del programa.
sudo useradd kibana sudo chown kibana:kibana kibana-4.3.0-linux-x64/ -R
Siguiendo este paso, podemos crear el archivo de servicio systemd.
sudo touch /usr/lib/systemd/system/kibana.service
Agregue la definición de servicio al archivo.
sudo editor /usr/lib/systemd/system/kibana.service [Unit] Description=kibana Documentation=http://www.elastic.co Wants=network-online.target After=network-online.target [Service] User=kibana Group=kibana ExecStart=/opt/kibana-4.3.0-linux-x64/bin/kibana Restart=always StandardOutput=null # Connects standard error to journal StandardError=journal [Install] WantedBy=multi-user.target
Ahora necesitamos recargar todas las unidades systemd y luego habilitar el servicio Kibana.
sudo systemctl daemon-reload sudo systemctl enable kibana.service
Ahora, podemos iniciar Kibana.
sudo systemctl start kibana.service
Verifique dos veces para asegurarse de que se está ejecutando, ¡y estamos listos!
systemctl status kibana.service
Estado del servicio de Kibana
Configuración Kibana
El archivo de configuración principal de Kibana se ubicará en /opt/kibana-4.3.0-linux-x64/config/kibana.yml
. Las opciones predeterminadas deberían ser suficientes para este procedimiento, pero puede cambiar la configuración según sea necesario para su configuración.
Navegue a la dirección IP de su servidor en un navegador web, en el puerto 5601, para acceder a la página de inicialización de Kibana. Kibana le pedirá que configure un patrón de índice; seleccione received_at
para el nombre del campo de tiempo y presione Create
.
Crear un patrón de índice en Kibana
¡Eso es todo! Los componentes de su pila ELK (Elasticsearch, Logstash y Kibana) están instalados y operativos.
Adónde ir después
Gracias por seguir este tutorial sobre la instalación de la pila ELK en Debian 8. Vuelva a consultarnos para obtener artículos relacionados y para probar uno de nuestros servidores VPS ultrarrápidos.