¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Kubernetes
  3. Supervisión con Prometheus
Extrait - Kubernetes Administre la plataforma de despliegue de sus aplicaciones en contenedores
Extractos del libro
Kubernetes Administre la plataforma de despliegue de sus aplicaciones en contenedores
5 opiniones
Volver a la página de compra del libro

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

images/18EP01.png

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.

images/18EP02.png

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

images/18EP03.png

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.

images/18EP04.png

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...