Despliegue de Arquitectura ELK en CentOS 7: Integración con Kafka, Filebeat y Logstash

Planificación de la Arquitectura del Clúster

Para sistemas de recolección de logs de escala media, una topología básica compuesta por Filebeat, Elasticsearch y Kibana suele ser suficiente. Sin embargo, para entornos de alta concurrencia y procesamiento complejo, se recomienda integrar Kafka como búfer de mensajes y Logstash para la transformación de datos. A continuación, se detalla la distribución de servicios en un clúster de tres nodos:

  • elastic-node-01 (10.0.1.11): Elasticsearch (Master/Data), Kibana, Zookeeper, Kafka.
  • elastic-node-02 (10.0.1.12): Elasticsearch (Data), Logstash, Zookeeper, Kafka.
  • elastic-node-03 (10.0.1.13): Elasticsearch (Data), Zookeeper, Kafka.

Nota: La configuración detallada del clúster de Kafka y Zookeeper se omite en esta guía para centrarse estrictamente en la pila ELK.

Optimización del Sistema Operativo

Antes de instalar cualquier componente, es crucial ajustar los parámetros del kernel y los límites de recursos en todos los nodos para garantizar un rendimiento óptimo de la JVM y el motor de búsqueda Lucene.

Ajuste de Parámetros del Kernel

Reduzca el uso de la memoria de intercambio (swap) y aumente el límite de mapas de memoria virtual:

echo "vm.swappiness=1" | tee -a /etc/sysctl.conf
echo "vm.max_map_count=262144" | tee -a /etc/sysctl.conf
sysctl --system

Configuración de Límites de Recursos (ulimit)

Modifique el archivo de límites de seguridad para permitir un mayor número de descriptores de archivo, procesos y bloqueo de memoria:

echo "elastic_user soft nofile 655360" | tee -a /etc/security/limits.conf
echo "elastic_user hard nofile 655360" | tee -a /etc/security/limits.conf
echo "elastic_user soft nproc 4096" | tee -a /etc/security/limits.conf
echo "elastic_user hard nproc 4096" | tee -a /etc/security/limits.conf
echo "elastic_user soft memlock unlimited" | tee -a /etc/security/limits.conf
echo "elastic_user hard memlock unlimited" | tee -a /etc/security/limits.conf

Para aplicar los cambios en la sesión actual sin reiniciar el servidor:

ulimit -n 655360
ulimit -u 4096

Instalación de los Componentes

Descargue e instale los paquetes RPM correspondientes en cada servidor. Asegúrese de descargar los binarios directamente desde los repositorios oficiales.

Elasticsearch (En los 3 nodos)

cd /opt/installers
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-x86_64.rpm
sudo rpm --install elasticsearch-7.10.2-x86_64.rpm

Kibana (Solo en elastic-node-01)

curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-x86_64.rpm
sudo rpm --install kibana-7.10.2-x86_64.rpm

Logstash (Solo en elastic-node-02)

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-x86_64.rpm
sudo rpm --install logstash-7.10.2-x86_64.rpm

Filebeat (En los servidores de origen de logs)

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-x86_64.rpm
sudo rpm --install filebeat-7.10.2-x86_64.rpm

Configuración de Seguridad y Certificados TLS

Para habilitar la autenticación X-Pack y el cifrado de red entre nodos, genere una Autoridad Certificadora (CA) y los certificados de nodo. Ejecute estos comandos en el primer nodo:

/usr/share/elasticsearch/bin/elasticsearch-certutil ca --out /tmp/elastic-stack-ca.p12 --pass ""
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca /tmp/elastic-stack-ca.p12 --ca-pass "" --out /tmp/elastic-certificates.p12 --pass ""

Distribuya el archivo elastic-certificates.p12 al directorio /etc/elasticsearch/ de todos los nodos y asigne los permisos adecuados:

chown root:elasticsearch /etc/elasticsearch/elastic-certificates.p12
chmod 660 /etc/elasticsearch/elastic-certificates.p12

Configuración del Clúster Elasticsearch

Edite el archivo /etc/elasticsearch/elasticsearch.yml en cada nodo. A continuación, se muestran las configuraciones adaptadas para una arquitectura con nodos de datos calientes (hot) y fríos (cold).

Configuración para elastic-node-01 (Nodo Master/Hot)

cluster.name: prod-logging-cluster
node.name: elastic-node-01
node.attr.data_type: hot
node.roles: [ master, data ]

path.data: /opt/elastic/data
path.logs: /var/log/elasticsearch

network.host: 10.0.1.11
http.port: 9200
transport.port: 9300

discovery.seed_hosts: ["10.0.1.11:9300", "10.0.1.12:9300", "10.0.1.13:9300"]
cluster.initial_master_nodes: ["elastic-node-01"]

bootstrap.memory_lock: true

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

Configuración para elastic-node-02 (Nodo Data/Cold)

cluster.name: prod-logging-cluster
node.name: elastic-node-02
node.attr.data_type: cold
node.roles: [ data ]

path.data: /opt/elastic/data
path.logs: /var/log/elasticsearch

network.host: 10.0.1.12
http.port: 9200
transport.port: 9300

discovery.seed_hosts: ["10.0.1.11:9300", "10.0.1.12:9300", "10.0.1.13:9300"]
cluster.initial_master_nodes: ["elastic-node-01"]

bootstrap.memory_lock: true

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

Configuración para elastic-node-03 (Nodo Data/Cold)

cluster.name: prod-logging-cluster
node.name: elastic-node-03
node.attr.data_type: cold
node.roles: [ data ]

path.data: /opt/elastic/data
path.logs: /var/log/elasticsearch

network.host: 10.0.1.13
http.port: 9200
transport.port: 9300

discovery.seed_hosts: ["10.0.1.11:9300", "10.0.1.12:9300", "10.0.1.13:9300"]
cluster.initial_master_nodes: ["elastic-node-01"]

bootstrap.memory_lock: true

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

Ajustes de Systemd para Bloqueo de Memoria

Dado que hemos habilitado bootstrap.memory_lock: true, es obligatorio modificar el servicio de systemd para permitir el bloqueo de memoria ilimitado. La mejor práctica es crear un archivo de anulación (override) en lugar de editar el archivo original del paquete:

systemctl edit elasticsearch

Agregue la siguiente configuración en el editor que se abra:

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=655360
LimitNPROC=4096

Recargue el demonio de systemd para aplicar los cambios:

systemctl daemon-reload

Inicio del Clúster y Gestión de Credenciales

Inicie el servicio de Elasticsearch en todos los nodos y habilítelo para que arranque automáticamente con el sistema:

systemctl enable --now elasticsearch.service

Una vez que los nodos se hayan descubierto y formado el clúster, genere las contraseñas para los usuarios internos reservados:

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto -u "http://10.0.1.11:9200"

Nota: Use el parámetro interactive en lugar de auto si prefiere definir contraseñas personalizadas manualmente para cada usuario del sistema.

Verificación del Estado del Clúster

Consulte la API de salud del clúster para asegurarse de que todos los nodos están operativos y el estado es verde (green):

curl -s -u elastic:YourGeneratedPassword http://10.0.1.11:9200/_cluster/health?pretty

La respuesta JSON debe mostrar "status" : "green" y "number_of_nodes" : 3, confirmando que la replicación y los shards están correctamente asignados.

Despliegue y Configuración de Kibana

Edite el archivo de configuración de Kibana (/etc/kibana/kibana.yml) para conectarlo al clúster seguro. En versiones 7.8 y superiores, el usuario interno para Kibana es kibana_system:

server.port: 5601
server.host: "10.0.1.11"
server.name: "kibana-prod"

elasticsearch.hosts: ["http://10.0.1.11:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "KibanaGeneratedPassword"

i18n.locale: "es"

Inicie y habilite el servicio de Kibana:

systemctl enable --now kibana.service

Acceda a la interfaz web a través de http://10.0.1.11:5601 e inicie sesión utilizando las credenciales del superusuario elastic para validar la integración completa de la plataforma y comenzar a crear los índices y dashboards.

Etiquetas: Elasticsearch Kibana Logstash Filebeat centos

Publicado el 7-27 08:54