Cómo instalar Elasticsearch, Logstash y Kibana (ELK Stack) en CentOS / RHEL 7


Si usted es una persona que está, o ha estado en el pasado, a cargo de inspeccionar y analizar los registros del sistema en Linux, sabe en qué pesadilla se puede convertir esa tarea si se monitorean múltiples servicios simultáneamente.

En los días pasados, esa tarea tenía que realizarse mayormente de forma manual, y cada tipo de registro se manejaba por separado. Afortunadamente, la combinación de Elasticsearch , Logstash y Kibana en el lado del servidor, junto con Filebeat en el cliente De lado, hace que una tarea difícil se vea como un paseo por el parque hoy.

Los primeros tres componentes forman lo que se llama una pila ELK , cuyo propósito principal es recopilar registros de varios servidores al mismo tiempo (también conocido como registro centralizado).

Una interfaz web basada en Java incorporada le permite inspeccionar los registros rápidamente de un vistazo para facilitar la comparación y la resolución de problemas. Estos registros de clientes se envían a un servidor central mediante Filebeat , que se puede describir como un agente de envío de registros.

Veamos cómo encajan todas estas piezas. Nuestro entorno de prueba constará de las siguientes máquinas:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Tenga en cuenta que los valores RAM que se proporcionan aquí no son requisitos previos estrictos, sino valores recomendados para una implementación exitosa de la pila ELK en el servidor central. Una menor cantidad de RAM en los clientes no supondrá una gran diferencia, si la hubiera, en absoluto.

Instalación de la pila ELK en el servidor

Comencemos instalando la pila ELK en el servidor, junto con una breve explicación de lo que hace cada componente:

  1. Elasticsearch stores the logs that are sent by the clients.
  2. Logstash processes those logs.
  3. Kibana provides the web interface that will help us to inspect and analyze the logs.

Instale los siguientes paquetes en el servidor central. En primer lugar, instalaremos Java JDK versión 8 (actualización 102 , la última en el momento de escribir este documento), que es una dependencia de los componentes ELK .

Es posible que desee consultar primero en la página de descargas de Java aquí para ver si hay una actualización más reciente disponible.

# yum update
# cd /opt
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
# rpm -Uvh jre-8u102-linux-x64.rpm

Hora de verificar si la instalación se completó con éxito:

# java -version

Para instalar las últimas versiones de Elasticsearch , Logstash y Kibana , tendremos que crear repositorios para yum manualmente. como sigue:

1. Importe la clave GPG pública de Elasticsearch al administrador de paquetes rpm:

# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Inserte las siguientes líneas en el archivo de configuración del repositorio elasticsearch.repo :

Repositorio> /etc/yum.repos.d/elasticsearch.repo

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Instala el paquete Elasticsearch.

# yum install elasticsearch

Cuando se complete la instalación, se le solicitará que inicie y habilite elasticsearch:

4. Inicia y habilita el servicio.

# systemctl daemon-reload
# systemctl enable elasticsearch
# systemctl start elasticsearch

5. Permita el tráfico a través del puerto TCP 9200 en su servidor de seguridad:

# firewall-cmd --add-port=9200/tcp
# firewall-cmd --add-port=9200/tcp --permanent

6. Comprueba si Elasticsearch responde a solicitudes simples a través de HTTP :

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

La salida del comando anterior debe ser similar a:

Asegúrese de completar los pasos anteriores y luego continúe con Logstash . Dado que tanto Logstash como Kibana comparten la clave Elasticsearch GPG , no es necesario volver a importarla antes de instalar los paquetes.

7. Inserte las siguientes líneas en el archivo de configuración del repositorio logstash.repo :

Repositorio> /etc/yum.repos.d/logstash.repo

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Instala el paquete Logstash :

# yum install logstash

9. Agregue un certificado SSL basado en la dirección IP del servidor ELK en la siguiente línea debajo de la sección [v3_ca] en /etc/pki/tls/openssl.cnf :

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Genere un certificado autofirmado válido para los días 365 :

# cd /etc/pki/tls
# openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11. Configure los archivos de entrada, salida y filtro de Logstash :

Entrada : crea /etc/logstash/conf.d/input.conf e inserta las siguientes líneas en ella. Esto es necesario para que Logstash " aprenda " cómo procesar los latidos provenientes de los clientes. Asegúrese de que la ruta al certificado y la clave coincidan con las rutas correctas como se describe en el paso anterior:

Logstash> /etc/logstash/conf.d/input.conf

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Archivo de salida ( /etc/logstash/conf.d/output.conf ):

Logstash> /etc/logstash/conf.d/output.conf

output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

Filtro ( /etc/logstash/conf.d/filter.conf ) archivo. Vamos a registrar los mensajes de syslog por simplicidad:

Logstash> /etc/logstash/conf.d/filter.conf

filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Verifique los archivos de configuración de Logstash .

# service logstash configtest

13. Inicia y habilita logstash:

# systemctl daemon-reload
# systemctl start logstash
# systemctl enable logstash

14. Configure el firewall para permitir que Logstash obtenga los registros de los clientes (puerto TCP 5044 ):

# firewall-cmd --add-port=5044/tcp
# firewall-cmd --add-port=5044/tcp --permanent

14. Inserte las siguientes líneas en el archivo de configuración del repositorio kibana.repo :

Repositorio> /etc/yum.repos.d/kibana.repo

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Instala el paquete Kibana :

# yum install kibana

16. Inicia y activa Kibana.

# systemctl daemon-reload
# systemctl start kibana
# systemctl enable kibana

17. Asegúrate de que puedes acceder a la interfaz web de Kibana desde otra computadora (permite el tráfico en el puerto TCP 5601 ):

# firewall-cmd --add-port=5601/tcp
# firewall-cmd --add-port=5601/tcp --permanent

18. Inicia Kibana ( http://192.168.0.29:5601 ) para verificar que puedes acceder a la interfaz web:

Volveremos aquí después de que hayamos instalado y configurado Filebeat en los clientes.

Instalar Filebeat en los servidores de cliente

Le mostraremos cómo hacer esto para Cliente # 1 (repita para Cliente # 2 más adelante, cambiando las rutas si corresponde a su distribución).

1. Copie el certificado SSL del servidor a los clientes:

# scp /etc/pki/tls/certs/logstash-forwarder.crt [email protected]:/etc/pki/tls/certs/

2. Importe la clave pública GPG Elasticsearch al gestor de paquetes rpm:

# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Cree un repositorio para Filebeat ( /etc/yum.repos.d/filebeat.repo ) en CentOS Distribuciones basadas:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Configure la fuente para instalar Filebeat en Debian y sus derivados:

# aptitude install apt-transport-https
# echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
# aptitude update

5. Instala el paquete Filebeat :

# yum install filebeat        [On CentOS and based Distros]
# aptitude install filebeat   [On Debian and its derivatives]

6. Inicia y habilita Filebeat:

# systemctl start filebeat
# systemctl enable filebeat

Una advertencia aquí. La configuración de Filebeat se almacena en un archivo YAML , que requiere una sangría estricta. Tenga cuidado con esto mientras edita /etc/filebeat/filebeat.yml de la siguiente manera:

  1. Under paths, indicate which log files should be “shipped” to the ELK server.
  2. Under prospectors:
input_type: log
document_type: syslog
  1. Under output:
    1. Uncomment the line that begins with logstash.
    2. Indicate the IP address of your ELK server and port where Logstash is listening in hosts.
    3. Make sure the path to the certificate points to the actual file you created in Step I (Logstash section) above.

    Los pasos anteriores se ilustran en la siguiente imagen:

    Guarde los cambios y luego reinicie Filebeat en los clientes:

    # systemctl restart filebeat
    

    Una vez que hayamos completado los pasos anteriores en los clientes, no dude en continuar.

    Para verificar que los registros de los clientes puedan enviarse y recibirse con éxito, ejecute el siguiente comando en el servidor ELK :

    # curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
    

    La salida debe ser similar a (observe cómo los mensajes de /var/log/messages y /var/log/secure se reciben de client1 y cliente2 ):

    De lo contrario, revise el archivo de configuración Filebeat para ver si hay errores.

    # journalctl -xe
    

    después de intentar reiniciar Filebeat lo señalará a la (s) línea (s) ofensiva (s).

    Después de que hayamos verificado que los clientes envían los registros y los reciben con éxito en el servidor. Lo primero que tendremos que hacer en Kibana es configurar un patrón de índice y establecerlo como predeterminado.

    Puede describir un índice como una base de datos completa en un contexto de base de datos relacional. Iremos con filebeat- * (o puede usar un criterio de búsqueda más preciso como se explica en la documentación oficial).

    Ingrese filebeat- * en el Nombre del índice o campo de patrón y luego haga clic en Crear :

    Tenga en cuenta que más tarde podrá ingresar un criterio de búsqueda más detallado. A continuación, haga clic en la estrella dentro del rectángulo verde para configurarlo como el patrón de índice predeterminado:

    Finalmente, en el menú Descubrir encontrará varios campos para agregar al informe de visualización del registro. Simplemente desplace el cursor sobre ellos y haga clic en Añadir :

    Los resultados se mostrarán en el área central de la pantalla como se muestra arriba. Siéntase libre de jugar (agregar y quitar campos del informe de registro) para familiarizarse con Kibana .

    De forma predeterminada, Kibana mostrará los registros que se procesaron durante los últimos 15 minutos (vea la esquina superior derecha) pero puede cambiar ese comportamiento seleccionando otro marco de tiempo:

    Resumen

    En este artículo, hemos explicado cómo configurar una pila ELK para recopilar los registros del sistema enviados por dos clientes, un CentOS 7 y un Debian 8.

    Ahora puede consultar la documentación oficial de Elasticsearch y encontrar más detalles sobre cómo usar esta configuración para inspeccionar y analizar sus registros de manera más eficiente.

    Si tiene alguna pregunta, no dude en preguntar. Esperamos con interés escuchar de usted.