Inicio Monitorear servidor con Glances
Entrada
Cancelar

Monitorear servidor con Glances

Glances es una aplicación de monitoreo linux que trae integrado un servidor web que se puede activar para tener acceso al estado de tu equipo desde cualquier parte.

La instalación, a priori, es muy sencilla: sólo hay que instalar desde los repositorios oficiales y levantar el servicio, pero eso es en la teoría, porque me he encontrado con varios problemas que he solucionado a base de buscar en los foros y wikis.

Vamos al lío.

  1. Instalamos Glances.

Desde los repositorios oficiales.

1
sudo apt-get install glances
  1. Modificamos el servicio para que comience en modo web.

Esto lo hacemos modificando el archivo glances.service.

1
sudo nvim /lib/systemd/system/glances.service

Y queda así:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Glances
Documentation=man:glances(1)
Documentation=https://github.com/nicolargo/glances
After=network.target

[Service]
ExecStart=/usr/bin/glances -w
Restart=on-abort

[Install]
WantedBy=multi-user.target
  1. Configuramos caddy.

Antes de nada, creamos un hash de contraseña para que cualquiera no acceda a nuestra web de monitoreo, así que lanzamos el siguiente comando, ponemos unacontraseña y copiamos el hash resultante para pegarlo luego en el archivo Caddyfile.

1
2
3
4
caddy hash-password
Enter password
Confirm password
$2lkgnañlgnoio2a$14$mwGhI8cBn1ktt1SSydGdUeK24lkkbBjboNn3hGjsLyxFlkdnsiU.8Qa2Jsj #Este es el hash que hay que copiar.

Añadimos el nuevo virtualhost al archivo /etc/caddy/Caddyfile.

1
2
3
4
5
6
monitor.gundan.es {
	basicauth {
       usuario  $2lkgnañlgnoio2a$14$mwGhI8cBn1ktt1SSydGdUeK24lkkbBjboNn3hGjsLyxFlkdnsiU.8Qa2Jsj
	}
	reverse_proxy 0.0.0.0:61208
}
  1. Arreglando la instalación.

La versión de los repositorios oficiales viene con un bug por el cual no funciona el servidor web, mostrando sólo una página en blanco. La solución es sencilla.

Comprobamos la versión de Glances, creamos una variable donde guardamos este dato, descargamos el archivo fuente del repositorio oficial, lo descomprimimos, lo copiamos en su sitio y borramos lo descargado y descomprimido.

1
2
3
4
5
6
7
8
9
glances -V

Glances v3.3.1.1 with PsUtil v5.9.4
Log file: /home/usuario/.local/share/glances/glances.log

export GLANCES_VERSION="3.3.1.1"
wget https://github.com/nicolargo/glances/archive/refs/tags/v${GLANCES_VERSION}.tar.gz
sudo cp -r glances-${GLANCES_VERSION}/glances/outputs/static/public/ /usr/lib/python3/dist-packages/glances/outputs/static/
rm -rf glances-3.3.1.1  v3.3.1.1.tar.gz
  1. Preparando las alertas.

Como tengo gotify funcionando, voy a aprovecharlo para recibir alertas en el móvil cuando algo falle. Esto lo vamos a hacer con un par de scripts sencillos de python que vamos a guardar en la carpeta ~/.local/bin.

1
nvim ~/.local/bin/miscript.py

Y el script quedaría así.

1
2
3
4
5
6
import requests #apt install python3-requests                                                                                                       
resp = requests.post('https://gotify.tudominio.es/message?token=hgAGHRTFudghhdlL6', json={
    "message": "La swap ha pasado del 90%",
    "priority": 2,
    "title": "Alerta swap"
})

Este sería un ejemplo para que Gotify me notificase en caso de alerta swap. El token lo tienes que adquirir de la página de administración de Gotify. Los porcentajes con los que alerta se pueden modificar en el archivo /etc/glances/glances.conf.

Si queremos que nos notifique con diferentes textos para cada alerta, creamos los diferentes scripts.

Añadimos en el archivo anterior la orden de lanzar el script en caso de alerta en la siguiente sección.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[quicklook]
# Set to true to disable a plugin
# Note: you can also disable it from the command line (see --disable-plugin <plugin_name>)
disable=False
# Graphical percentage char used in the terminal user interface (default is |)
percentage_char=|
# Define CPU, MEM and SWAP thresholds in %
cpu_careful=50
cpu_warning=70
cpu_critical=90
cpu_critical_action=python3 /home/usuario/.local/bin/alertacpu.py
mem_careful=50
mem_warning=70
mem_critical=90
mem_critical_action=python3 /home/usuario/.local/bin/alertamem.py
swap_careful=50
swap_warning=70
swap_critical=90
swap_critical_action=python3 /home/usuario/.local/bin/alertaswap.py
  1. Iniciando el servicio

Ya con todo esto modificado, le decimos a systemd que lo ponga a funcionar y recargamos caddy para que todo funcione.

1
2
3
sudo systemctl enable glances
sudo systemctl start glances
sudo systemctl reload caddy

Con esto, ya tenemos acceso a Glances desde cualquier navegador.

  1. Otro bug.

Otro problema que tiene esta versión de Glances es que no envía notificaciones a menos que abramos la interfaz web. Para arreglar esto he probado a crear un timer de systemd y la verdad es que es un puto coñazo porque tienes que crear un servicio y luego un temporizador que no queda muy claro cómo se enlazan, así que vamos a usar cron que es mucho más sencillo que lanzará un curl al puerto de glances dos veces al día y así nos aseguramos de que si ocurre algo en el servidor nos alerte. Para ello sólo tenemos que lanzar crontab -e y añadimos la siguiente línea que le dice que lance curl a las 10:00 y a las 22:00 todos los días.

1
0 10,22 * * * /usr/bin/curl http://localhost:61208 > /dev/null &

Guardamos y ahora sí, ya tenemos esto funcionando como Monesvol manda. Lo único que falta es poner la configuración de Glances como más nos guste, pero eso ya es cosa de cada uno.

Más información:

Esta entrada está licenciada bajo CC BY 4.0 por el autor.