Saltar al contenido principal

Monitor

Introducción

Con tantos servidores y servicios, es necesario tener algo a mano para comprobar el estado de todos ellos.

Prometheus y Grafana son el conjunto ideal, uno para almacenar datos de otros lugares y hacer búsquedas sobre ellos, otro para mostrar los datos de forma más sencilla y enviar alertas si algo no está como se espera.

Además de estos, se utilizan exportadores para que Prometheus pueda recuperar las métricas.

Descarga

El fichero de despliegue se encuentra en Git.

git clone https://gitlab.com/ReiIzumi/swarm-project.git
cd swarm-project/05-Monitor

Preparación

Tanto Prometheus como Grafana requieren almacenar datos y configuración, así que se creará una carpeta compartida con GlusterFS en /mnt/monitor.

Ambos tienen permisos especiales:

mkdir /mnt/monitor/prometheus
mkdir /mnt/monitor/grafana
chown -R nobody:nogroup /mnt/monitor/
chown 472:0 /mnt/monitor/grafana

Node exporter

Cada servidor deberá tener instalado el node-exporter, aunque es posible ejecutarlo como contenedor, estos suelen tener limitaciones a la hora de leer el disco u otros, además necesitamos tenerlo en todos los servidores, incluido el de base de datos.

  1. Revisamos la última versión y la añadimos al enlace de descarga.
wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gz -O node_exporter.tar.gz
  1. Descomprimimos en el lugar de destino.
sudo tar -xvf node_exporter.tar.gz -C /usr/local/sbin/ --strip-components=1
  1. Creamos el servicio.
sudo vim /etc/systemd/system/nodeexporter.service
[Unit]
Description=NodeExporter
[Service]
TimeoutStartSec=0
ExecStart=/usr/local/sbin/node_exporter
[Install]
WantedBy=multi-user.target
  1. Iniciamos el servicio.
sudo systemctl daemon-reload
sudo systemctl enable nodeexporter
sudo systemctl start nodeexporter
  1. Accedemos a la URL para confirmar que funcione: http://swarm1.domain.intranet:9100/metrics

Despliegue

  1. Necesitamos los secrets de Grafana y también los de un usuario administrador en PostgreSQL para exportar las métricas.
  • grafana-admin-user
  • grafana-admin-password
  • postgres-admin-user
  • postgres-admin-password
  1. Creamos un config para la configuración de Prometheus, hay que actualizarlo según la URL de todos los node agents.
  • monitor-prometheus-config_v1 contiene prometheus-config.yml
  1. Actualizamos los dominios de Prometheus y Grafana:
  • traefik.http.routers.monitor-prometheus.rule
  • traefik.http.routers.monitor-grafana.rule
  1. Actualizar la contraseña de Prometheus: traefik.http.middlewares.monitor-prometheus.basicauth.users.
  2. Actualizar la URI de acceso a PostgreSQL: DATA_SOURCE_URI.
  3. Actualizar las variables para envío de e-mail en Grafana:
  • GF_SMTP_FROM_ADDRESS
  • GF_SMTP_FROM_NAME
  1. Desplegar en Portainer.
  2. Acceder a Grafana, configurar el acceso a Prometheus:
  1. Importar dashboards en Grafana, estos son unos ejemplos: