¿Cómo monitorear mi servidor?

En esta ocasión, recomendaremos un conjunto de herramientas de monitoreo; estas son las mas utilizadas actualmente. Para esto tengamos en cuenta que despues de desplegar un servicio o una aplicación, debemos de saber todo lo que sucede en este mismo, pues si llegase a fallar por situaciones desconocidas, tenemos que estar informados y estar conscientes de que hay un error para posteriormente solucionarlo cuanto antes y asi evitar que los usuarios que consumen esta aplicación tengan dificultades para acceder a ella.

Para monitorear nuestros servicios utilizaremos Prometheus con Grafana, tambien utilizaremos Node Exporter y CAdvisor.

Prometheus es una base de series de tiempo y un sistema de monitoreo y alertas,

Grafana es la plataforma de análisis para métricas, que le permite consultar, visualizar, alertar y comprender los datos, sin importar dónde estén almacenadas. Le permite crear, explorar y compartir tableros con su equipo.

Node Exporter y CAdvisor nos servirán para obtener las métricas que queremos visualizar, Node Exporter nos expondrá las métricas con respecto a CPU, Memoria, Disco duro, etc del servidor, y CAdvisor nos dará las métricas de nuestros contenedores, los recursos que consumen, entre otros valores.

version: '3'

services:
  # monitoring linux host metrics
  node-exporter:
    image: prom/node-exporter:latest
    container_name: monitoring_node_exporter
    restart: unless-stopped
    ports:
      - 9100:9100

  # monitoring metrics for the running containers
  cadvisor:
    image: google/cadvisor:latest
    container_name: monitoring_cadvisor
    restart: unless-stopped
    ports:
    - '8080:8080'
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

  # event monitoring and alerting
  prometheus:
    image: prom/prometheus:latest
    container_name: monitoring_prometheus
    restart: unless-stopped
    ports:
      - '9090:9090'
    volumes:
      - ./prometheus/config:/etc/prometheus/
      - prometheus-data:/var/lib/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    links:
      - node-exporter:node-exporter
      - cadvisor:cadvisor

  # database for analytics & monitoring solution
  grafana:
    image: grafana/grafana:latest
    container_name: monitoring_grafana
    restart: unless-stopped
    user: "1000" # grafana needs permisions
    ports:
      - '3000:3000'
    volumes:
      - grafana-data:/var/lib/grafana
    links:
      - prometheus:prometheus
    depends_on: 
      - prometheus
      
volumes:
  grafana-data:
  prometheus-data:

Este será el docker-compose.yaml que nos servirá para levantar nuestro conjunto de contenedores los cuales nos ayudaran con el monitoreo de nuestro servidor y de los contenedores que se estén ejecutando dentro de este mismo.

Para practicidad podemos encontrar este repositorio en https://github.com/paulspartan14/prometheus-grafana

despues de analizar el docker-compose.yaml, vemos que en los volumenes hacemos referencia a la ruta 'prometheus/config' la cual nos brinda un archivo de configuración de prometheus.yml en el cual le indicaremos que servicios son los que vamos a configurar, en este caso seria el mismo prometheus, node-exporter y cadvisor, para esto aplicaremos la siguente configuración:

global:
  scrape_interval: 5s # By default, scrape targets every 15 seconds.
  external_labels:
    monitor: 'Monitoring'
scrape_configs:
  - job_name: 'prometheus' 
    static_configs: 
      - targets: ['localhost:9090']
  - job_name: 'node-exporter' 
    static_configs: 
      - targets: ['node-exporter:9100']
  - job_name: 'cAdvisor' 
    static_configs:
     - targets: ['cadvisor:8080']

despues ejecutaremos el comando "docker-compose up -d" el cual levantará nuestros servicios, despues de esto veremos que nos despliega diferentes contenedores, pero el que nos ayudará a visualizar las métricas será el contenedor que esta corriendo en el http://localhost:3000

despues de entrar y asignarle las credenciales correspondientes al prometheus y anclar grafana podemos utilizar el panel con el id "10566"

y posterior a esto nos devolverá una cómoda interfaz en la cual podemos ver nuestros servicios corriendo.