Introducción
Prometheus es una herramienta de monitoreo y alerta de código abierto diseñada originalmente por SoundCloud. Es especialmente popular en el ecosistema de Kubernetes debido a su capacidad para recopilar métricas de aplicaciones y servicios, y su integración con Kubernetes. En esta sección, aprenderás cómo configurar y utilizar Prometheus para monitorear un clúster de Kubernetes.
Conceptos Clave
Antes de sumergirnos en la configuración de Prometheus, es importante entender algunos conceptos clave:
- Métricas: Datos cuantitativos que describen el estado y el rendimiento de un sistema.
- Scraping: El proceso de recopilar métricas de los endpoints de los servicios.
- Alertas: Notificaciones generadas cuando las métricas cumplen ciertas condiciones predefinidas.
- Exportadores: Componentes que exponen métricas en un formato que Prometheus puede recopilar.
Instalación de Prometheus en Kubernetes
Paso 1: Configuración del Namespace
Primero, crearemos un namespace dedicado para Prometheus:
Paso 2: Despliegue de Prometheus usando Helm
Helm es una herramienta de gestión de paquetes para Kubernetes que facilita la instalación de aplicaciones complejas. Vamos a usar Helm para instalar Prometheus.
-
Instalar Helm (si no lo tienes instalado):
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
-
Agregar el repositorio de Prometheus:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update
-
Instalar Prometheus:
helm install prometheus prometheus-community/prometheus --namespace monitoring
Paso 3: Verificar la Instalación
Para verificar que Prometheus se ha instalado correctamente, puedes listar los pods en el namespace monitoring
:
Deberías ver varios pods en ejecución, incluyendo prometheus-server
.
Acceso a la Interfaz de Prometheus
Para acceder a la interfaz web de Prometheus, puedes usar un port-forward:
Luego, abre tu navegador y navega a http://localhost:9090
.
Configuración de Scraping
Prometheus recopila métricas mediante el scraping de endpoints HTTP. La configuración de scraping se define en el archivo prometheus.yml
. Aquí hay un ejemplo básico de configuración:
scrape_configs: - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - target_label: __address__ replacement: kubernetes.default.svc:443 action: replace - source_labels: [__meta_kubernetes_node_name] regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/${1}/proxy/metrics
Este ejemplo configura Prometheus para recopilar métricas de los nodos de Kubernetes.
Alertas con Prometheus
Prometheus incluye un componente llamado Alertmanager que gestiona las alertas. Aquí hay un ejemplo de configuración de alertas:
Paso 1: Configuración de Alertmanager
Crea un archivo alertmanager.yml
con la siguiente configuración básica:
global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: 'slack-notifications' receivers: - name: 'slack-notifications' slack_configs: - api_url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX' channel: '#alerts'
Paso 2: Configuración de Reglas de Alerta
Crea un archivo alert-rules.yml
con una regla de alerta básica:
groups: - name: example rules: - alert: HighMemoryUsage expr: node_memory_Active_bytes / node_memory_MemTotal_bytes * 100 > 80 for: 5m labels: severity: warning annotations: summary: "High memory usage detected" description: "Memory usage is above 80% for more than 5 minutes."
Paso 3: Aplicar la Configuración
Actualiza el archivo prometheus.yml
para incluir la configuración de Alertmanager y las reglas de alerta:
alerting: alertmanagers: - static_configs: - targets: - alertmanager.monitoring.svc:9093 rule_files: - "alert-rules.yml"
Ejercicio Práctico
Ejercicio 1: Configurar un Exportador de Node
-
Instalar el Exportador de Node:
helm install node-exporter prometheus-community/prometheus-node-exporter --namespace monitoring
-
Actualizar la Configuración de Scraping:
Añade la siguiente configuración a
prometheus.yml
:scrape_configs: - job_name: 'node-exporter' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_label_app] action: keep regex: node-exporter
-
Verificar la Configuración:
Accede a la interfaz de Prometheus y verifica que las métricas del exportador de node están siendo recopiladas.
Solución
Si has seguido los pasos correctamente, deberías ver las métricas del exportador de node en la interfaz de Prometheus bajo el job node-exporter
.
Conclusión
En esta sección, hemos cubierto los conceptos básicos de Prometheus y cómo configurarlo para monitorear un clúster de Kubernetes. También hemos visto cómo configurar alertas y cómo instalar y configurar un exportador de node. Con esta base, estarás bien preparado para profundizar en el monitoreo avanzado y la creación de alertas personalizadas en tu entorno de Kubernetes.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster