¿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.