Monitorizar con Grafana y Prometheus

Para poder crear un sistema de monitorización con Grafana, Prometheus y node-exporter necesitamos, en este caso, la creacción de 3 contenedores con docker. Para ello crearemos el fichero docker-composer.yml con el siguiente contenido:

--
version: '3.3'

services:
prometheus:
image: bitnami/prometheus:2.39.1
container_name: prometheus
volumes:
- ./data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- data-prometheus:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
ports:
- 9090:9090
networks:
- monitor
# --
node-exporter:
image: bitnami/node-exporter:1.4.0
container_name: node-exporter
restart: unless-stopped
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)($$|/)'
ports:
- 9100:9100
networks:
- monitor
 # --
  grafana:
    image: grafana/grafana:9.2.2
    container_name: grafana-monitor
    volumes:
      - data-grafana:/var/lib/grafana
      - ./data/grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    ports:
      - 3000:3000
    networks:
      - monitor
networks:
  monitor:
    driver: bridge

volumes:
  data-prometheus: {}
  data-grafana: {}

Una vez creado ejecutamos el comando:

docker-compose up -d

Ahora xa tendremos los 3 contenedores creados y funcionando. Podemos saberlo ejecutando el comando «docker ps -a»:

Antes de proceder a crear paneles, tendremos que configurar el prometheus para indicarle donde estan nuestros servicios de los cuales obtener la información. En el fichero /etc/prometheus/prometheus.yml pondremos lo siguiente:

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'node'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9100']

Ahora, si accedemos a la IP:3000 podremos acceder a grafana desde donde podemos crear los paneles que queramos. Para ejemplificar este caso he hecho uno sencillo: