Una de las partes más importantes en la infraestructura es la monitorización y, en el caso de los microservicios, en Kubernetes, tenemos a Prometheus. Es una excelente herramienta de monitorización para k8s, que cuando la utilices y conozcas sus bondades, harán en ti que te enamores y no dejes de pensar en ella.

¿Qué es Prometheus?

Prometheus es un sistema de monitorización y de alerta open source cuyo origen se remonta en el 2012 en la compañía SoundCloud, y desde allí (conjunto con el crecimiento de k8s) ha sido adoptado por muchas empresas. Prometheus se unió al Cloud Native Computing Foundation en el 2016.

El ecosistema de Prometheus consiste de varios componentes, los principales son los siguientes:

Prometheus básicamente almacena todos los datos como series de tiempo. Cada serie de tiempo se identifica de forma única por su nombre de indicador y un conjunto de pares clave-valor, también conocidos como “labels”.

Los tipos de métricas utilizadas en Prometheus son las siguientes:

Prometheus Operator

Un operador se basa en los conceptos básicos de recursos y controladores de Kubernetes, pero incluye el conocimiento del dominio de la aplicación para encargarse de las tareas comunes.

Prometheus Operator es fácil de instalar con una sola línea de comandos (lo veremos más abajo) y permite a los usuarios configurar y administrar instancias de Prometheus usando una configuración declarativa simple que, creará, configurará y administrará las instancias de monitoreo de Prometheus.

Una vez instalado el Prometheus Operator provee las siguientes características:

¿Cómo se puede implementar?

Prometheus se puede implementar de varias formas, desde la descarga de un .tar.gz de su página web, donde ya viene un ejecutable, hasta su implementación en Kubernetes por medio de Helm.

Nosotros nos vamos a enfocar en Prometheus y Visualización de sus datos, en el equipo de sistemas de Paradigma utilizamos la implementación basada en helm de CoreOS, en despliegues de Kubernetes.

  1. Lo primero que debemos hacer es crear el namespace donde se va a implementar Prometheus: kubectl create namespace monitoring

IMPORTANTE: El namespace de k8s TIENE que llamarse “monitoring” por que sino, Prometheus no captura las métricas de k8s.

  1. Luego agregar el repo de CoreOS en nuestro helm: helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/
  2. Una vez agregado el repo hacemos la instalación de Prometheus Operator según el siguiente comando: helm install coreos/prometheus-operator --name prometheus-operator --namespace monitoring --set rbacEnable=true
  3. Después hacemos la instalación del kube-prometheus: helm install --name mon --namespace monitoring -f prometheus-values.yaml -f grafana-values.yaml -f alertmanager.yaml coreos/kube-prometheus

Donde el fichero xxxxx-values.yaml tiene los parámetros personalizados de la implementación del helm de kube-prometheus. Este fichero debería estar versionado en git.

El único detalle de esta implementación es que Grafana no guarda persistencia en disco duro. Para lograr esto se debe deshabilitar Grafana en el fichero de prometheus-values.yaml con la siguiente opción: deployGrafana: False y haríamos la implementación de Grafana del repo helm install --name grafana --namespace monitoring -f grafana-values.yaml stable/grafana

Para revisar que está implementado ejecutamos el comando de k8s siguiente: kubectl get pods -n monitoring

Es importante los Service Monitor ya que estos dan “visibilidad” dentro de Prometheus, por ejemplo el de Nexus 2 sería así:


apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
 labels:
   app: prometheus
   chart: prometheus-0.0.51
   heritage: Tiller
   prometheus: monitor
   release: monitor
 name: monitor-nexus-exporter
 namespace: monitoring
spec:
 endpoints:
 - interval: 30s
   path: /metrics
   port: monitoring
 namespaceSelector:
   any: true
 selector:
   matchLabels:
     app: sonatype-nexus

Aquí cabe destacar el “endpoint” con el se comunicará el servicio a monitorizar con Prometheus. Intervalo de 30 segundos de consulta, path a consultar el servicios y nombre del puerto (anteriormente creado en un “Service”) a conectar.

Para revisar si Prometheus “ve” el hosts debemos ir a la siguientes URL: http://:9090

Veremos una pantalla como la siguiente:

Para confirmar que nuestro hosts a monitorizar está listo para arrojar métricas a Prometheus debe primero ser “descubierto” por el Service Discovery (recuadro rojo):

Luego revisamos los “Targets” para verificar que Prometheus “llega” al servicio de métricas del host de nexus 2.

El servicio de métricas está “UP” y ¡funcionando! Ahora podemos realizar una consulta a las métricas de “Graph”, esta interfaz tiene la ventaja del “autocompletado” si y sólo si las métricas son enviadas:

Una vez seleccionada la métrica a consultar, hacemos clic en el botón de “Execute”:

Con esto solamente quedaría configurar alguna herramienta gráfica como Grafana para poder hacer consultas PromQL y mostrar información “real”.

Y hasta aquí prometo y Prometheus...

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.