Introducción a Prometheus

Prometheus es un sistema de monitoreo y alerta de código abierto ampliamente utilizado para la supervisión de infraestructuras y aplicaciones. Fue desarrollado originalmente en SoundCloud y ha ganado una gran adopción en la comunidad de código abierto. Prometheus es especialmente adecuado para entornos dinámicos de microservicios debido a su modelo de datos multidimensional. Esta guía detalla cómo instalar y configurar Prometheus en Huawei Cloud, incluyendo alertas, visualización, seguridad y mejores prácticas.

Características Clave de Prometheus

  • Modelo de Datos Multidimensional: Prometheus recopila métricas como series temporales, identificadas por un nombre de métrica y un conjunto de pares clave-valor.
  • Lenguaje de Consulta PromQL: Prometheus proporciona un lenguaje de consulta flexible llamado PromQL que permite a los usuarios seleccionar y agregar series temporales en tiempo real.
  • Monitoreo y Alertas: Prometheus no solo recopila métricas, sino que también puede desencadenar alertas si alguna de las métricas cumple ciertas condiciones.
  • Integración: Se integra bien con otros sistemas como Grafana para la visualización de datos.

¿Prometheus utiliza IA o Machine Learning?

Prometheus en sí no incorpora inteligencia artificial (IA) ni machine learning (ML) en su núcleo. Es principalmente un sistema de monitoreo basado en reglas. Sin embargo, los datos recopilados por Prometheus pueden ser utilizados por otros sistemas que sí incorporan IA o ML para análisis predictivo, detección de anomalías, y más.

Prerrequisitos

  • Cuenta activa en Huawei Cloud.
  • Conocimientos básicos de Linux, SSH y YAML.
  • Acceso a una terminal y permisos para crear recursos en Huawei Cloud.

Instalación de Prometheus en Huawei Cloud

Paso 1: Crear una Instancia ECS en Huawei Cloud

  1. Iniciar Sesión: Accede a tu cuenta en Huawei Cloud.

  2. Crear ECS: Dirígete al servicio Elastic Cloud Server (ECS) y crea una instancia:

    • Sistema Operativo: Ubuntu 20.04 o superior (64 bits).
    • Especificaciones: Mínimo 2 vCPUs, 4 GB RAM.
    • Disco: Al menos 40 GB para almacenamiento de métricas.
  3. Configurar Red:

    • Asigna una IP pública o usa una VPC.
    • Crea un grupo de seguridad con las siguientes reglas:
      • Puerto 22 (SSH): Restringido a tu IP.
      • Puerto 9090 (Prometheus): Acceso desde IPs autorizadas.
      • Puerto 9093 (Alertmanager): Acceso desde IPs autorizadas.
      • Puerto 3000 (Grafana, opcional): Acceso desde IPs autorizadas.

Ejemplo de Reglas de Grupo de Seguridad

Protocolo Puerto Dirección IP de Origen Acción
TCP 22 Permitir
TCP 9090 0.0.0.0/0 (o IPs específicas) Permitir
TCP 9093 0.0.0.0/0 (o IPs específicas) Permitir
TCP 3000 0.0.0.0/0 (o IPs específicas) Permitir

