Technos

Beszel : supervisez vos serveurs Docker

Un Homelab, ça se surveille. Beszel affiche en deux conteneurs le CPU, la RAM et les disques de tous mes serveurs, avec le détail conteneur par conteneur.

5 min de lecture commentaires

Le logo Beszel à côté d une baleine Docker posée sur une pile de serveurs, avec un tableau de bord de supervision affichant CPU, mémoire et conteneurs

Après avoir monté toute cette infra, il reste une question bête : est-ce que ça va bien ? Beszel y répond en deux conteneurs, et surtout il découpe la consommation conteneur par conteneur.

On ne sait jamais vraiment ce qui tourne

Un Homelab, ça finit toujours pareil. Tu empiles les applis, tu ajoutes une machine, tu testes un truc que tu oublies d’arrêter, et six mois plus tard tu ne sais plus ce qui tourne ni ce que ça coûte.

Et il y a les vraies questions, celles qui arrivent un soir sans prévenir. Pourquoi la machine rame ? Est-ce que j’ai encore assez de RAM pour ajouter un service ? Est-ce que le disque va tenir jusqu’à la fin du mois ? Et la meilleure de toutes : est-ce que quelqu’un m’a posé un cryptomineur sur le serveur ? Parce que ça m’est arrivé, et je peux vous dire qu’on aime bien avoir une courbe sous les yeux ce jour-là.

Bien sûr, vous pouvez toujours vous connecter en SSH et lancer htop, ou docker stats. Ça marche très bien. Mais c’est un instantané : aucun historique, aucune vue d’ensemble sur plusieurs machines, et rien qui vous prévienne pendant que vous dormez. Rien ne vaut un outil graphique.

Je vous présente Beszel. Un outil de supervision vraiment complet, très visuel, et qui ne consomme quasiment rien lui-même. Ce qui, pour un outil censé surveiller la consommation, est plutôt la moindre des politesses.

Deux conteneurs qui se parlent

Le découpage est ce qui rend l’outil aussi simple. Il y a deux morceaux, tous les deux en conteneur :

  • le hub, c’est l’interface. Une seule instance, quelque part chez vous. C’est elle que vous ouvrez dans le navigateur ;
  • l’agent, qu’on pose sur chaque serveur qu’on veut observer. Il mesure, il envoie, il ne fait rien d’autre.

Conséquence directe : ajouter une machine à la supervision, c’est poser un conteneur dessus. Pas d’installation système, pas de paquet à maintenir, rien à compiler.

La liste, d’abord

Vous installez, vous ajoutez vos serveurs, et hop, tout est là.

La liste des systèmes dans Beszel : une ligne par serveur avec CPU, mémoire, disque, GPU, charge moyenne, réseau, température et temps de fonctionnement
Une ligne par serveur. En un coup d’œil, tout ce qui va bien et tout ce qui ne va pas.

Le point vert, le CPU, la mémoire, le disque, le réseau, la température, l’uptime. C’est déjà 80 % de ce qu’on regarde au quotidien, et c’est sur un seul écran.

Le détail, et surtout le détail par conteneur

Ensuite vous cliquez sur un serveur, et là ça devient intéressant.

La page de détail d'un serveur dans Beszel : à gauche l'utilisation CPU et mémoire de la machine, à droite les mêmes courbes empilées par conteneur Docker
À gauche la machine, à droite les mêmes courbes découpées par conteneur. C’est toute la valeur de l’outil.

L’état des disques, la RAM, le processeur, et les entrées/sorties disque, ce qui est hyper important et qu’on oublie tout le temps de regarder. Une machine qui rame sans que le CPU bouge, neuf fois sur dix c’est le disque qui sature.

Mais le vrai truc, c’est la colonne de droite. Chaque courbe est séparée par conteneur. Vous ne voyez pas seulement que la RAM est à 4 Go, vous voyez lequel de vos conteneurs les prend. Et quand une bande rouge grimpe toute seule à deux heures du matin, vous savez immédiatement de qui il s’agit.

C’est parfait pour notre stack, vu que chez nous tout s’installe dans Docker, et que Docker chez nous c’est Portainer. Une bande dans le graphe, une stack dans Portainer, c’est le même objet.

Installer le hub

