Engineering

Monitoreo del Elastic Stack con Metricbeat a través de Logstash o Kafka

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.