Paso 2: Instalar Prometheus en la Instancia ECS

  1. Acceder a la Instancia: Usa SSH para conectarte.

    ssh ubuntu@<dirección-ip-de-la-instancia>
    
  2. Actualizar el Sistema:

    sudo apt update && sudo apt upgrade -y
    
  3. Descargar Prometheus:

    wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
    
  4. Extraer y Configurar:

    tar xvfz prometheus-2.47.0.linux-amd64.tar.gz
    mv prometheus-2.47.0.linux-amd64 /opt/prometheus
    cd /opt/prometheus
    
  5. Configurar Prometheus: Crea o edita prometheus.yml:

    global:
      scrape_interval: 15s
      evaluation_interval: 15s
      external_labels:
        monitor: 'huawei-cloud'
    
    rule_files:
      - 'alert.rules'
    
    alerting:
      alertmanagers:
        - static_configs:
            - targets: ['localhost:9093']
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      - job_name: 'node'
        static_configs:
          - targets: ['localhost:9100']
    
  6. Crear Archivo de Reglas de Alertas: Crea alert.rules:

    groups:
    - name: example
      rules:
      - alert: HighErrorRate
        expr: job:request_errors:rate5m > 0.05
        for: 10m
        labels:
          severity: page
        annotations:
          summary: "High error rate on {{ $labels.instance }}"
          description: "Error rate is {{ $value }} on {{ $labels.instance }}"
      - alert: InstanceDown
        expr: up == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Instance {{ $labels.instance }} down"
          description: "{{ $labels.instance }} has been down for more than 5 minutes."
    
  7. Iniciar Prometheus:

    ./prometheus --config.file=prometheus.yml --storage.tsdb.path=/opt/prometheus/data &
    
  8. Configurar como Servicio (opcional, para ejecución persistente):

    sudo nano /etc/systemd/system/prometheus.service
    

    Añade:

    [Unit]
    Description=Prometheus Monitoring
    After=network.target
    
    [Service]
    User=ubuntu
    ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    Activa el servicio:

    sudo systemctl daemon-reload
    sudo systemctl start prometheus
    sudo systemctl enable prometheus
    

Paso 3: Verificar la Instalación de Prometheus

  1. Accede a la interfaz web: http://<ip-instancia>:9090.

  2. En la pestaña Graph, ejecuta la consulta up. Deberías ver:

    • up{instance="localhost:9090"} = 1 (Prometheus activo).
  3. Explora métricas como prometheus_build_info para confirmar la versión.

  4. Si no carga, verifica:

    • Que el grupo de seguridad permite el puerto 9090.
    • Que Prometheus está corriendo:
      ps aux | grep prometheus
      

Paso 4: Configurar Alertmanager

  1. Descargar Alertmanager:

    wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
    tar xvfz alertmanager-0.25.0.linux-amd64.tar.gz
    mv alertmanager-0.25.0.linux-amd64 /opt/alertmanager
    cd /opt/alertmanager
    
  2. Configurar Alertmanager: Crea simple.yml:

    global:
      slack_api_url: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
    
    route:
      receiver: 'slack'
      group_by: ['alertname', 'instance']
    
    receivers:
      - name: 'slack'
        slack_configs:
          - channel: '#alerts'
            send_resolved: true
            title: '{{ .CommonAnnotations.summary }}'
            text: '{{ .CommonAnnotations.description }}'
    

    Nota: Reemplaza la URL de Slack con una válida o configura otro receptor (email, PagerDuty).

  3. Iniciar Alertmanager:

    ./alertmanager --config.file=simple.yml &
    
  4. Configurar como Servicio (opcional):

    sudo nano /etc/systemd/system/alertmanager.service
    

    Añade:

    [Unit]
    Description=Alertmanager for Prometheus
    After=network.target
    
    [Service]
    User=ubuntu
    ExecStart=/opt/alertmanager/alertmanager --config.file=/opt/alertmanager/simple.yml
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    Activa el servicio:

    sudo systemctl daemon-reload
    sudo systemctl start alertmanager
    sudo systemctl enable alertmanager
    

Paso 5: Instalar Node Exporter para Monitoreo del Sistema

  1. Descargar Node Exporter:

    wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
    tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
    mv node_exporter-1.6.1.linux-amd64 /opt/node_exporter
    cd /opt/node_exporter
    
  2. Iniciar Node Exporter:

    ./node_exporter &
    
  3. Configurar como Servicio:

    sudo nano /etc/systemd/system/node_exporter.service
    

    Añade:

    [Unit]
    Description=Node Exporter
    After=network.target
    
    [Service]
    User=ubuntu
    ExecStart=/opt/node_exporter/node_exporter
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    Activa el servicio:

    sudo systemctl daemon-reload
    sudo systemctl start node_exporter
    sudo systemctl enable node_exporter
    
  4. Verifica en http://<ip-instancia>:9100/metrics que las métricas estén disponibles.

Paso 6: Integrar con Grafana

  1. Instalar Grafana:

    wget https://dl.grafana.com/oss/release/grafana-10.0.3.linux-amd64.tar.gz
    tar xvfz grafana-10.0.3.linux-amd64.tar.gz
    mv grafana-10.0.3 /opt/grafana
    cd /opt/grafana
    
  2. Iniciar Grafana:

    ./bin/grafana-server &
    
  3. Configurar como Servicio:

    sudo nano /etc/systemd/system/grafana.service
    

    Añade:

    [Unit]
    Description=Grafana
    After=network.target
    
    [Service]
    User=ubuntu
    ExecStart=/opt/grafana/bin/grafana-server
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    Activa el servicio:

    sudo systemctl daemon-reload
    sudo systemctl start grafana
    sudo systemctl enable grafana
    
  4. Configurar Grafana:

    • Accede a http://<ip-instancia>:3000 (usuario: admin, contraseña: admin).
    • Añade Prometheus como fuente de datos:
      • URL: http://localhost:9090.
      • Tipo: Prometheus.
    • Importa un dashboard (por ejemplo, ID 1860 para Node Exporter).
  5. Explorar Métricas:

    • Crea un panel con la consulta node_cpu_seconds_total para visualizar el uso de CPU.

Paso 7: Configurar Persistencia de Datos

  1. Crear un Disco en Huawei Cloud:

    • Ve a "Elastic Volume Service (EVS)" y crea un disco de 100 GB.
    • Adjunta el disco a tu instancia ECS.
  2. Montar el Disco:

    sudo mkfs.ext4 /dev/sdX
    sudo mkdir /prometheus-data
    sudo mount /dev/sdX /prometheus-data
    sudo chown ubuntu:ubuntu /prometheus-data
    

    Nota: Reemplaza /dev/sdX con el identificador del disco.

  3. Actualizar Prometheus:

    • Modifica el servicio para usar el nuevo almacenamiento:

      sudo nano /etc/systemd/system/prometheus.service
      
    • Actualiza ExecStart:

      ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/prometheus-data
      
    • Reinicia:

      sudo systemctl daemon-reload
      sudo systemctl restart prometheus
      
  4. Configurar Retención:

    • Añade a prometheus.yml:
      global:
        scrape_interval: 15s
        evaluation_interval: 15s
        tsdb:
          retention: 30d
      

Paso 8: Mejores Prácticas y Mantenimiento

  1. Seguridad:

    • Restringe el acceso a los puertos 9090, 9093 y 3000.
    • Usa HTTPS con un proxy inverso como Nginx.
    • Implementa autenticación en Grafana y Prometheus.
  2. Actualizaciones:

    • Revisa regularmente nuevas versiones de Prometheus, Alertmanager, Node Exporter y Grafana.
    • Ejemplo para actualizar Prometheus:
      wget <nueva-versión-url>
      tar xvfz prometheus-*.tar.gz
      mv prometheus-<nueva-versión> /opt/prometheus
      sudo systemctl stop prometheus
      sudo systemctl start prometheus
      
  3. Alta Disponibilidad (opcional):

    • Configura múltiples instancias de Prometheus con almacenamiento remoto (por ejemplo, Thanos).
    • Usa balanceadores de carga en Huawei Cloud.
  4. Monitoreo de Prometheus:

    • Añade alertas para métricas internas como prometheus_tsdb_wal_corruption_errors_total.

Conclusión

Prometheus es una herramienta poderosa para el monitoreo y las alertas en entornos de nube como Huawei Cloud. Esta guía cubre desde la configuración inicial hasta la integración con Grafana, notificaciones en Alertmanager, persistencia de datos y mejores prácticas. Con esta configuración, puedes supervisar instancias ECS, aplicaciones y recibir alertas en tiempo real, todo mientras mantienes un entorno seguro y escalable.

Citas