Supervisión con Prometheus
Objetivos del capítulo y requisitos previos
Ahora tiene una buena visión general de los componentes presentes en un clúster de Kubernetes. Se ha abordado la cuestión del ciclo de vida de los pods y los mecanismos que permiten mantener en condiciones operativas las aplicaciones desplegadas en Kubernetes.
En contraposición, la cuestión de la supervisión de estos componentes no se ha tratado en absoluto. Por lo tanto, todavía no tiene la capacidad de conocer el estado de un servicio o el consumo de CPU o de memoria de un conjunto de pods.
Otra dificultad es el aspecto altamente dinámico de los elementos en un clúster de Kubernetes:
-
Los pods cambian de nombre.
-
Los nombres de los volúmenes no están predeterminados.
-
Los nodos cambian de nombre.
-
Los entornos pueden desaparecer tan rápido como aparecieron.
A continuación, va a descubrir el uso de Prometheus.
Este capítulo es una introducción y no una guía de implementación completa. Para ir más allá, puede acudir a los diversos recursos indicados en este capítulo o buscar información en Internet.
Implantación de Prometheus
1. Acerca de Prometheus
Prometheus es una herramienta de supervisión construida alrededor de una base de datos de series temporales. Esta base de datos se alimenta por la propia herramienta, mediante el escrutinio de los distintos puntos de adquisición de datos, a intervalos regulares. La comunicación se basa en el protocolo HTTP y los puntos de recogida se denominan exportadores.
Estos exportadores están cada vez más integrados directamente en las aplicaciones del mercado. Cuando este no es el caso (para bases de datos, por ejemplo), se debe ejecutar un proceso para cerrar la brecha entre Prometheus y el producto que hay que supervisar.
En el contexto de los contenedores, Prometheus se integra particularmente bien por varias razones:
-
Rápido y ligero: Prometheus está particularmente optimizado.
-
Dinámico: Prometheus detecta continuamente creaciones y eliminaciones de servicios o pods.
Otro punto importante: de forma nativa, la mayoría de los componentes de Kubernetes tienen un punto de recolección Prometheus. Por lo tanto, la integración se facilita enormemente.
El proyecto cuenta con el apoyo de la fundación CNCF (que también se ocupa de Kubernetes).
Consulte la siguiente dirección para conocer un poco más sobre el motor Prometheus: https://prometheus.io
2. Funcionamiento de Prometheus
a. Arquitectura de Prometheus
Diagrama de arquitectura de los principales componentes de Prometheus (extraído del sitio web https://prometheus.io)
b. El motor Prometheus
El servidor Prometheus soporta varias operaciones:
-
Escanear el estado de los elementos que hay que supervisar mediante exportadores.
-
Almacenar métricas en un motor de base de datos de series temporales (TSDB, de Time Series Database).
-
Exponer estas métricas a través de una interfaz REST.
El motor Prometheus admite mecanismos automáticos de descubrimiento de servicios (Azure, EC2, Consul, Kubernetes, etc.). En el caso de Kubernetes, el motor puede detectar la adición o eliminación automática de pods.
c. Los exportadores Prometheus
Otro componente particularmente importante para Prometheus son los exportadores. Estos últimos proporcionan un punto de entrada utilizando el protocolo HTTP, que devuelve métricas en formato texto.
Las métricas tienen la forma de una pareja clave/valor separados...
Utilizar Prometheus
1. Funcionamiento de las métricas
a. Consultar las métricas de Prometheus
El motor Prometheus tiene un punto de recopilación de métricas en el puerto 9090 (el puerto de escucha predeterminado), en el contexto /metrics.
Para acceder al puerto 9090 del servidor Prometheus en local, ejecute el siguiente comando:
$ kubectl -n monitoring port-forward svc/prometheus-operated 9090
Seguidamente, indique la dirección http://localhost:9090/metrics en un navegador.
En Google Chrome, instale la extensión «Prometheus Formatter» a fin de tener un formato de datos para los exportadores Prometheus.
Métricas internas devueltas por el motor Prometheus, formateadas con la extensión «Prometheus Formatter» en Chrome
b. Presentación de la interfaz de Prometheus
Además de las métricas, Prometheus ofrece una consola para consultar el motor en el mismo puerto de escucha.
Mantenga abierto el puerto 9090 anterior y escriba la siguiente dirección en un navegador: http://localhost:9090
Página de inicio de Prometheus
La interfaz principal permite la consulta directa de las métricas de Prometheus.
Indique el valor node:node_cpu_utilisation:avg1m en la interfaz y luego haga clic en Execute y después en Graph.
La interfaz devolverá la actividad promedio durante un minuto de todas las CPU de cada nodo del clúster.
Evolución de la actividad de la CPU de los nodos del clúster, minuto a minuto
c. Métricas de Kubernetes
El motor Prometheus puede detectar la creación o eliminación de nuevos pods. Su mera presencia (debido a la presencia del exportador prometheus-kube-metrics) permite recuperar muchas métricas del sistema:
-
Consumo de CPU y memoria.
-
Actividad de entrada/salida (red y disco).
-
Estado de los espacios en disco.
Además de estos elementos básicos, es posible escanear métricas personalizadas disponibles a nivel de contenedor utilizando objetos de tipo ServiceMonitor.
d. Declarar los puntos de recopilación en Kubernetes
En el momento de su despliegue, el chart de Prometheus creó reglas de supervisión.
Consulte la lista de objetos de supervisión del espacio de nombres monitoring:
$ kubectl -n monitoring get servicemonitor
A continuación, se muestra la lista de reglas de supervisión:...
Panel de control de Grafana
1. Presentación de Grafana
Grafana es un software de visualización de datos. Este software acepta muchas fuentes de datos (datasources):
-
Bases de datos temporales (InfluxDB, Graphite, Prometheus).
-
Motores de base de datos NoSQL (Elasticsearch).
-
Motores de base de datos SQL clásicos (Postgres, MySQL).
Estas fuentes de datos se pueden distribuir en paneles de control (dashboards).
2. Configurar Grafana
a. Conexión al motor Prometheus
Para conectarse al motor Prometheus, Grafana se basa en un objeto datasource. Este último se configura utilizando un objeto configmap, que lleva la etiqueta grafana_datasource=1.
Recupere los objetos configmap que tienen esta etiqueta en el espacio de nombres monitoring:
$ kubectl -n monitoring get configmap -l grafana_datasource=1
A continuación, se muestra el campo data del objeto presente por defecto en la instalación del chart del operador Prometheus:
data:
datasource.yaml: |-
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus-prometheus-oper-prometheus:9090/
access: proxy
isDefault: true
b. Definición de los paneles de control
De la misma manera que sucede con las fuentes de datos, los paneles...
Eliminación del chart de Prometheus
Al final del ejercicio, la eliminación de Prometheus se realiza en dos etapas:
-
Eliminando el chart Helm.
-
Eliminando recursos personalizados (CRD).
Elimine el chart con el siguiente comando:
$ helm delete prometheus
Seguidamente, elimine los recursos CRD usando la siguiente instrucción:
$ kubectl delete crd alertmanagerconfigs.monitoring.coreos.com \
alertmanagers.monitoring.coreos.com \
podmonitors.monitoring.coreos.com \
probes.monitoring.coreos.com \
prometheuses.monitoring.coreos.com \
prometheusrules.monitoring.coreos.com \
servicemonitors.monitoring.coreos.com \
thanosrulers.monitoring.coreos.com...