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: