Cómo iniciar sesión y analizar mensajes de MQTT
¿Con el ELK Stack?

Introducción

ElELK Stack(Investigación elástica, Logstash y Kibana) es un poderoso opensource plataforma de gestión de registros y análisis.Elasticsearch, su núcleo componente, soportesreplicación, permitiendo que los datos sean copiados a través de múltiples nodos. Esto garantizaalta disponibilidadmediante la prevención de la pérdida de datos en caso de nodos fracasos.

Replicación en Elasticsearch mejoraQuery performancepor distribución de búsqueda peticiones a través de réplicas. También aumentaescalabilidad, permitiendo sistemas a manejar más consultas eficientemente. Por defecto, Elasticsearch creauno réplica por Shard, pero esto se puede ajustar en función de los requisitos. Estrategias de reproducción adecuadas ayuda enbalanceo de carga, tolerancia a la falla y fiabilidad general del sistema.

Elasticsearch

Elasticsearch es unmotor de búsqueda y análisisdiseñado para manejar grandes volúmenes de datos en tiempo real. Almacena datos en unNoSQLformato utilizando JSON documentos y proporciona rápidabúsqueda de texto completocapacidades. Los datos se indexan usando uníndice indio, permitiendo una recuperación rápida y análisis. Elasticsearch esescalable, soporte horizontal escalada agregando más nodos a un cluster. Ofrecereplicación y persistencia, asegurando datos redundancia y redundanciaAlto. disponibilidad. Común casos de uso incluyenanálisis de registros, monitoreo de seguridad y negocios Inteligencia.

Logstash

Logstash es untramitación de datosque recoge, transforma, y envía datos a varios destinos, incluyendo Elasticsearch. Puede ingerir datos demúltiples fuentescomo registros, métricas, bases de datos y colas de mensajes. Logstash procesa datos usando un poderosofiltrado sistema, permitiendo la transformación, el enriquecimiento y la perspicacia. Soporta varios plugins para manejar diferentes formatos de datos, incluyendo JSON, CSV y syslog. Logstash se utiliza a menudo pararecopilación de registros, transformación de datos, y procesamiento de datos en tiempo realantes del almacenamiento.

Kibana

Kibana es unherramienta de visualización y análisisdiseñado para interactuar con datos almacenados en Elasticsearch. Proporciona un intuitivointerface de panelpara crear visualizaciones como gráficos, gráficos, y mapas. Kibana permite la exploración de datos en tiempo real, por lo que es fácil analizar registros y monitorear rendimiento del sistema. Incluye características comomachine learning, security monitorización y alerta.Los usuarios pueden construir paneles interactivos y establecer alertas para anomalías en los datos. Kibana es ampliamente utilizado paraanálisis de registros, monitoreo de eventos de seguridad y negocios informes de inteligencia.



Antes de comenzar, asegúrese de que tiene:

  • AServidor Linux(Ubuntu 20.04 recomendado)
  • MQTTRouteinstalados y en funcionamiento
  • Java 8 o más tarde(requerido para ELK y Kafka)
  • Búsqueda elástica, Logstash y Kibana (ELK Stack)instalado

Paso 1: Instalar Java 8 para ELK

  • Actualizar la lista de paquetes :sudo apt update
  • Instalar OpenJDK 8 :sudo apt install -y openjdk-8-jdk
  • Verificar la instalación :java -versión
  • A orientación de que la salida muestra java8 instalado.


Si Java está instalado en la máquina, se mostrará la siguiente salida:

Texto copiado

openjdk versión "1.8.0_442"
OpenJDK Runtime Environment (build 1.8.0_442-8u442-b06~us1-0ubuntu1~20.04-b06)
OpenJDK 64-Bit Server VM (construido 25.442-b06, modo mixto)

Paso 2: Instalar y Configurar el ELK Stack

  • Instalar Elasticsearch :

Paquete de sistema de actualización :sudo apt update " sudo apt upgrade - Sí.


Descargar Elasticsearch 8.17.3 :


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.3-amd64.deb


Instalar la búsqueda elástica :sudo dpkg -i elasticsearch-8.17.3-amd64.deb


Configurar la búsqueda elástica : ir al directorio y golpear el comando para administrar el elasticsearch properly -


sudo nano /etc/elasticsearch/elasticsearch.yml


Ajustes de rojo
network.host: 0.0.0.0
http.port: 9200


# Ajustes del grupo
cluster.name: my-cluster
node.name: node-1


# Ajustes de seguridad
xpack.security.enabled: true

Iniciar y Activar la búsqueda elástica :


sudo sistemactl permite la búsqueda elástica


sudo systemctl start elasticsearch

Compruebe el estado para ver si Elasticsearch está funcionando correctamente; el resultado debe aparecer como se muestra a continuación:

  • elasticsearch.service - Elasticsearch

Cargado: cargado (/lib/systemd/system/elasticsearch.service; habilitado; preset del vendedor: habilitado)

Active: active (running) since Tue 2025-03-25 11:59:26 IST; hace 16min

Docs: https://www.elastic.co

PID principal: 1554 (java)

Tareas: 92 (limitación: 18932)

Memoria: 8.5G

CGroup: /system.slice/elasticsearch.service

−1554 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=servidor -Dcli.script=/usr/share/elasticsearch/bin/e confidence

−2134 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+SiemprePreTouc confis

Entendido /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

Mar 25 11:58:11 host systemd[1]: Inicio Elasticsearch...

Mar 25 11:58:47 host systemd-entrypoint[2134]: CompileCommand: dontinline java/lang/invoke/MethodHandle.setAsTypeCache bool dontinline = true

Mar 25 11:58:47 host systemd-entrypoint[2134]: CompileCommand: dontinline java/lang/invoke/MethodHandle.asTypeUncached bool dontinline = true

Mar 25 11:59:26 host systemd[1]: Started Elasticsearch.

líneas 1-16/16 (END)

Generar contraseña para la búsqueda elástica. Por defecto el nombre de usuario y contraseña es necesario para conectar la versión 8.17.3


Utilice el siguiente comando para generar la contraseña de Elasticsearch:


sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elástico


Verificar la instalación:


Después de que la contraseña se genere con éxito, ejecute el siguiente comando para verificarlo:

elasticsearch versión 8.17.3 correctamente instalada .
curl -k http://localhost:9200 -u elástico:su_password


Si la búsqueda elástica ha configurado correctamente los resultados siguientes existe:

{}
"nombre" : "nombre fantasma",
"cluster_name" : "investigación elástica",
"cluster_uuuid" : "KzyHzjcTGei6ikXndcFA",
"versión" : {}
"número" : "8.17.3",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "a091390de485bd4b127884f7e565c0cad59b10d2",
"build_date" : "2025-02-28T10:07:26.089129809Z",
"build_snapshot" : falso,
"lucene_version" : "9.12.0",
"minimum_wire_compatibilidad_version" : "7.17.0",
"minimum_index_compatibilidad_version" : "7.0.0"
}
"tagline" : "Lo sabes, para la búsqueda"
}

Configuración TLS/SSL en búsqueda elástica 8.17.3 :


Elasticsearch 8.17.3 incluye seguridad integrada y requiere TLS/SSL para la comunicación. Siga estos pasos para configurar TLS/SSL tanto para HTTP como para capas de transporte.


  • Generar certificado SSL :

Elasticsearch incluye una herramienta integrada para generar certificados. Utilice el siguiente comando para generar un certificado:


sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --silent --pem --keep-ca-key --out /etc/elasticsearch/certs.zip


Extraer los certificados :


sudo apt install unzip -y
sudo mkdir -p /etc/elasticsearch/certs
sudo unzip /etc/elasticsearch/certs.zip -d /etc/elasticsearch/certs/
sudo chmod -R 750 /etc/elasticsearch/certs
Sudo chown -Búsqueda elástica /etc/elasticsearch/certs


    2. Configurar la búsqueda elástica de TLS/SSL:


Editar el archivo de configuración de elasticsearch usando el siguiente comando:


sudo nano /etc/elasticsearch/elasticsearch.yml


Agregar o actualizar la configuración:

Si las características a continuación no están presentes en elasticsearch.yml, agréguelas. Si ya existen, establecen o permiten que sean verdaderos.


# Capacidad de seguridad
xpack.security.enabled: true
xpack.security.enrollment.enabled: true


# Enable cifrado y autenticación mutua entre los nodos de racimo
xpack.security.transport.ssl:
habilitado: verdadero
verificación_mode: certificado
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12


# Crear un nuevo cluster con el nodo actual
# Nodos adicionales todavía pueden unirse al clúster más tarde
cluster.initial_master_nodes: ["hostname"]


# Permitir conexiones HTTP API desde cualquier lugar
# Las conexiones están encriptadas y requieren autenticación del usuario
http.host: 0.0.0.0


# Permitir a otros nodos unirse al clúster desde cualquier lugar
# Las conexiones se encriptan y se autentican mutuamente
#transport.host: 0.0.0.0


Restart Elasticsearch :

Reinicie la búsqueda elástica para aplicar los cambios :

sudo sistemactl reinicio elasticsearch.service


Después, compruebe si Elasticsearch está funcionando el siguiente comando: :

sudo sistemactl status elasticsearch.service


Verify Elasticsearch TLS/SSL Configuration :

Por defecto nuestro certificado existe en el directorio siguiente

sudo /etc/elasticsearch/certs


establecer el siguiente comando para verificar la instalación TLS/SSL:

curl -k --cacert /etc/elasticsearch/certs/ca.crt -u elastic:password 'https://localhost:9200'


Cuando Elasticsearch está configurado correctamente para TLS/SSL, el resultado aparece como se muestra a continuación:

{}
"nombre" : "nombre fantasma",
"cluster_name" : "investigación elástica",
"cluster_uuuuuuuuuuuuuuuuuuuuuuuuuuid" : "KzyHzjcTGei6ikXndcFA",
"versión"
"número" : "8.17.3",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "a091390de485bd4b127884f7e565c0cad59b10d2",
"build_date" : "2025-02-28T10:07:26.089129809Z",
"build_snapshot" : falso.
"lucene_version" : "9.12.0",
"minimum_wire_compatibilidad_version" : "7.17.0",
"minimum_index_compatibilidad_version" : "7.0.0"
}
"tagline" : "Lo sabes, para la búsqueda"
}