Comme toujours, un compose. Soit à la main, soit directement en stack dans Portainer, ce qui est ma méthode.

services:
  beszel:
    image: henrygd/beszel:latest
    container_name: beszel
    restart: unless-stopped
    environment:
      APP_URL: http://mon-serveur:8090
    ports:
      - 8090:8090
    volumes:
      - ./beszel_data:/beszel_data
      - ./beszel_socket:/beszel_socket

Vous lancez, vous ouvrez le port 8090, vous créez votre compte administrateur. Et là vous avez l’interface. Mais elle est vide : aucun serveur n’est branché dessus.

Brancher un serveur

Pour ça, direction l’interface, bouton Ajouter Système.

La fenêtre Ajouter Système de Beszel : les champs Nom, Hôte/IP, Port 45876, une clé publique ssh-ed25519 et un token, avec le bouton Copier docker compose
Le nom, l’adresse, le port. La clé et le token sont déjà remplis, il n’y a rien à inventer.

Vous donnez un nom, une adresse et un port. Si vous voulez surveiller la machine du hub elle-même, l’adresse c’est 127.0.0.1, tout simplement. Le port par défaut est le 45876.

Ensuite vous cliquez sur Copier docker compose, puis sur Ajouter Système. Vous créez une nouvelle stack sur la machine à observer, vous y collez ce que vous venez de copier, vous lancez, et hop, elle apparaît dans l’interface de Beszel. C’est tout.

Le compose en question ressemble à ça, avec la clé et le token déjà remplis pour vous :

services:
  beszel-agent:
    image: henrygd/beszel-agent:latest
    container_name: beszel-agent
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./beszel_agent_data:/var/lib/beszel-agent
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      LISTEN: 45876
      KEY: "ssh-ed25519 AAAA..."
      TOKEN: "le-token-donne-par-le-hub"
      HUB_URL: "http://mon-serveur:8090"

Les deux lignes à comprendre : network_mode: host, indispensable pour que l’agent voie les statistiques réseau de la machine et pas seulement celles de son propre conteneur, et la socket Docker montée en lecture seule, qui est exactement ce qui lui permet de découper par conteneur.

Y accéder de l’extérieur

Vous pouvez aussi lui monter un nom de domaine, avec Duck DNS par exemple, et le brancher derrière Nginx Proxy Manager. Là vous ouvrez votre supervision depuis le téléphone, en HTTPS, sans retenir un port.

Et surtout, ça vous permet d’ajouter des serveurs qui ne sont pas sur votre réseau. Un VPS, la machine d’un copain, un Raspberry chez vos parents : tout ça remonte dans la même interface. C’est sécurisé par clés et chiffré, l’agent n’accepte que le hub qui détient la bonne clé, donc aucun souci de ce côté.

Les alertes, parce qu’on ne regarde pas l’écran toute la journée

Un outil de supervision qu’il faut penser à ouvrir ne sert pas à grand-chose. Beszel sait donc envoyer des notifications, par mail si vous voulez, et il embarque toute la panoplie classique :

  • un serveur qui ne répond plus ;
  • un processeur en surcharge trop longtemps, ce qui évite d’être réveillé par le moindre pic de deux secondes ;
  • un disque qui se remplit ;
  • la mémoire, la température, la bande passante.

C’est le genre de réglage qu’on fait une fois et qu’on oublie, jusqu’au jour où le mail arrive et vous évite une vraie panne.

Ce que j’en retiens

Beszel est vraiment un super outil de supervision. Il y a sûrement plus complet ailleurs, du côté de Prometheus et Grafana notamment, mais c’est aussi beaucoup plus lourd à monter et à maintenir. Lui, il est hyper adapté à Docker et à Portainer, il s’installe en dix minutes et il ne coûte rien à faire tourner.

Autrement dit, il est parfait dans notre Homelab. Et depuis que je l’ai posé, je ne me demande plus ce qui consomme : je le vois.

Image d’en-tête générée par IA.

SmeagolWorms4

Les nouveaux articles par mail

Un mail par article publié. Rien d'autre, et désinscription en un clic.

Commentaires

Chargement des commentaires…

    Laisser un commentaire

    Vérification anti-robot en cours…

    Jamais publié.