Docker para monitorización Grafana + Prometheus + Node_exporter + Cadvisor

Tiempo de lectura: 4 minutos

Hola, hoy os voy a enseñar a crear un Docker para monitorización del servidor y de los contenedores Docker que tengamos desplegados.

Para ello vamos a utilizar:

Grafana:

Grafana es una plataforma de análisis y visualización de datos de código abierto. Permite conectar y visualizar datos de diferentes fuentes en una única interfaz gráfica de usuario.

Grafana es muy popular entre los equipos de operaciones de tecnología (devops) porque les permite monitorear y analizar el rendimiento de sus aplicaciones y sistemas. Los usuarios pueden crear paneles de control personalizados que muestren información importante en tiempo real, como el uso de la CPU, la memoria, la latencia de red, etc.

Grafana es compatible con una amplia variedad de fuentes de datos, incluidas bases de datos SQL y NoSQL, servicios en la nube, herramientas de monitoreo, sistemas de registro y más. Además, cuenta con una gran cantidad de plugins y herramientas de integración que permiten extender sus capacidades y personalizar su uso según las necesidades específicas de cada usuario.

Prometheus:

Prometheus es un sistema de monitoreo y alerta de código abierto diseñado para monitorear servicios y aplicaciones en entornos de nube y contenedores. Fue desarrollado por SoundCloud y se convirtió en un proyecto de la Cloud Native Computing Foundation (CNCF) en 2016.

Prometheus recopila métricas de diferentes fuentes, como servicios y aplicaciones en ejecución, y almacena los datos en una base de datos de series temporales. Luego, se puede usar para visualizar y analizar los datos recopilados y establecer alertas en caso de que ocurra alguna condición anómala.

Prometheus es especialmente adecuado para entornos de nube y contenedores porque está diseñado para ser altamente escalable y para trabajar con sistemas distribuidos. También cuenta con una gran cantidad de bibliotecas y herramientas de integración que facilitan la recopilación de métricas de diferentes fuentes.

Prometheus se ha convertido en una herramienta de monitoreo muy popular en la comunidad de DevOps y se utiliza ampliamente en entornos de nube y contenedores.

Node Exporter:

Node_exporter es un componente de Prometheus que se utiliza para recopilar métricas del sistema operativo y los servicios en un host. Es una herramienta de código abierto que se ejecuta como un servicio en segundo plano y expone métricas en un formato que puede ser recopilado por Prometheus.

Node_exporter recopila información sobre el uso de CPU, memoria, disco, red y otros recursos del sistema operativo en el que se está ejecutando. También recopila información sobre los servicios que se ejecutan en el host, como el número de solicitudes HTTP por segundo, el tiempo de respuesta y otras estadísticas relevantes.

Una vez que se han recopilado las métricas de Node_exporter, se pueden visualizar y analizar en Grafana, la herramienta de visualización de Prometheus. Esto permite a los usuarios monitorear y comprender el rendimiento de los sistemas y servicios en tiempo real, lo que les permite tomar decisiones informadas sobre la capacidad y la optimización de recursos.

Node_exporter es una herramienta muy útil para los equipos de operaciones de tecnología (devops) que necesitan monitorear el rendimiento de sus sistemas y servicios en entornos de nube y contenedores.

cAdvisor:

cAdvisor (Container Advisor) es una herramienta de monitorización de contenedores de código abierto desarrollada por Google. cAdvisor se ejecuta como un demonio en cada host de contenedor y recopila información sobre los recursos de contenedor, como el uso de CPU, memoria, red y almacenamiento.

cAdvisor también proporciona información sobre los recursos del sistema operativo del host, como la carga de la CPU, la memoria y el uso del disco. Utilizando esta información, cAdvisor es capaz de proporcionar una visión detallada de los recursos utilizados por los contenedores y el rendimiento general del sistema.

cAdvisor puede ser utilizado en combinación con otras herramientas de monitorización, como Prometheus y Grafana, para visualizar y analizar los datos recopilados. Además, cAdvisor también puede generar alertas para detectar condiciones anómalas en el uso de los recursos de los contenedores.

En resumen, cAdvisor es una herramienta útil para los equipos de operaciones de tecnología (devops) que necesitan supervisar el rendimiento de los contenedores en tiempo real y tomar medidas para optimizar el uso de los recursos y garantizar la disponibilidad del servicio.

Para juntar todos estos servicios vamos a utilizar el siguiente contenedor docker-compose.yml

version: "3.1"

services:
  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: unless-stopped
    volumes:
      - ./config/grafana/data:/var/lib/grafana
    ports:
      - 3000:3000
    networks:
      - docker-network

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    restart: unless-stopped
    volumes:
      - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./config/prometheus/data:/prometheus
    ports:
      - 9090:9090
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=1y'
      - '--web.enable-lifecycle'
    networks:
      - docker-network
  node_exporter:
    image: quay.io/prometheus/node-exporter:latest
    container_name: node_exporter
    restart: unless-stopped
    ports:
      - 9100:9100
    command:
      - '--path.rootfs=/host'
    pid: host
    volumes:
      - './config/node_exporter:/host:ro,rslave'
    networks:
      - docker-network

  cadvisor:
      image: gcr.io/cadvisor/cadvisor:v0.47.0
      container_name: cadvisor
      restart: unless-stopped
      expose:
        - 8080
      volumes:
        - /:/rootfs:ro
        - /var/run:/var/run:ro
        - /sys:/sys:ro
        - /var/lib/docker/:/var/lib/docker:ro
      
      networks:
        - docker-network

networks:
  docker-network:
    driver: bridge
    external: true

Primero levanta un Grafana por el puerto 3000 (recomiendo no exponer el puerto públicamente, sino utilizar un proxy (https://devcodelight.com/certificados-ssl-lets-encrypt-en-docker-usando-nginx-proxy-manager/)

Después levanta Prometheus para interpretar los datos de node_exporter y cadvisor.

Para la configuración de Prometheus tenemos que utilizar este archivo

 - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml

Con este contenido, prometheus.yml:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['prometheus:9090']
    
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['cadvisor:8080']

  - job_name: 'node_exporter'
    static_configs:
    - targets: ['node_exporter:9100']  

Una vez levantado, podemos configurar los dashboard usando estos panel id (https://grafana.com/grafana/dashboards/)

Panel idDescripción
1860Node exporter: muestra información de la CPU y sistema
13946Cadvisor: muestra información de contenedores Docker

Antes tendremos que añadir prometheus en orígenes de datos:

Con la configuración http://prometheus:9090

2 comentarios en «Docker para monitorización Grafana + Prometheus + Node_exporter + Cadvisor»

Deja un comentario