Instalar Logstash :


Descargar Logstash 8.17.3


wget https://artifacts.elastic.co/downloads/logstash/logstash-8.17.3-amd64.deb


Instalar Logstash 8.17.3


sudo dpkg -i logstash-8.17.3-amd64.deb


Verificar la instalación Logstash :


Compruebe si la versión 8.17.3 de Logstash se instala utilizando el comando de abajo. Si la versión se muestra, Significa que Logstash está instalado correctamente en nuestra máquina.

/usr/share/logstash/bin/logstash --versión


El resultado parece:

Utilizando el JDK incluido: /usr/share/logstash/jdk
logstash 8.17.3


Inicio y Activar logstash :

Sudo sistemactl habilitar logstash

Sudo systemctl start logstash


Corre el estado de la instalación de Logstash :

sudo sistemactl status logstash


El producto es el siguiente:

logstash. servicio - logstash
Cargado: cargado (/lib/systemd/system/logstash.service; habilitado; preset de proveedores: habilitado)
Active: active (running) since Tue 2025-03-25 12:55:40 IST; 11s ago
PID principal: 4519 (java)
Tareas: 24 (limit: 18932)
Memoria: 344.9M
CGroup: /system.slice/logstash.service
∙4519 /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.compile.invokedynamic=true -XX:+HeapDumpOnOutOfMemoryError - No.
Mar 25 12:55:40 hostname systemd[1]: Started logstash.
Mar 25 12:55:40 registro de hostname[4519]: Usando JDK agrupado: /usr/share/logstash/jdk
líneas 1-11/11 (END)

Iniciar sesión Registro Iniciar sesión Registro

1. Logstash escribe registros a /var/log/logstash/logstash-plain.log. Ver registros utilizando:

sudo tail -f /var/log/logstash/logstash-plain.log


2. Para comprobar Logstash logs está usando journalctl

sudo journalctl -u logstash -f


Descargar Kibana 8.17.3

Para descargar Kibana 8.17.3, repartir el siguiente comando:

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.17.3-amd64.deb


Instala Kibana 8.17.3 :

sudo dpkg -i kibana-8.17.3-amd64.deb


Configure kibana 8.17.3 :

Siga los pasos siguientes para administrar Kibana
Paso-1:

Abrir el archivo de configuración de kibana :sudo nano /etc/kibana/kibana.yml


Paso-2:
Descomiendo y modificando el siguiente ajuste:

server.port: "5601"
servidor.host: "localhost"
elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "password"
elasticsearch.maxSockets: 1024


Después de modificar la configuración, guardar y salir de la configuración.

Inicio y Activar Kibana:


sudo systemctl enable kibana

Sudo systemctl start kibana


Para comprobar si Kibana está configurada correctamente, los resultados aparecen como se muestra infra:


  • kibana.service - Kibana

Cargado: cargado (/lib/systemd/system/kibana.service; habilitado; proveedor preset: habilitado)

Activo: activo (correo) desde Tue 2025-03-25 15:14:22 IST; hace 9min

Docs: https://www.elastic.co

PID principal: 1554 (java)

PID principal: 9690 (nodo)

Tareas: 11 (limit: 18932)

Memoria: 598.2M

CGroup: /system.slice/kibana.service

∙9690 /usr/share/kibana/bin/../node/glibc-217/bin/node /usr/share/kibana/bin/./src/cli/dist

Mar 25 15:17:09 nombre de anfitrión kibana[9690]: [2025-03-25T15:17:09.848+05:30][ERROR][http] 400 Bad Request

Mar 25 15:19:46 nombre de anfitrión kibana[9690]: [2025-03-25T15:19:46.504+05:30][INFO ][plugins.securitySolution] Obtenga métricas del motor de riesgo

