Configurar Prometheus y Grafana en Docker local

En este manual explicamos como instalar Prometheus y Grafana en tu PC.


En la primera parte explicamos cómo levantar ambos servicios con docker de forma sencilla

Al final del tutorial explicamos cómo añadir persistencia a los servicios utilizando docker-compose, de tal manera que si reiniciamos los contenedores, los dashboards que vayamos generando no se eliminarán.

0 - Entorno

  • Hardware: MacBook Pro (13 pulgadas, 2019, cuatro puertos Thunderbolt 3)
  • Software preinstalado: Docker for Mac

En este manual supondremos que queremos monitorizar una aplicación que está exponiendo métricas de Prometheus en algún puerto vía HTTP, y que o bien está ejecutándose en localhost o en un servidor remoto.


1 - Comprueba que tu aplicación expone métricas adecuadamente

Antes de instalar Prometheus y Grafana, nos aseguraremos de que nuestra aplicación está exponiendo las métricas correctamente. 

En nuestro caso, tenemos una aplicación exponiéndolas en localhost:10087. De tal manera que los ficheros de configuración y comandos usados en este tutorial harán referencia a esta IP y puerto.

En el browser podemos verificar que todo es correcto, veremos algo así:

Si no ves algo muy similar a la imagen anterior, tu aplicación tiene algún problema.


2 - Levanta Prometheus en docker

Con Docker levantado en tu pc, descárgate la imagen siguiente imagen de Prometheus:

docker pull prom/prometheus

Puedes comprobar que tienes la imagen con el siguiente comando:

docker image ls

Ahora escribe en algún directorio que te guste un fichero llamado 'prometheus.yml', con el siguiente contenido:

global:
  scrape_interval: 15s
  evaluation_interval: 15s
rule_files:
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['127.0.0.1:10087']

Colocaremos el fichero en la siguiente ruta:

/Users/Yo/Desktop/prometheus/prometheus.yml

Después podremos levantar el contenedor apuntando al fichero, que será mapeado al directorio /etc/prometheus del contenedor, el comando sería:

docker run -d --name prometheus -p 9090:9090 -p 10087:10087 -v /Users/Yo/Desktop/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml

En este momento deberíamos poder acceder a la web app Prometheus en local:


3 - Levanta Grafana en docker

Ahora vamos a levantar Grafana, y a conectarlo con el Prometheus previamente levantado.

docker run -d --name grafana -p 3000:3000 grafana/grafana

Ahora podremos abrir Grafana en local con el usuario/password: admin/admin


4 - Pon ambos contenedores en la misma red

Para que Grafana pueda conectarse a Prometheus, debes asegurarte de que ambos contenedores trabajan en la misma docker network, ya que el contenedor de Grafana intentará conectarse al contenedor de Prometheus:

docker network create myNetwork
docker network connect myNetwork prometheus
docker network connect myNetwork grafana


5 - Añade tu Datasource y crea un Dashboard

En Grafana podremos añadir nuestro primer Datasource pinchando en "Add datasource" y seleccionando como origen: 

        http://localhost:9090

Y muy importante, la opción Access debe estar marcada a 'Browser' para no recibir un error "Bad Gateway", como se muestra en la siguiente imagen:


Y ahora ya puedes ir a la sección de Dashboards y crear uno conectando contra este Data source!



Y aquí termina nuestro tutorial. 

6 - Otras Mejoras

Crear un fichero Docker Compose con persistencia

Si queremos que una vez apaguemos docker, los siguientes datos persistan:
  1. Grafana guarde en disco los dashboards y datasources creados.
  2. Prometheus almacene el histórico de métricas.
usando el comando:

docker-compose up

podrás levantar los dos servicios con persistencia, en el mismo directorio donde vayas a lanzar el comando anterior, asegúrate de tener creado el siguiente fichero 'docker-compose.yml' con el siguiente contenido (¡recuerda cambiar las rutas!):

services:
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
      - "10087:10087"
    volumes:
      - /Users/Yo/Desktop/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    command: --config.file=/etc/prometheus/prometheus.yml
  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    volumes:
      - /Users/Yo/Desktop/prometheus/graf_data:/var/lib/grafana
    links:
      - "prometheus"




Comentarios