Herramientas de usuario

Herramientas del sitio


grafana_prometheus

¡Esta es una revisión vieja del documento!


Monitoreo

Como servicio de monitoreo implementamos Grafana y Prometheus, dos herramientas complementarias que permiten recopilar, almacenar y visualizar métricas del servidor y de los servicios que lo componen. Prometheus actúa como base de datos de series temporales, recolectando información desde distintos endpoints de métricas (exporters). Grafana, por su parte, ofrece un entorno gráfico avanzado para visualizar esos datos mediante paneles personalizados, facilitando la supervisión del rendimiento, disponibilidad y estado general del sistema.


docker-compose.yml

El archivo docker-compose.yml se compone de la siguiente manera:

# Creamos los volumenes para guardar datos persistentes y que no se pierdan al eliminar la máquina.
volumes:
  prometheus-data: {} # Guarda metricas
  grafana-data: {}
# Conectamos los contenedores en la misma red
networks:
  net_backend:
    external: true
 
# Declaramos los sevicios
services:
############################## GRAFANA ##############################
  grafana:
    image: grafana/grafana:12.1.1 # Utilizo la version 12.1.1
    container_name: grafana # Nombro al contenedor
    restart: unless-stopped
    volumes:
      - ./config/grafana/datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml:ro # Para que linkee automaticamente el prometheus a grafana
      - grafana-data:/var/lib/grafana
    ports:
      - '3000:3000' # Grafana utiliza el puerto 3000
    env_file:
      - path: ./config/grafana.env # Archivo que contiene las variables de entorno
    depends_on: # Va a levantar cuando levante prometheus
      - prometheus
    networks:
      - net_backend
 
############################## PROMETHEUS ##############################
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus # Nombro al contenedor
    restart: unless-stopped # Si se reinicie, salvo cuando lo detengo
    volumes:
    - ./config/prometheus.yaml:/etc/prometheus/prometheus.yml:ro # Pone el archivo prometheus.yaml en esa ruta para que tenga esa configuración
    - prometheus-data:/prometheus # Asigno espacio al volumen dentro de docker
    command:
      - '--config.file=/etc/prometheus/prometheus.yml' # Utilizo esta configuracion
      - '--storage.tsdb.path=/prometheus' # Persistir los datos en donde prometheus crea su DB
      - '--storage.tsdb.retention.time=1y' # Guardo la info por 1 año
    depends_on: # Va a levantar cuando levante node-exporter
      - node-exporter
    networks:
      - net_backend
    ports:
      - "9090:9090"
 
 
############################## NODE - EXPORTER ##############################
  node-exporter: # No depende de nadie asi que levanta primero
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    user: "0"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
    networks:
      - net_backend
 
############################## CADVISOR ##############################
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    networks:
      - net_backend

Variables de entorno

Las variables de entorno definidas en el archivo .env son:

GF_SECURITY_ADMIN_USER = <USER>
GF_SECURITY_ADMIN_PASSWORD = <PASSWORD>
GF_SERVER_DOMAIN = grafana.TUDOMINIO.com.ar

Estas variables permiten establecer las credenciales iniciales de acceso a Grafana.


Datasources

Como vemos, los *datasources* se vinculan con el archivo datasources.yml, que contiene la configuración de Prometheus:

apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true

Este archivo define la conexión principal de Grafana hacia Prometheus, de modo que los paneles puedan visualizar las métricas recolectadas automáticamente.


Endpoints Prometheus

Los endpoints de los cuales Prometheus obtiene métricas se encuentran declarados en el archivo prometheus.yml de la siguiente manera:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    scrape_interval: 1m
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node"
    static_configs:
      - targets: ["node-exporter:9100"]

  - job_name: "cadvisor"
    static_configs:
      - targets: ["cadvisor:8080"]

  - job_name: "nextcloud"
    static_configs:
      - targets: ["nextcloud-exporter:9205"]

  - job_name: "homeassistant"
    metrics_path: '/api/prometheus'
    scheme: 'http'
    bearer_token: "TOKEN"
    static_configs:
      - targets: ["<IP_PRIVADA>:8123"]

  - job_name: "postgres"
    static_configs:
      - targets: ["postgres_exporter:9187"]

Targets configurados

Los siguientes son los *targets* monitoreados por Prometheus:

  • Prometheus: se scrapea a sí mismo para monitorear su propio estado y rendimiento, asegurando visibilidad completa del sistema de monitoreo.
  • Node-exporter: recopila métricas del host donde se ejecutan los contenedores (CPU, memoria, disco, red).
  • cAdvisor: monitoriza los contenedores Docker del host, proporcionando información de consumo y estado.
  • Nextcloud: a través del nextcloud-exporter, expone métricas específicas como usuarios activos y uso de almacenamiento.
  • Home Assistant: se ejecuta en network_mode: host y expone métricas en /api/prometheus, las cuales se recolectan mediante token de acceso.
  • Postgres: mediante postgres-exporter, expone métricas de base de datos como conexiones, consultas activas y tamaño de tablas.
grafana_prometheus.1760146993.txt.gz · Última modificación: por romix