Pila elástica ampliamente conocida como pila de ELKes un grupo de productos de código abierto como Elasticsearch, Logstash y kibana. Elastic Stack es desarrollado y mantenido por la empresa Elastic. Usando la pila elástica, uno puede alimentar los registros del sistema a Logstash, es un motor de recopilación de datos que acepta los registros o datos de todas las fuentes y normaliza los registros y luego los reenvía a Elasticsearch para analizando, indexación, buscando y almacenar y finalmente usando Kibana uno puede representar los datos visualizados, usando Kibana también podemos crear diagramas y gráficos interactivos basados en las consultas del usuario.
En este artículo, demostraremos cómo configurar un clúster de pila elástica de múltiples nodos (ELK Stack) en servidores RHEL 8 / CentOS 8. Los siguientes son detalles para mi clúster de Elastic Stack:
Búsqueda elástica:
- Tres servidores con mínimo RHEL 8/CentOS 8
- IP y nombre de host: 192.168.56.40 (elasticsearch1.linuxtechi. local), 192.168.56.50 (elasticsearch2.linuxtechi. local), 192.168.56.60 (elasticsearch3.linuxtechi. local)
Logstash:
- Dos servidores con mínimo RHEL 8 / CentOS 8
- IP y nombre de host: 192.168.56.20 (logstash1.linuxtechi. local), 192.168.56.30 (logstash2.linuxtechi. local)
Kibana:
- Un servidor con mínimo RHEL 8 / CentOS 8
- Nombre de host – kibana.linuxtechi.local
- IP – 192.168.56.10
Latido de archivo:
- Un servidor con CentOS 7 mínimo
- IP y nombre de host: 192.168.56.70 (servidor web)
Comencemos con la configuración del clúster de Elasticsearch,
Configurar un clúster de Elasticsearch de 3 nodos
Como ya dije, mantuve nodos para el clúster de Elasticsearch, inicie sesión en cada nodo, establezca el nombre de host y configure los repositorios yum/dnf.
Use el siguiente comando hostnamectl para establecer el nombre de host en los nodos respectivos,
[[email protected] ~]# hostnamectl set-hostname "elasticsearch1.linuxtechi. local" [[email protected] ~]# exec bash [[email protected] ~]# [[email protected] ~]# hostnamectl set-hostname "elasticsearch2.linuxtechi. local" [[email protected] ~]# exec bash [[email protected] ~]# [[email protected] ~]# hostnamectl set-hostname "elasticsearch3.linuxtechi. local" [[email protected] ~]# exec bash [[email protected] ~]#
Para el sistema CentOS 8, no necesitamos configurar ningún repositorio de paquetes del sistema operativo y para el servidor RHEL 8, si tiene una suscripción válida y luego la suscribió con Red Hat para obtener el repositorio de paquetes. En caso de que desee configurar el repositorio local yum/dnf para los paquetes del sistema operativo, consulte la siguiente URL:
Cómo configurar el repositorio local de Yum/DNF en el servidor RHEL 8 mediante DVD o archivo ISO
Configure el repositorio de paquetes de Elasticsearch en todos los nodos, cree un archivo elastic.repo en la carpeta /etc/yum.repos.d/ con el siguiente contenido
~]# vi /etc/yum.repos.d/elastic.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
guardar y salir del archivo
Use el siguiente comando rpm en los tres nodos para importar la clave de firma pública de Elastic
~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Agregue las siguientes líneas en el archivo /etc/hosts en los tres nodos,
192.168.56.40 elasticsearch1.linuxtechi.local 192.168.56.50 elasticsearch2.linuxtechi.local 192.168.56.60 elasticsearch3.linuxtechi.local
Instale Java en los tres nodos usando el comando yum / dnf,
[[email protected] ~]# dnf install java-openjdk -y [[email protected] ~]# dnf install java-openjdk -y [[email protected] ~]# dnf install java-openjdk -y
Instale Elasticsearch usando el comando debajo de dnf en los tres nodos,
[[email protected] ~]# dnf install elasticsearch -y [[email protected] ~]# dnf install elasticsearch -y [[email protected] ~]# dnf install elasticsearch -y
Nota: En caso de que el firewall del sistema operativo esté habilitado y ejecutándose en cada nodo de Elasticsearch, permita los siguientes puertos usando el comando firewall-cmd,
~]# firewall-cmd --permanent --add-port=9300/tcp ~]# firewall-cmd --permanent --add-port=9200/tcp ~]# firewall-cmd --reload
Configure Elasticsearch, edite el archivo “/etc/elasticsearch/elasticsearch.yml” en los tres nodos y agregue lo siguiente,
~]# vim /etc/elasticsearch/elasticsearch.yml ………………………………………… cluster.name: opn-cluster node.name: elasticsearch1.linuxtechi.local network.host: 192.168.56.40 http.port: 9200 discovery.seed_hosts: ["elasticsearch1.linuxtechi.local", "elasticsearch2.linuxtechi.local", "elasticsearch3.linuxtechi.local"] cluster.initial_master_nodes: ["elasticsearch1.linuxtechi.local", "elasticsearch2.linuxtechi.local", "elasticsearch3.linuxtechi.local"] ……………………………………………
Nota: en cada nodo, agregue el nombre de host correcto en el parámetro node.name y la dirección IP en el parámetro network.host y otros parámetros seguirán siendo los mismos.
Ahora inicie y habilite el servicio Elasticsearch en los tres nodos usando el siguiente comando systemctl,
~]# systemctl daemon-reload ~]# systemctl enable elasticsearch.service ~]# systemctl start elasticsearch.service
Use el siguiente comando ‘ss’ para verificar si el nodo elasticsearch comienza a escuchar en el puerto 9200,
[[email protected] ~]# ss -tunlp | grep 9200 tcp LISTEN 0 128 [::ffff:192.168.56.40]:9200 *:* users:(("java",pid=2734,fd=256)) [[email protected] ~]#
Use los siguientes comandos curl para verificar el estado del clúster de Elasticsearch
[[email protected] ~]# curl http://elasticsearch1.linuxtechi.local:9200 [[email protected] ~]# curl -X GET http://elasticsearch2.linuxtechi.local:9200/_cluster/health?pretty
La salida del comando anterior sería algo así como a continuación,
El resultado anterior confirma que hemos creado con éxito un clúster de Elasticsearch de 3 nodos y que el estado del clúster también es verde.
Nota: Si desea modificar el tamaño del montón de JVM, entonces tiene que editar el archivo «/etc/elasticsearch/jvm.opciones” y cambie los siguientes parámetros que se adapten a su entorno,
Ahora pasemos a los nodos de Logstash,
Instalar y configurar Logstash
Realice los siguientes pasos en ambos nodos de Logstash,
Inicie sesión en ambos nodos y configure el nombre de host usando el siguiente comando hostnamectl,
[[email protected] ~]# hostnamectl set-hostname "logstash1.linuxtechi.local" [[email protected] ~]# exec bash [[email protected] ~]# [[email protected] ~]# hostnamectl set-hostname "logstash2.linuxtechi.local" [[email protected] ~]# exec bash [[email protected] ~]#
Agregue las siguientes entradas en el archivo /etc/hosts en ambos nodos logstash
~]# vi /etc/hosts 192.168.56.40 elasticsearch1.linuxtechi.local 192.168.56.50 elasticsearch2.linuxtechi.local 192.168.56.60 elasticsearch3.linuxtechi.local
Guardar y salir del archivo
Configure el repositorio de Logstash en ambos nodos, cree un archivo logstash.repo en la carpeta /ete/yum.repos.d/ con el siguiente contenido,
~]# vi /etc/yum.repos.d/logstash.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
Guarde y salga del archivo, ejecute el siguiente comando rpm para importar la clave de firma
~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Instale Java OpenJDK en ambos nodos usando el siguiente comando dnf,
~]# dnf install java-openjdk -y
Ejecute el siguiente comando dnf desde ambos nodos para instalar logstash,
[[email protected] ~]# dnf install logstash -y [[email protected] ~]# dnf install logstash -y
Ahora configure logstash, realice los pasos a continuación en ambos nodos de logstash,
Cree un archivo logstash conf, para eso primero copiamos el archivo logstash de muestra en ‘/etc/logstash/conf.d/’
# cd /etc/logstash/ # cp logstash-sample.conf conf.d/logstash.conf
Edite el archivo conf y actualice el siguiente contenido,
# vi conf.d/logstash.conf input { beats { port => 5044 } } output { elasticsearch { hosts => ["http://elasticsearch1.linuxtechi.local:9200", "http://elasticsearch2.linuxtechi.local:9200", "http://elasticsearch3.linuxtechi.local:9200"] index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } }
En la sección de salida, en el parámetro hosts, especifique el FQDN de los tres nodos de Elasticsearch, los demás parámetros se dejan como están.
Permita el puerto logstash «5044» en el firewall del sistema operativo usando el siguiente comando firewall-cmd,
~ # firewall-cmd --permanent --add-port=5044/tcp ~ # firewall-cmd –reload
Ahora inicie y habilite el servicio Logstash, ejecute los siguientes comandos systemctl en ambos nodos
~]# systemctl start logstash ~]# systemctl eanble logstash
Use el siguiente comando ss para verificar si el servicio logstash comienza a escuchar en 5044,
[[email protected] ~]# ss -tunlp | grep 5044 tcp LISTEN 0 128 *:5044 *:* users:(("java",pid=2416,fd=96)) [[email protected] ~]#
El resultado anterior confirma que logstash se instaló y configuró correctamente. Pasemos a la instalación de Kibana.
Instalar y configurar Kibana
Inicie sesión en el nodo Kibana, establezca el nombre de host con hostnamectl mando,
[[email protected] ~]# hostnamectl set-hostname "kibana.linuxtechi.local" [[email protected] ~]# exec bash [[email protected] ~]#
Edite el archivo /etc/hosts y agregue las siguientes líneas
192.168.56.40 elasticsearch1.linuxtechi.local 192.168.56.50 elasticsearch2.linuxtechi.local 192.168.56.60 elasticsearch3.linuxtechi.local
Configure el repositorio de Kibana usando lo siguiente,
[[email protected] ~]# vi /etc/yum.repos.d/kibana.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md [[email protected] ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Ejecute el siguiente comando dnf para instalar kibana,
[[email protected] ~]# yum install kibana -y
Configure Kibana editando el archivo “/etc/kibana/kibana.yml”
[[email protected] ~]# vim /etc/kibana/kibana.yml ………… server.host: "kibana.linuxtechi.local" server.name: "kibana.linuxtechi.local" elasticsearch.hosts: ["http://elasticsearch1.linuxtechi.local:9200", "http://elasticsearch2.linuxtechi.local:9200", "http://elasticsearch3.linuxtechi.local:9200"] …………
Iniciar y habilitar el servicio kibana
[[email protected] ~]# systemctl start kibana [[email protected] ~]# systemctl enable kibana
Permitir el puerto Kibana ‘5601’ en el firewall del sistema operativo,
[[email protected] ~]# firewall-cmd --permanent --add-port=5601/tcp success [[email protected] ~]# firewall-cmd --reload success [[email protected] ~]#
Acceda al portal/GUI de Kibana usando la siguiente URL:
http://kibana.linuxtechi.local:5601
Desde el panel, también podemos verificar el estado de nuestro clúster de Elastic Stack
Esto confirma que hemos configurado correctamente el clúster de Elastic Stack de varios nodos en RHEL 8/CentOS 8.
Ahora enviemos algunos registros a los nodos logstash a través de filebeat desde otros servidores Linux. En mi caso, tengo un servidor CentOS 7, enviaré todos los registros importantes de este servidor a logstash a través de filebeat.
Inicie sesión en el servidor CentOS 7 e instale el paquete filebeat usando el siguiente comando rpm,
[[email protected] ~]# rpm -ivh https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm Retrieving https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:filebeat-7.3.1-1 ################################# [100%] [[email protected] ~]#
Edite el archivo /etc/hosts y agregue las siguientes entradas,
192.168.56.20 logstash1.linuxtechi.local 192.168.56.30 logstash2.linuxtechi.local
Ahora configure el filebeat para que pueda enviar registros a los nodos logstash utilizando la técnica de balanceo de carga, edite el archivo «/etc/filebeat/filebeat.yml” y agregue los siguientes parámetros,
Bajo la ‘filebeat.entradas:‘cambio de sección’habilitado: falso‘ a ‘habilitado: verdadero‘ y bajo el «caminosEl parámetro «especifica los archivos de registro de ubicación que podemos enviar a logstash. En la sección de salida de Elasticsearch, comenta»salida.elasticsearch» y anfitrión parámetro. En la sección de salida de Logstash, elimine los comentarios de «salida.logstash:» y «Hospedadores:” y agregue los dos nodos logstash en los parámetros de los hosts y también “equilibrio de carga: verdadero”.
[[email protected] ~]# vi /etc/filebeat/filebeat.yml ………………………. filebeat.inputs: - type: log enabled: true paths: - /var/log/messages - /var/log/dmesg - /var/log/maillog - /var/log/boot.log #output.elasticsearch: # hosts: ["localhost:9200"] output.logstash: hosts: ["logstash1.linuxtechi.local:5044", "logstash2.linuxtechi.local:5044"] loadbalance: true ………………………………………
Inicie y habilite el servicio filebeat usando debajo de los comandos systemctl,
[[email protected] ~]# systemctl start filebeat [[email protected] ~]# systemctl enable filebeat
Ahora vaya a Kibana GUI, verifique si los nuevos índices son visibles o no,
Elija la opción Gestión en la barra lateral izquierda y luego haga clic en Gestión de índices en Elasticsearch,
Como podemos ver arriba, los índices son visibles ahora, creemos un patrón de índice,
Haga clic en «Patrones de índice» de la sección Kibana, nos pedirá que creemos un nuevo patrón, haga clic en «Crear patrón de índice” y especifique el nombre del patrón como “latido de archivo”
Haga clic en Siguiente paso
Escoger «marca de tiempo” como filtro de tiempo para el patrón de índice y luego haga clic en “Crear patrón de índice”
Ahora haga clic en Descubrir para ver el patrón de índice de filebeat en tiempo real,
Esto confirma que el agente de Filebeat se configuró correctamente y podemos ver los registros en tiempo real en el panel de control de Kibana.
Eso es todo de este artículo, no dude en compartir sus opiniones y comentarios en caso de que estos pasos lo ayuden a configurar el Elastic Stack Cluster de varios nodos en el sistema RHEL 8/CentOS 8.