GrafanaUno de los problemas más comunes a los que nos enfrentamos en IT es la motorización de los sistemas informáticos, así como el sistema de alertas que nos avisa si algo no funciona como debe.

En el mundo de los microservicios y DevOps, también encontramos este problema, ya que, sea bien un servicio web administrado por la nube,  una máquina virtual, o un cluster  de kubernetes,  tenemos la necesidad de monitorizar en tiempo real toda la infraestructura. Para solucionar este problema se desarrolló la herramienta de Grafana,

¿Qué es Grafana?

Se trata de un software libre basado en licencia de Apache 2.0, que nos permite visualizar datos recogidos de diversas fuentes como Graphite, InfluxDB o Prometheus, herramientas que recopilan datos de nuestra infraestructura, como el uso de CPU, de memoria, o el tráfico de red de una máquina virtual, de un cluster de Kubernetes, o de cada uno de sus contenedores.

Sin embargo, la verdadera potencia de Grafana reside en la flexibilidad para crear todos los paneles que queramos con gráficas donde podemos formatear estos datos y representarlos como más nos interese. Por ejemplo, podemos mostrar el dato actual de uso CPU de un contenedor o pod dentro de kubernetes en tiempo real, o podemos mostrar una gráfica con los distintos valores en progresión temporal .

Además Grafana tiene un repositorio completo de paneles predefinidos y plugins totalmente gratis, que podemos utilizar para mostrar información de distintas fuentes.

 

Grafana panel

Figura 1: Grafana panel

 

Todos estos valores se muestran lanzando querys a la herramienta que recoge los datos. En este artículo recomendamos el uso de Prometheus,  un software de código abierto que permite la recolección de datos mediante extensiones, ya sean estas desarrolladas por el propio equipo de Prometheus, por la comunidad, o por terceros. La recomendamos como herramienta encargada de recopilar los datos por la fácil instalación, y por la facilidad de uso, ya sea para recabar información mediante extensiones como Prometheus Node Exporter para máquinas virtuales, o mediante extesiones de terceros como Kube-State-Metrics  para recopilar información en un cluster de Kubernetes.

También es recomendable por su potencia a la hora de interpretar los datos según hagamos la llamada a las querys desde Grafana, ya que nos posibilita hacer cosas como calcular datos directamente como la suma total de la memoria usada por todos los pods de un cluster de Kubernetes, e incluso tiene funciones incluidas que nos permiten ir más allá, calculando por ejemplo, datos basados en rangos de tiempo, como el número de paquetes de red que han entrado nuestro entorno en los últimos 10 minutos.

Por último, Prometheus “rasca” la información, es decir, se le dice en la configuración qué datos tiene que buscar y dónde lo tiene que hacer.

Monitorización de Clusters de Kubernetes

Una vez explicadas las herramientas que vamos a utilizar, ahora toca hablar sobre la arquitectura necesaria para poder monitorizar varios clusters de Kubernetes.

  1. En primer lugar, necesitamos un servidor de Grafana, corriendo, por ejemplo, como servicio en una máquina virtual con Ubuntu server.
  2. En segundo lugar, necesitamos que en el mismo servidor donde se encuentre Grafana haya un servidor de Prometheus corriendo como servicio de Linux, al que llamaremos Prometheus global.
  3. Por último, necesitamos que haya un servidor Prometheus en cada uno de los clusters de Kubernetes, es fácil encontrar por Interntet paquetería predefinida de Prometheus para Kubernetes, ya sea mediante deployments, o mediante repositorios de Charts de Helm, donde solo tenemos que configurarlo y lanzarlo en nuestros clusters de Kubernetes, a este pod de Prometheus le llamaremos Prometheus local.

El Grafana mostrará los datos del Prometheus global, este tendrá en su configuración como targets a todos los Prometheus locales de los diferentes clusters de Kubernetes, que normalmente escuchan por el puerto 9090, e irá a recoger la información que a su vez haya recopilado cada uno de los Prometheus locales.

Cada Prometheus local se encargará de recopilar toda la información de su cluster de kubernetes utilizando extensiones como Node Esporter para los nodos y Kube-State_Metrics para los pods.

Para cada Prometheus local debemos configurar un tag o etiqueta, con un valor distinto en cada cluster de Kubernetes; por ejemplo utilizar un tag “cluster_name” con un valor distinto en cada cluster. De esta forma, podremos distinguir entre clusters cuando hagamos la llamada a la query del Prometheus global en el Grafana añadiendo a la query: cluster_name=”kube_cluster_uno” o cluster_name=”kube_cluster_dos”.

 

Monitor Server with Kubernetes Clusters

Figura 2: Monitor Server with Kubernetes Clusters

 

Con esto, ya tendríamos la forma de monitorizar varios clusters de kubernetes con Grafana y Prometheus.

Existen otras herramientas y arquitecturas para hacer esto, pero a Teldat esta es la forma que mejores resultados nos ha dado hasta la fecha en la nuestras soluciones SDN, como por ejemplo SD-WAN, del que podemos monitorizar todos los parámetros en tiempo real y estar seguros en todo momento de que funciona correctamente.


Sobre el autor

Jorge Montero
Jorge Montero
es Ingeniero Informático. Trabaja dentro del departamento de I+D de Teldat como Administrador de Sistemas, Cloud & DevOps

Comparte este post


Nuestras Soluciones Relevantes



| Etiquetas: