En un blog anterior, presentamos un método nuevo para monitorear el Elastic Stack con Metricbeat. Usar Metricbeat para recopilar de forma externa información de monitoreo sobre productos del Elastic Stack mejora la confiabilidad de monitorear esos productos. También proporciona flexibilidad en el modo en que se pueden enrutar los datos de monitoreo al cluster de monitoreo de Elasticsearch. En este blog profundizaremos más en el segundo aspecto y mostraremos cómo los usuarios pueden enrutar hacia el cluster de monitoreo los datos de monitoreo recopilados por Metricbeat a través de Logstash o Kafka. Si ya usas la salida de logstash
o kafka
en la configuración de Metricbeat para tus datos empresariales, puedes seguir usando esas salidas para enrutar también tus datos de monitoreo del Elastic Stack.
Comencemos desde donde dejamos en el blog anterior. Habíamos presentado la arquitectura siguiente para monitorear productos del Elastic Stack con Metricbeat.
Ten en cuenta que cada instancia de Metricbeat monitorea una instancia o un nodo de un producto del Elastic Stack. Para hacerlo, se deben habilitar los módulos de Metricbeat correctos (variante de configuración *-xpack
). Por ejemplo, para monitorear un nodo de Logstash, se debe habilitar el módulo logstash-xpack
.
En esta arquitectura, cada instancia de Metricbeat envía datos a un cluster de monitoreo. Esto implica que se necesita conectividad de red entre los hosts de Metricbeat y los hosts de clusters de monitoreo.
Sin embargo, a veces podría ser conveniente minimizar la cantidad de puntos de ingreso a Elasticsearch. Podría resultar más conveniente canalizar todo el tráfico de monitoreo del stack proveniente de las instancias de Metricbeat en una instancia de Logstash y hacer que después envíe los datos al cluster de monitoreo. En este blog, veremos cómo implementar este tipo de arquitectura para el monitoreo del stack con Metricbeat.
Cómo agregar Logstash a tu flujo de datos de monitoreo del stack
Primero configuraremos un pipeline de Logstash que reciba los datos de monitoreo del stack desde Metricbeat y los envíe al cluster de monitoreo. A continuación se muestra este pipeline y se explican sus partes en detalle.
input { beats { port => 5044 } } filter { # Texto modelo para compatibilidad entre versiones de Beats mutate { rename => { "[@metadata][id]" => "[@metadata][_id]" } } } output { if [@metadata][index] =~ /^.monitoring-*/ { # enrutar datos de monitoreo del stack al cluster de Elasticsearch de monitoreo if [@metadata][_id] { elasticsearch { index => "%{[@metadata][index]}-%{+YYYY.MM.dd}" document_id => "%{[@metadata][_id]}" hosts => ["https://node1:9200"] } } else { elasticsearch{ index => "%{[@metadata][index]}-%{+YYYY.MM.dd}" hosts => ["https://node1:9200"] } } } else { # enrutar datos de monitoreo ajenos al stack } }
En un nivel alto, este pipeline:
- Usa el plugin de entrada
beats
para leer los datos de monitoreo del stack que envía Metricbeat. - Usa el plugin de salida
elasticsearch
para enviar los datos de monitoreo del stack al cluster de monitoreo.
Observa la escalera de instrucciones if-else
en la sección output
del pipeline. La instrucción if-else
del nivel superior te permite separar los datos destinados al monitoreo del stack (que se indexarán en índices .monitoring-*
) de otros datos que potencialmente recopilarán las mismas instancias de Metricbeat, por ejemplo, si habilitaste el módulo system
.
Dentro de la instrucción if
para los datos de monitoreo del stack, hay una instrucción if-else
anidada. Esta construcción asegura que cualquier ID, de estar configurado, en eventos de datos de monitoreo del stack que provienen de Metricbeat se pasen por el campo _id
al indexar los datos en el cluster de monitoreo. Esto es fundamental, en especial, para que se indexen correctamente los datos de monitoreo de shards de Elasticsearch. Sin esta construcción, la UI de Stack Monitoring de Elasticsearch mostrará erróneamente una cantidad en aumento constante de shards con el paso del tiempo.
Configuración de Metricbeat para que envíe a Logstash
Una vez que hayas configurado el pipeline de Logstash, tendrás que configurar las instancias de Metricbeat para que envíen sus datos al host de Logstash en lugar de hacerlo directamente al cluster de monitoreo.
output.logstash: hosts: [ "logstash_hostname:5044" ]
Una variación de esta configuración podría ser introducir Kafka entre Metricbeat y Logstash. En este caso la apariencia del pipeline de Logstash sería prácticamente igual a lo anterior, excepto que usarías el plugin de entrada kafka
en lugar del plugin beats. Del mismo modo, configurarías las instancias de Metricbeat para que envíen los datos al cluster de Kafka en lugar de Logstash.
Resumen
Esperamos que este blog te haya proporcionado una implementación concreta para enrutar tus datos de monitoreo del Elastic Stack desde Metricbeat hasta Elasticsearch a través de Logstash (o Kafka). También esperamos que haya demostrado con claridad el tipo de flexibilidad que resulta posible gracias al uso de Metricbeat para recopilar de forma externa datos de monitoreo de productos del Elastic Stack.
Si tienes preguntas o algún inconveniente con esta configuración, no dudes en publicarlos en discuss.elastic.co. Si deseas conocer lo que obtienes con Stack Monitoring, dirígete a nuestra demostración interactiva para probarlo.