Grafana + Prometheus

Grafana + Prometheus

El stack de Grafana y Prometheus es un la solución de preferencia para gestionar y monitorear un cluster de Kuberntes (y múltiples clústers). La mayoría de los "paquetes" de Kubernetes están pre-configurados para exportar las métricas utilizando el estándar de Prometheus. Adicionamente también existen una serie "exporters" que se integran a un gran número de aplicaciones para monitorear los nodos y Pods del cluster.

Instalación de Prometheus + Grafana

Utilizamos este helm chart con todo el stack necesario. Y así, en menos de 5 minutos, ya instalamos la plataforma:

¿Cómo funciona?

Básicamente la mayoría de los Helm Charts vienen con una sección de métricas, como está: (Ejemplo de chart de Mysql de Bitnami)

metrics:
  enabled: true
  image:
    registry: docker.io
    repository: bitnami/mysqld-exporter
  service:
    type: ClusterIP
    port: 9104
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/port: "{{ .Values.metrics.service.port }}"

¿Que hace? Básicamente al desplegar el Pod de Mysql, se gatilla un segundo contenedor (adicional al contenedor propio de Mysql) que disponibiliza las métricas de Mysql. En este caso, las métricas de Mysql se disponibilizan en el puerto 9104:

Luego, sí observamos el puerto 9104 del contenedor, veremos las métricas de Mysql: (El puerto que aparece en la imagen corresponde a un redirección del puerto 9104 a la máquina local)

Prometheus

Y ahora que el contenedor de Mysql está "exportando" los datos, debemos preocuparnos de que Prometheues lea (scrape) dichos datos. Esto lo hacemos así:

prometheus:
  prometheusSpec:
    replicas: 1
    additionalScrapeConfigs:
      - job_name: mysql
        static_configs:
        - targets: ['10.233.92.171:9104']

Básicamente le decimos al servidor de Prometheus que examine o haga scrapping a la máquina 10.233.92.172 en el puerto 9104.

Grafana

Una vez que las métricas están siendo leídas por el servidor de Promethus, podemos utilizar Grafana para leer y visualizar la información. La construcción de paneles (o dashboards) puede simplificarse importando dashboard preconfigurados. Para este ejercicio de Mysql, importamos este dashboard:

AlertManager

Bueno, que sería de un sistema de monitoreo si ésto no tiene un sistema de notificación y de alertas.