Búsqueda de sitios web

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 qué pesadilla puede convertirse esa tarea si se monitorean múltiples servicios simultáneamente.

En el pasado, esa tarea tenía que realizarse principalmente 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 lado, hace que esa tarea que alguna vez fue difícil parezca hoy un paseo por el parque.

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

Lectura sugerida: 4 buenas herramientas de administración y monitoreo de registros de código abierto para Linux

Una interfaz web integrada basada en Java le permite inspeccionar 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 puede describirse como un agente de envío de registros.

Veamos cómo encajan todas estas piezas. Nuestro entorno de prueba estará formado por 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 de RAM proporcionados aquí no son requisitos previos estrictos, sino valores recomendados para una implementación exitosa de la pila ELK en el servidor central. Menos RAM en los clientes no hará mucha diferencia, si es que la hay.

Instalación de ELK Stack 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 almacena los registros que envían los clientes.
  2. Logstash procesa esos registros.
  3. Kibana proporciona la interfaz web que nos ayudará a inspeccionar y analizar los registros.

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 artículo), 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

Es hora de comprobar si la instalación se completó correctamente:

java -version

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

Habilitar el repositorio de Elasticsearch

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:

[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. Instale el paquete Elasticsearch.

yum install elasticsearch

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

4. Inicie y habilite 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 firewall:

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

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

curl -X GET http://localhost:9200

El resultado del comando anterior debería 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.

Lectura sugerida: Administrar registros del sistema (configurar, rotar e importar a la base de datos) en CentOS 7

Habilitar el repositorio Logstash

7. Inserte las siguientes líneas en el archivo de configuración del repositorio 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. Instale 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. Generar un certificado autofirmado válido por 365 días:

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: cree /etc/logstash/conf.d/input.conf e inserte las siguientes líneas en él. 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:

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):


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

Filtrar archivo (/etc/logstash/conf.d/filter.conf). Registraremos los mensajes de syslog para simplificar:


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. Inicie y habilite 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

Habilitar el repositorio de Kibana

14. Inserte las siguientes líneas en el archivo de configuración del repositorio 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. Instale el paquete Kibana:

yum install kibana

16. Inicie y habilite Kibana.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Asegúrese de poder acceder a la interfaz web de Kibana desde otra computadora (permita el tráfico en el puerto TCP 5601):

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

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

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

Lectura sugerida: Monitorear los registros del servidor en tiempo real con la herramienta “Log.io” en Linux

Instale Filebeat en los servidores del cliente

Le mostraremos cómo hacer esto para el Cliente #1 (repita para el Cliente #2 después, 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 :/etc/pki/tls/certs/

2. Importe la clave GPG pública de Elasticsearch al administrador 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 el código 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. Instale el paquete Filebeat:

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

6. Inicie y habilite Filebeat:

systemctl start filebeat
systemctl enable filebeat

Configurar filebeat

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

  1. En rutas, indique qué archivos de registro deben "enviarse" al servidor ELK.
  2. Bajo prospectores:
input_type: log
document_type: syslog
  1. En salida:

    1. Descomente la línea que comienza con logstash.
    2. Indique la dirección IP de su servidor ELK y el puerto donde Logstash escucha en hosts.
    3. Asegúrese de que la ruta al certificado apunte al archivo real que creó en el Paso I (sección Logstash) anterior.

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 con los clientes, no dude en continuar.

Probando Filebeat

Para verificar que los registros de los clientes se puedan enviar y recibir correctamente, ejecute el siguiente comando en el servidor ELK:

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

El resultado debe ser similar a (observe cómo los mensajes de /var/log/messages y /var/log/secure se reciben de cliente1 y cliente2):

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

journalctl -xe

después de intentar reiniciar Filebeat le indicará las líneas infractoras.

Prueba de Kibana

Después de haber verificado que los clientes envían los registros y los reciben correctamente 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. Usaremos filebeat-* (o puede usar un criterio de búsqueda más preciso como se explica en la documentación oficial).

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

Tenga en cuenta que se le permitirá ingresar criterios de búsqueda más detallados más adelante. A continuación, haga clic en la estrella dentro del rectángulo verde para configurarlo como patrón de índice predeterminado:

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

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

De forma predeterminada, Kibana mostrará los registros que se procesaron durante los últimos 15 minutos (ver esquina superior derecha), pero puede cambiar ese comportamiento seleccionando otro período 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, una máquina CentOS 7 y una Debian 8.

Ahora puede consultar la documentación oficial de Elasticsearch y encontrar más detalles sobre cómo utilizar 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.