
Desplegando Prometheus & Grafana
¡Despertamos de la hibernación! Vamos a empezar si os parece bien a tod@s con este documento que usaremos como base en futuros posts. Había pensado que este año vamos a hacer hincapié en las métricas y logs (a parte de lo de siempre), así que creo que este documento de cómo desplegar rápidamente Prometheus y Grafana puede venir bien.
Antes de empezar, pues eso, que se me hicieron largas las vacaciones de navidad… me gusta a mí esto de los festivos y los puentes =) Pero bueno, indicaros que ya he preparado la base de lo que iremos viendo este año en el blog, espero que os sea interesante; será como siempre, un poco de todo, siempre que se pueda 2 posts semanales, pero poniendo el foco en cosas que todavía no se han desarrollado mucho en el blog, cosas que quizá son fáciles de implementar y aportan mucho a darle visibilidad al entorno. Sugerencias abiertas en mi mail. Ah y también le podéis hacer SPAM a Fede Cinalli para volver con el Podcast 🙂
Empezamos! Lo dicho, hoy un primer documento inicial, donde vamos a poder ver lo sencillo que resulta desplegar Prometheus y Grafana. Ambas soluciones entiendo son conocidas, Prometheus es open source y nos permitirá almacenar distintas métricas para visualizarlas elegantemente con Grafana. La idea es montar un sistema completo de telemetría que nos permita conocer los estados de los sistemas que consideremos core de negocio.
En los ejemplos que iremos viendo, usaremos siempre contenedores de Docker (por todas las ventajas que nos puedan dar a la hora de instalar, actualizar, gestionar…), así que tanto Prometheus como Grafana irán en sus propios contenedores. Habitualmente los posts los baso en Ubuntu Server, donde a parte de la configuración base, tenéis que tener instalado Docker.
Desplegando Prometheus
Para desplegar el primer contenedor, si os parece bien, crearemos una carpeta, dentro de ella dejaremos el docker-compose.yaml con la definición del contenedor que vamos a desplegar, y ya luego, lo desplegaremos.
cd mkdir prometheus cd prometheus mkdir prometheus
Creamos y editamos el contenedor con ‘nano docker-compose.yaml’
version: '3.8' services: prometheus: image: prom/prometheus container_name: prometheus restart: unless-stopped command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.retention.time=15d' volumes: - ./prometheus:/etc/prometheus - prom_data:/prometheus ports: - 9090:9090 networks: prometheus_default: volumes: prom_data: networks: prometheus_default: driver: bridge ipam: config: - subnet: XX.XX.XX.0/24 gateway: XX.XX.XX.1
Crearemos un contenedor que se llamará prometheus, basada en dicha imagen, que expondrá (por defecto) el puerto 9090tcp al que nos podremos conectar posteriormente. (En mi caso) le pasamos 2 comandos, uno para pasarle el fichero de configuración de Prometheus (prometheus.yml) y otro para indicarle que quiero una retención de 15 días (si queremos). Así como la red, particularmente me gusta asignar rangos, indicárselo, o omitir las 4 últimas líneas.
Y antes de arrancar el contenedor, debemos crear su fichero de configuración, para ello, simplemente ejecutamos ‘nano prometheus/prometheus.yml’ y lo definimos:
global: scrape_interval: 5s scrape_timeout: 5s evaluation_interval: 5s #scrape_configs: # - job_name: prometheus # honor_timestamps: true # scrape_interval: 15s # scrape_timeout: 10s # metrics_path: /metrics # scheme: http # static_configs: # - targets: # - localhost:9090
En mi caso, veréis que he comentado (#) que no me coja las métricas locales, del propio contenedor de Prometheus, no me interesan, pero para gustos, los colores 🙂 Si no tienes métricas con las que probar, lo descomentas.
Y ya sólo nos quedaría desplegar el contenedor, ejecutando:
sudo docker compose up -d
Una vez nos descargue la imagen de Prometheus, levantará el contenedor y nos podremos conectar a la GUI si queremos confirmar que ha ido todo bien (recordar, al 9090tcp). Recordar que si no os lleváis bien con los comandos de Docker, siempre tendremos a Portainer; pero vaya, en este caso si habéis seguido bien los pasos, el contenedor se habrá levantado, y si no, le miráis los logs ‘sudo docker logs prometheus -f’.
Desplegando Grafana
Igualmente que Prometheus, Grafana irá en otro contenedor de Docker, así de fácil y sencillo. Creamos una carpeta donde vamos a dejar el docker compose y luego lo desplegamos:
cd mkdir grafana cd grafana
Y creamos ahí con ‘nano docker-compose.yaml’ la definición del contenedor de Grafana que queremos:
services: grafana: image: grafana/grafana-oss container_name: grafana restart: unless-stopped ports: - '3000:3000' volumes: - ./grafana-storage:/var/lib/grafana networks: - grafana_default volumes: grafana-storage: {} networks: grafana_default: driver: bridge ipam: config: - subnet: XX.XX.XX.0/24 gateway: XX.XX.XX.1
Que se descargará la última imagen de Grafana Open Source, y lo publicará por el puerto 3000tcp.
Finalmente, desplegamos y arrancamos el contenedor con:
sudo docker compose up -d
Abrimos un navegador contra el puerto 3000tcp de la máquina Docker y tendremos ya Grafana corriendo. Entramos como admin / admin por defecto, y nos aseguraremos de cambiar el password.
Acabamos el documento creando el Data source en Grafana, que será el conector contra Prometheus, vamos a ‘Home’ > ‘Connections’ > ‘Data sources’ > ‘Add new data source’, y añadimos uno del tipo Prometheus. Le indicamos un nombre al data source e indicamos la URL de nuestro Prometheus.
A partir de ahora, ya podremos empezar a almacenar métricas en Prometheus, y visualizarlas desde Grafana, bien ya que hagamos nosotros mismos los Dashboards, o directamente los cojamos de la comunidad de Grafana 🙂
Esto es todo por hoy, empezamos con los pilares =) Espero que como siempre os vaya fenomenal, y que este tiempo nos haya servido para madurar un poco más! Os mando un abrazo, ¡cuidaros mucho!