Mar 25 15:19:46 nombre de anfitrión kibana[9690]: [2025-03-25T15:19:46.860+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: La carga útil de recursos se envió con éxito

Mar 25 15:19:46 nombre de anfitrión kibana[9690]: [2025-03-25T15:19:46.861+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: La carga útil de las cuentas se envió con éxito

Mar 25 15:19:46 nombre de anfitrión kibana[9690]: [2025-03-25T15:19:46.862+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: se envió la carga útil de las reglas con éxito

Mar 25 15:19:47 hostname kibana[9690]: [2025-03-25T15:19:47.193+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: Se envió la carga útil de las alertas con éxito

Mar 25 15:19:47 hostname kibana[9690]: [2025-03-25T15:19:47.199+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: La carga útil de las cuentas nubladas se envió con éxito

Mar 25 15:19:47 hostname kibana[9690]: [2025-03-25T15:19:47.336+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: La carga útil de las Reglas Mutadas se envió con éxito

Mar 25 15:19:47 hostname kibana[9690]: [2025-03-25T15:19:47.372+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: la carga útil de instalación se envió con éxito

Mar 25 15:19:47 hostname kibana[9690]: [2025-03-25T15:19:47.406+05:30][INFO ][plugins.cloudSecurityPosture] Seguridad en la nube telemetría: Indices payload was sent successfully


Kibana abierta en el navegador :


Una vez que Kibana esté configurado correctamente, abranlo utilizando la siguiente URL:


http:// detectserver_ip confidencial:5601


Por ejemplo:http://localhost:5601


Configure kibana 8.17.3 con TLS/SSL:


Si Elasticsearch ya está configuradoTLS/SSL (HTTPS), necesitaKibana se comunica de forma seguraCon él.


Mira cómo administrar Kibana con TLS/SSL:


Paso-1:

Abra el archivo de configuración :sudo nano /etc/kibana/kibana.yml


Paso-2:
Copiar el certificado del directorio certs de la búsqueda elástica el directorio kibana certs :


cp /etc/elasticsearch/certs/elastic-stack-ca.crt /etc/kibana/


Establecer los permisos correctores para certificados :


chown kibana:kibana /etc/kibana/elastic-stack-ca.crt


chmod 600 /etc/kibana/elastic-stack-ca.crt


Verifique la propiedad del archivo y permisos :


ls -l /etc/kibana/elastic-stack-ca.crt


El producto aparece como sigue:
-rwxr-x--- 1 kibana kibana 1915 Mar 25 13:56 /etc/kibana/elastic-stack-ca.crt


Paso-3:
Descomiendo y modificando el siguiente ajuste:


server.port: 5601
servidor.host : "localhost"
elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "password"
elasticsearch.maxSockets: 1024
elasticsearch.ssl.certificateAuthorities: [/etc/kibana/http_ca.crt]


Finalmente guardar y salir de las configuraciones de kibana.


Siacceso Kibana sobre HTTPSen lugar de http://localhost:5601, configure TLS en kibana.yml:


Agregar estos ajustes:


server.ssl.enabled: true
server.ssl.certificate: "/etc/kibana/kibana.crt"
server.ssl.key: "/etc/kibana/kibana.key"


Paso-4:
Reinicie el Kibana para obtener los cambios aplicados:


Sudo systemctl reiniciar kibana. servicio


Si no tiene el usuario de Elasticsearch, utilizar el comando de abajo manualmente restablecer la contraseña.

Configurar manualmente contraseña para el usuario


Utilice el siguiente comando en su terminal:


Sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u -i


paso-4: Intenta acceder a Kibana


Si usasKibana HTTPS, uso:


https://localhost:5601


SiKibana SSL está deshabilitada, uso:


http://localhost:5601


Si Kibana está corriendo en unaservidor, reemplazar localhost por IP del servidor:


http://your-server-ip:5601


Descargar MQTT Brokery corriendo en nuestra máquina y parece


Configuración del conjunto de investigación elástica


ElElasticsearch Connectoren CrystalMQ permite recuperación de datos sin costuras del corredor e indexación eficiente en Elasticsearch. Garantiza autenticación segura, comunicación encriptada y almacenamiento de datos fiable, lo que lo convierte en un componente esencial para gestionar y analizar los datos de IoT.


  • Host:Introduzca el nombre de host o dirección IP de la búsqueda elástica servidor.
  • Puerto:Especifique el puerto en el que el servidor de Elasticsearch es escuchar (por defecto:9200).
  • ÍndiceIntroduzca el nombre del índice Elasticsearch para almacenar o Recuperando datos.
  • Autenticación:Seleccione el método de autenticación:
    Auth basic:Autentizar usando un nombre de usuario y contraseña.
    PKI Auth:Authenticate utilizando Infraestructura de Claves Públicas (PKI) con cliente certificados.
    JWT Auth:Autentice usando un Token Web JSON (JWT).
  • Access Token:Si usasJWT autenticación,ingrese una ficha válida de acceso JWT.
  • SSL:HabilitaciónSSL/TLSpara una conexión segura. Si está habilitado, proporcione los archivos de certificado requeridos.
  • Certificado CA:Subir elCertificado Certificado de autoridad (CA)si utiliza un certificado auto-firmado.
  • Certificado de cliente:Si usasautenticación PKI,subir la carga necesariacertificado cliente y clave cliente

1. Autenticación en Elasticsearch Conector


Elasticsearch admite múltiples métodos de autenticación para asegurar acceso.


Autenticación básica


Por defecto, Elasticsearch requiere unnombre de usuario y contraseñapara la autenticación. Sin credenciales válidas, la conexión fallará, conduce a errores de autenticación. Este método es simple y ampliamente utilizado para asegurar el acceso.


Autenticación de PKI (Infraestructura de clave pública)


Usos de autenticación PKIcertificados digitalesen lugar de contraseñas para acceso seguro. En este enfoque:


  • ACertificado de clienteyCliente Claveestán obligados a establecer una conexión confiable con Elasticsearch.
  • El servidor verifica el certificado contra una confianzaCertificado Autoridad (CA)para asegurar la autenticidad.
  • Este método mejora la seguridad eliminando la necesidad de contraseñas y garantizando al mismo tiempo cifrado y comunicación autenticada.

JWT (JSON Web Token) Autenticación


La autenticación JWT proporcionaacceso basado en token control,donde unAcceso Tokense utiliza en lugar de credenciales tradicionales.


  • Los proveedores de autenticación comoGoogle o Keycloakgenerar un acceso token para usuarios.
  • Elasticsearch valida la ficha usando unclave secretaalmacenados en su configuración.
  • Este método permiteseñalización única (SSO)seguro, escalable autenticación.

2. Encryption: SSL/TLS en Elasticsearch


Para proteger los datos en tránsito, Elasticsearch admiteCifrado SSL/TLS,garantizar la comunicación entre los clientes y el servidor sigue siendo privado y seguro.


Configuración de cifrado SSL/TLS


  • OpenSSLse utiliza para generar certificados de seguridad necesarios comunicación encriptada.
  • Elasticsearch requiere certificados específicos:

    1. Certificado- Una autoridad de certificado de confianza firma otros certificados.

    2. Certificado de cliente- Identificación al cliente Elasticsearch.

    3. Clave del cliente- Una llave privada usada para autenticar certificado de cliente.


Configurando correctamente la autenticación y encriptación, la búsqueda elástica El conector en CrystalMQ proporciona unseguro, escalable y eficientesolución para la gestión de datos IoT.


Elasticsearch Connector

En el conector Elasticsearch, autenticación básica (nombre de usuario y contraseña) es necesario, por lo que puede configurarse como el predeterminado.


Elasticsearch Connector Details


Introduzca las configuraciones en el conector Elasticsearch, incluyendo el índice Elasticsearch, para establecer la conexión.


Una vez completados todos los campos de configuración, seleccione 'Guardar' para guardar las configuraciones en la base de datos.


Si el conector Elasticsearch está conectado con éxito, el botón Activar/Deshabilitar se mostrará verde. Si hay un problema con el conector, el botón se mostrará en rojo.


Elasticsearch Connector


En la configuración anterior, sólo se utiliza la autenticación básica, sin habilitar el cifrado TLS/SSL.


Use Logstash para ver los datos de Elasticsearch. Veamos cómo podemos utilizar el oleoducto Logstash para capturar estos datos.


Logstash ofrece varios métodos para producir datos, dependiendo de cómo desea almacenar, visualizar o reenvíarlo. Algunas opciones comunes de salida incluyen:


  • Elasticsearch
  • Archivo
  • Producto estándar
  • Kafka
  • Redis
  • AWS S3 / Google Cloud Storage
  • InfluxDB
  • Email
  • TCP / UDP
  • Htp
  • Gráfico
  • WebSocket
  • Google BigQuery

Paso -1 :

Configure Logstash para recuperar datos de Elasticsearch:


  • Crear un archivo de configuración Logstash
    Crear un archivo llamadoelasticsearch_logstash.confen el Logstash
    directorio de configuración

  • Editar el archivo de configuración
    Abiertoelasticsearch_logstash.confy añadir lo siguiente configuración:

entrada
elasticsearch {
hosts = confianza ["http://your-elasticsearch-host:9200"]
index = "tu nombre índice"
usuario = "su nombre de usuario"
contraseña = "su contraseña"
}
}
producción {}
stdout
codec = json
}
}


Corre Logstash


Iniciar Logstash usando el siguiente comando:


En caso de que Logstash haya sido instalado a través de un gestor de paquetes:


sudo /usr/share/logstash/bin/logstash -f
/etc/logstash/conf.d/elasticsearch_logstash.conf


Por ejemplo: sudo /usr/share/logstash/bin/logstash -f

~/Documentos/elásticosearch_logstash.conf


Después de configurar Logstash, utilice el siguiente comando para verificar que la configuración se ha aplicado correctamente.


sudo /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f
path/to/elasticsearch_logstash.conf --config.test_and_exit


Si la configuración es correcta, la salida es la siguiente:

Utilizando el JDK incluido: /usr/share/logstash/jdk

Envío de Logstash logs a /var/log/logstash que ahora está configurado a través de

log4j2.propiedades

[2025-03-26T11:40:50,375] [WARN ] [logstash.runner ] NOTICE: Corrección

Logstash como superusuario es fuertemente desalentado ya que plantea una seguridad riesgo.

Ponga 'allow_superuser' a falso para una mejor seguridad.

[2025-03-26T11:40:50,386][INFO ][logstash.runner ] Configuración Log4j

ruta utilizada es: /etc/logstash/log4j2.properties

[2025-03-26T11:40:50,388][INFO ][logstash.runner ] Inicio Logstash

{"logstash.version"= título"8.17.3", "jruby.version"= "jruby 9.4.9.0 (3.1.4) 2024-11-

04 547c6b150e OpenJDK 64-Bit Server VM 21.0.6+7-LTS en 21.0.6+7-LTS +indy

[x86_64-linux]

[2025-03-26T11:40:50,392][INFO ][logstash.runner ]

banderas: [-Xms1g, -Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -

Djruby.compile.invokedynamic=true, -

XX:+HeapDumpOnOutOfMemoryError, -

Djava.security.egd=file:/dev/urandom, -

Dlog4j2.esThreadContextMapInheritable=true, -Dlogstash.jackson.stream-

read-constraints.max-string-length=200000000, -

Dlogstash.jackson.stream-read-constraints.max-number-length=10000, -

Djruby.regexp.interruptible=true, -Djdk.io.File.enableADS=true, --add-

export=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-

export=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-

exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-

export=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-

export=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-

opens=java.base/java.security=ALL-UNNAMED, --add-

opens=java.base/java.io=ALL-UNNAMED, --add-

opens=java.base/java.nio.channels=ALL-UNNAMED, --add-

opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-

opens=java. management/sun.management=ALL-UNNAMED, -

Dio.netty.allocator.maxOrder=11]

[2025-03-26T11:40:50,462][INFO]

[org.logstash.jackson.StreamReadConstraintsUtil] Jackson valor predeterminado

override `logstash.jackson.stream-read-constraints.max-string-length`

configurado un

[2025-03-26T11:40:50,463][INFO]

[org.logstash.jackson.StreamReadConstraintsUtil] Jackson valor predeterminado

override `logstash.jackson.stream-read-constraints.max-number-length`

configurado un `10000`

[2025-03-26T11:40:50,755][WARN ][logstash.config.source.multilocal]

Ignorar el archivo 'pipelines.yml' porque módulos o línea de comandos opciones

se especifica

[2025-03-26T11:40:51,186][INFO ][org.reflections.Reflections] Reflexiones

Tomó 177 ms para escanear 1 urls, produciendo 152 teclas y 530 valores

[2025-03-26T11:40:51,846][INFO ][logstash. javapipeline Pipeline `main ` es

configurado con el ajuste 'pipeline.ecs_compatibilidad: v8`. Todos los plugins en esto

oleoducto por defecto a `ecs_compatibilidad = v8 ' salvo explícitamente

configurado de otra manera.

Configuración OK

[2025-03-26T11:40:51,848] [INFO ] [logstash.runner ] Usando

config.test_and_exit mode. Validación de Config Resultado: OK. Exiting Logstash


Compruebe los registros de Logstash usando el comando de abajo para verificar que los datos se están recuperando de Elasticsearch y se muestra en Logstash.


El log Logstash aparece como se muestra a continuación:


Utilizando el JDK incluido: /usr/share/logstash/jdk

[WARN ] 2025-03-25 18:16:42.180 [main] runner - 'pipeline.buffer.type '

el ajuste no se define explícitamente. Antes de mudarse a 9.x ponerlo en 'heap' Sí.

sintonizar el tamaño del montón hacia arriba, o establecerlo a 'directo' para mantener existente comportamiento.

[INFO ] 2025-03-25 18:16:42.181 [main] runner - Iniciar Logstash

{"logstash.version"= título"8.17.3", "jruby.version"= "jruby 9.4.9.0 (3.1.4) 2024-11-

04 547c6b150e OpenJDK 64-Bit Server VM 21.0.6+7-LTS en 21.0.6+7-LTS +indy

[x86_64-linux]

[INFO ] 2025-03-25 18:16:42.185 [main] runner - JVM bootstrap flags: [-Xms1g,

-Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -

Djruby.compile.invokedynamic=true, -

XX:+HeapDumpOnOutOfMemoryError, -

Djava.security.egd=file:/dev/urandom, -

Dlog4j2.esThreadContextMapInheritable=true, -Dlogstash.jackson.stream-

read-constraints.max-string-length=200000000, -

Dlogstash.jackson.stream-read-constraints.max-number-length=10000, -

Djruby.regexp.interruptible=true, -Djdk.io.File.enableADS=true, --add-

export=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-

export=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-

exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-

export=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-

export=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-

opens=java.base/java.security=ALL-UNNAMED, --add-

opens=java.base/java.io=ALL-UNNAMED, --add-

opens=java.base/java.nio.channels=ALL-UNNAMED, --add-

opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-

opens=java. management/sun.management=ALL-UNNAMED, -

Dio.netty.allocator.maxOrder=11]

[INFO ] 2025-03-25 18:16:42.373 [main] StreamReadConstraints Util... Jackson

valor predeterminado override `logstash.jackson.stream-read-constraints.max-

string-length` configurado a `200000000`

[INFO ] 2025-03-25 18:16:42.373 [main] StreamReadConstraints Util... Jackson

valor predeterminado override `logstash.jackson.stream-read-constraints.max-

number-length ' configured to `10000`

[WARN ] 2025-03-25 18:16:42.655 [LogStash::Runner] multilocal - Ignorando

el archivo 'pipelines.yml' porque los módulos o las opciones de línea de comando son

especificada

[INFO ] 2025-03-25 18:16:43.449 [Api Webserver] agente - Éxito comenzado

Logstash API endpoint {:port= confianza9601, :ssl_enabled=propse}

[INFO ] 2025-03-25 18:16:43.805 [Converge PipelineAcción:

]

Reflections - Reflections tomó 169 ms para escanear 1 urls, produciendo 152 teclas Sí.

[INFO ] 2025-03-25 18:16:44.521 [Converge PipelineAcción:

]

javapipeline - Pipeline `main` se configura con

`pipeline.ecs_compatibilidad: v8` ajuste. Todos los plugins en esta tubería Lo sé.

default to `ecs_compatibilidad = v8` a menos que se configura explícitamente

De lo contrario.

[INFO ] 2025-03-25 18:16:44.579 [[main]-pipeline-manager] javapipeline -

Comienzo del oleoducto {:pipeline_id= título"main", "pipeline.workers" = 4,4

"pipeline.batch.size"= usuario125, "pipeline.batch.delay"= confianza50,

"pipeline.max_inflight" = 500,

"pipeline.sources"= confianza[" /home/bevywise/Documents/elasticsearch_logstash.

conf"], :thread= Confes" /usr/share/logstash/logstash-

core/lib/logstash/java_pipeline.rb:138 Corre

[INFO ] 2025-03-25 18:16:45.277 [[main]-pipeline-manager] javapipeline -

Pipeline Hora de inicialización de la ejecución de Java {"segundos"=0.7}

[INFO ] 2025-03-25 18:16:45.591 [[main]-pipeline-manager] elasticsearch -

`search_api = confianza auto` resuelto a `search_after ` {:escuela elástica = confianza»8.17.3}

[INFO ] 2025-03-25 18:16:45.593 [[main]-pipeline-manager] elasticsearch -

La compatibilidad del sistema ECS está habilitada pero no se especificó la opción " objetivo " . Esto

puede hacer que los campos se establezcan en el nivel superior del evento donde están

probablemente chocar con el esquema común elástico. Se recomienda establecer

la opción `target` para evitar posibles conflictos de esquemas (si sus datos son ECS

obediente o no conflictivo, ningún tipo en ignorar este mensaje)

[INFO ] 2025-03-25 18:16:45.597 [[main]-pipeline-manager] javapipeline -

Pipeline comenzó {"pipeline.id"= título"main"}

[INFO ] 2025-03-25 18:16:45.600 [[main] searchafter - Crear

punto en el tiempo (PIT)

[INFO ] 2025-03-25 18:16:45.619 [Agent thread] agent - Pipelines running

{:count= título1, :running_pipelines= confianza[:main], :non_running_pipelines= confianza[]

[INFO ] 2025-03-25 18:16:45.630 [[main] madeelasticsearch] searchafter - Query

#

[INFO ] 2025-03-25 18:16:45.703 [[main] madeelasticsearch] searchafter - Query

Final

[INFO ] 2025-03-25 18:16:45.704 [[main] madeelasticsearch] searchafter - Clausura

punto en el tiempo (PIT)

{}
"message" = "{\"sensor_id\": \"sensor_123\", \"temperature\": 25.5, \"humidity\": 60, \"status\": \"active\"} "
"topic" = "test/search",
"client_id" = confianza "Bevywise-fQ4kK3aI2uQ0",
"timestamp" = custodia 1742478868,
"propiedades"
"@version" = confianza "1",
"@timestamp" = confianza 2025-03-25T12:46:45.691895415Z
}

{}
"message" = "{\"sensor_id\": \"sensor123\", \"temperatura\": 27, \"humidity\": 712, \"status\": \"active\"} "
"topic" = "test/moniting",
"client_id" = confianza "Bevywise-qI8mQ7rI9uM3",
"timestamp" = relación 1742817477,
"propiedades"
"@version" = confianza "1",
"@timestamp" = confianza 2025-03-25T12:46:45.693859511Z
}

{}
"message" = "{\"sensor_id\": \"sensor123\", \"temperatura\": 27, \"humidity\": 712, \"status\": \"active\"} "
"topic" = "test/moniting",
"client_id" = "Bevywise-eP3cT2xW0vA4",
"timestamp" = relación 1742817662,
"propiedades"
"@version" = confianza "1",
"@timestamp" = confianza 2025-03-25T12:46:45.693957511Z
}


Utilice Kibana para visualizar los datos una vez que Elasticsearch lo haya recibido del CrystalMQ Elasticsearch Connector.


Paso-1:


Abra la url del navegador comohttp:// detecthost_ipilo:5601


Paso-2:Crear un patrón de índice


Antes de visualizar datos, necesita definir un patrón de índice para acceder a su Bitácoras MQTT.


  • Vaya a "Stack Management" → "Index Patterns".
  • Haga clic en "Crear patrón de índice".
  • Introduzca su nombre de índice (por ejemplo, offset_mqt-*).
  • Seleccione el campo timetamp (@timestamp si está disponible).
  • Haga clic en "Crear patrón de índice".

Paso-3:Gráfico para Mensajes MQTT con el tiempo


Antes de visualizar datos, necesita definir un patrón de índice para acceder a su Bitácoras MQTT.


  • Ve."Visualize Library""Crear visualización".
  • Seleccione"Line Chart".
  • Elija su patrón de índice (offset_mqtt-*).
  • Configure:
    Eje X: Seleccione @timestamp y intervalo de configuración (por ejemplo, 1m, 1h).
    Eje Y: Seleccione Cuenta para contar mensajes MQTT.
  • Haga clic"Save"y nombre su visualización.

Paso-4: El gráfico se ve como sigue:


Gráfico de barras :


Bar Chart


Pie-chart :


Pie Chart


Vista de la tabla :


Table View


Ahora, utilizaremos Elasticsearch con encriptación TLS/SSL para establecer una conexión y enviar mensajes a través de Data Connectors en CrystalMQ:



Paso-1 : Verifique que todas las rutas de certificado en la configuración de Elasticsearch se proporcionan correctamente. Si se hacen cambios, reinicie Elasticsearch para aplicarlos.



Paso-2 : Abra el archivo de configuración de Kibana y verifique que todos los ajustes estén correctamente configurados para TLS/SSL.



Paso-3 : Run Crystal MQ y utilizar el conector Elasticsearch en Data Connectors para conectarse a Elasticsearch con el cifrado SSL/TLS.



Paso-4 : Para la encriptación SSL/TLS, se requiere el certificado de raíz de CA para conectarse a Elasticsearch. El certificado de cliente y la clave del cliente son opcionales: cargar sólo el certificado raíz de CA es suficiente para establecer la conexión.



Elasticsearch


Paso-5: Después de subir todos los certificados, guardar la configuración y activar el conector con el botón Activar/Deshabilitar para mover.



Enable Certificates


Paso-6 : El conector Elasticsearch con encriptación TLS/SSL ha sido conectado con éxito en CrystalMQ.



Use Logstash para ver los registros desde el conector Elasticsearch:



Configure Logstash para recuperar datos de Elasticsearch:

  • Crear un archivo de configuración Logstash
    Crear un archivo llamadoelasticsearch_logstash.confen el Logstash
    directorio de configuración
  • Editar el archivo de configuración
    Abiertoelasticsearch_logstash.confy añadir lo siguiente configuración:

entrada
elasticsearch {
hosts = confianza ["https://your_elasticsearch_host:9200"]
usuario = "elástico"
contraseña = "su_password"
index = "your_index_pattern"
ssl = confianza verdadero
ccert = "/path/to/elasticsearch-ca.crt"
}
}


producción {}
stdout
codec = rubydebug
}
}


Guardar la configuración y utilizar el siguiente comando para verificar si se ha establecido correctamente:


sudo /usr/share/logstash/bin/logstash --path.settings /etc/logstash -f

path/to/elasticsearch_logstash.conf --config.test_and_exit


Use Logstash para capturar los datos de la búsqueda elástica con TLS/SSL :


Si ha instalado Logstash a través de un gestor de paquetes:


sudo /usr/share/logstash/bin/logstash -f

/etc/logstash/conf.d/elasticsearch_logstash.conf


Por ejemplo: sudo /usr/share/logstash/bin/logstash -f
~/Documentos/elásticosearch_logstash.conf


Ahora Configure el Kibana con la búsqueda elástica TLS/SSL:



Consulte los pasos anteriores para configurar kibana.yml para Elasticsearch con encriptación TLS/SSL.



Abra el navegador en https:// detecthost_ipilo:5601 y visualizar los datos en Kibana utilizando las instrucciones anteriores, con opciones como gráficos de barras, gráficos de tarta y vistas a los datos.



En Elasticsearch versión 8.17.3, estamos utilizando la licencia básica, por lo que PKI y JWT no pueden utilizarse para establecer la conexión.

Para utilizar la autenticación JWT y PKI, se requiere una actualización de la licencia Platinum.


Utilizando la autenticación PKI en CrystalMQ:


En la autenticación PKI se requiere el certificado de cliente y la clave del cliente, mientras que el certificado de raíz CA es opcional.


Guarda la configuración y habilita el botón de conmutación del conector para conectarse a Elasticsearch utilizando la autenticación PKI.


Elasticsearch está ahora configurado con autenticación PKI.


Si queremos cifrar los datos, podemos utilizar SSL/TLS con autenticación PKI.


Para cifrar los datos, SSL/TLS se puede utilizar junto con la autenticación PKI.


En la autenticación PKI con SSL/TLS, el certificado cliente y la clave cliente son necesarios, mientras que para las conexiones SSL-sólo, sólo se necesita el certificado raíz CA para conectarse a Elasticsearch.




Save Configurations


Utilizando la autenticación JWT en CrystalMQ:



En la autenticación JWT (JSON Web Tokens), el token de acceso se utiliza para conectarse a Elasticsearch.


Utilice un proveedor de autenticación, como Keycloak o Google Console, para obtener la clave de acceso.


Ahora, utilice la tecla de acceso con el comando de abajo para obtener la ficha de acceso:


curl --cacert /etc/keycloak.crt -X POST
"https://localhost:8443/realms/myrealm/protocol/openid-
connect/token[](https://localhost:8443/realm/myrealm/protocol/openid-
conectar/token") \

-H "Content-Type: application/x-www-form-urlencoded" \

-d "grant_type=client_credentials" \

-d "client_id=elásticasearch" \

-d "client_secret=ACCESS_KEY"


En este comando, el proveedor de autenticación Keycloak se utiliza para obtener la ficha de autentificación.



Después de obtener la ficha de acceso, utilizarla en el conector de datos Elasticsearch para conectarse a Elasticsearch utilizando la autenticación JWT.



Authentication


Si queremos cifrar los datos, podemos utilizar SSL/TLS con autenticación PKI.



Upload Client Certificate

Al utilizar SSL/TLS con JWT, simplemente suba el certificado raíz de CA para conectarse a Elasticsearch.


Optimize MQTT ¡Red!

MQTT Pesas con ELK

Monitorear y analizar mensajes de corredor MQTT en tiempo real para mejorar IoT
rendimiento y detectar posibles problemas al instante.