Vai al contenuto principale

Monitoring serveur

Un serveur sans surveillance, c'est comme un rucher sans visite : tout semble aller bien jusqu'au jour ou une colonie s'effondre sans signe avant-coureur. La page de monitoring serveur existe pour eviter ce scenario. Elle regroupe trois panneaux de surveillance --- les metriques systeme via Beszel, l'etat des containers Docker et les statistiques de la base de donnees Supabase --- et se rafraichit automatiquement pour offrir une vue en temps reel de l'infrastructure, sans avoir a se connecter en SSH au serveur.

Page : /backoffice/monitoring | Sidebar : Section "MONITORING" (orange)


Widget Server Health (dashboard)

Avant de plonger dans les details, il est utile d'avoir un indicateur rapide de la sante du serveur des l'ouverture du backoffice. C'est le role de ce widget compact presente sur le dashboard principal (/backoffice). Il affiche 4 jauges SVG circulaires qui permettent de reperer un probleme en un coup d'oeil, sans avoir a naviguer vers la page de monitoring complete :

JaugeSourceSeuils de couleur
CPUBeszel API (PocketBase)Vert (moins de 70%), Ambre (70-90%), Rouge (plus de 90%)
RAMBeszel API (PocketBase)Vert (moins de 70%), Ambre (70-90%), Rouge (plus de 90%)
DisqueBeszel API (PocketBase)Vert (moins de 70%), Ambre (70-90%), Rouge (plus de 90%)
ContainersDocker API (/api/admin/docker)Vert (100% healthy), Ambre (moins de 100%), Rouge (0 running)
  • Polling automatique : toutes les 30 secondes (useAutoRefresh interval 30000)
  • Focus refetch : quand l'onglet reprend le focus
  • Degradation gracieuse : si Beszel ou Docker sont indisponibles, les jauges affichent "---" au lieu de crasher

Composant : AdminServerHealth.tsx (import dynamique dans le layout dashboard).


Beszel (metriques systeme)

Les metriques systeme (CPU, memoire, disque) sont les signes vitaux du serveur, comme la temperature et le poids d'une ruche. Le panneau Beszel les collecte en temps reel grace a un agent leger deploye directement sur la machine hote, ce qui lui donne acces aux vraies ressources physiques du serveur Hetzner --- et pas seulement a celles d'un container isole.

Architecture Beszel

L'architecture repose sur deux composants. L'agent tourne sur la machine hote (pas dans un container isole) pour mesurer les vraies ressources physiques. Le hub centralise ces donnees et les rend accessibles via une interface web et une API :

beepass-beszel-agent (network_mode: host, TCP :45876)
|-- Metriques systeme (CPU, RAM, disque, reseau)
|-- Metriques Docker (/var/run/docker.sock:ro)
|
beepass-beszel (hub, port 8090)
|
Traefik --> https://beszel.beepass.io
ComposantImagePortDescription
beepass-beszelhenrygd/beszel:latest8090Hub monitoring leger, auth native, expose via Traefik
beepass-beszel-agenthenrygd/beszel-agent:latest45876 (TCP)Agent metriques systeme + Docker, network_mode: host

Acces direct : https://beszel.beepass.io (authentification native Beszel, creer un compte au premier lancement).

Metriques affichees

Chaque metrique est accompagnee d'un seuil d'alerte qui aide a anticiper les problemes avant qu'ils n'impactent les utilisateurs :

MetriqueFormatSeuil d'alerte
CPUPourcentage d'utilisation + nombre de coeurs> 80%
MemoireGo utilises / Go totaux + pourcentage> 85%
DisqueGo utilises / Go totaux + pourcentage> 90%
Reseau I/OKB/s entrant et sortant---
UptimeDuree depuis le dernier redemarrage---

L'indicateur de sante global affiche online (vert) ou offline (rouge) selon la disponibilite de l'agent. L'horodatage de la derniere mise a jour est affiche en bas du panneau.

Rafraichissement

Le panneau utilise useAutoRefresh avec un polling toutes les 30 secondes. Aucun canal Realtime n'est utilise car Beszel est une source de donnees externe (il ne passe pas par Supabase).

Images scratch

Les images Docker Beszel (henrygd/beszel et henrygd/beszel-agent) sont des binaires Go compiles dans des images scratch (des images Docker minimalistes qui ne contiennent rien d'autre que le programme lui-meme) --- aucun outil CLI n'est disponible (pas de wget, curl, ls, ni sh). Il est donc impossible de configurer un healthcheck Docker pour ces containers. Leur etat de sante est surveille uniquement via les metriques qu'ils exposent.


Docker Services

BeePass n'est pas un simple site web : c'est un ensemble de 18 services qui cooperent --- le site, le worker de calcul genetique, la base de donnees, le proxy reseau, l'IA, le support, etc. Le panneau Docker Services donne une vue d'ensemble de tous ces services, leur etat de fonctionnement, et permet d'intervenir rapidement (consulter les logs, redemarrer un service) sans avoir a se connecter en SSH.

Les 18 services Docker

L'infrastructure BeePass comprend 18 services Docker operationnels sur le serveur Hetzner. Chacun a un role precis dans l'ecosysteme :

#ServiceImagePort interneDescriptionHealthcheck
1beepass-webNext.js 15 standalone3000Frontend + API Routes. Docker socket monte RO. Env HOSTNAME=0.0.0.0 obligatoire.wget 127.0.0.1:3000 (start_period 15s)
2beepass-workerPython 3.11-slim + BLUPF90+8000Worker Python (env_compute, XGBoost, BLUPF90, THRGIBBS, ONE SHOT). FastAPI + rq. Healthcheck zombie-aware.curl 127.0.0.1:8000/health
3beepass-redisRedis 7.4-alpine6379File d'attente rq (5 queues). Volume persistant.redis-cli ping
4beepass-backuppostgres:17-alpine---pg_dump cron quotidien 03:00 UTC, retention 7j, SHA256 checksum.pgrep crond (interval 60s)
5beepass-ollamaollama/ollama:latest11434Ollama LLM (llama3.2:3b import IA + nomic-embed-text RAG). 4CPU/10G.ollama list
6beepass-docsDocusaurus 3.9 (nginx:alpine)80Documentation statique beepass.io/docs. Multi-stage build.curl 127.0.0.1:80 (start_period 10s)
7beepass-traefiktraefik:v3.680, 443, 8082Reverse proxy Docker, SSL interne (Cloudflare Full Strict), Prometheus metrics.traefik healthcheck --ping
8beepass-prometheusprom/prometheus:v3.9.19090Collecte metriques, retention 30j, web.enable-lifecycle.wget 127.0.0.1:9090/-/healthy
9beepass-grafanagrafana/grafana:v12.3.33000Dashboards monitoring.beepass.io. 5 dashboards importes.wget 127.0.0.1:3000/api/health
10beepass-node-exporterprom/node-exporter:v1.10.29100Metriques systeme (CPU, RAM, Disk, Network).wget 127.0.0.1:9100/metrics
11beepass-postgres-exporterpostgres-exporter:v0.19.09187Metriques PostgreSQL (connexions, query time, table sizes).wget 127.0.0.1:9187/metrics
12beepass-beszelhenrygd/beszel:latest8090Hub monitoring leger beszel.beepass.io. Auth native.Aucun (image scratch)
13beepass-beszel-agenthenrygd/beszel-agent:latest45876 (TCP)Agent metriques systeme + Docker. network_mode: host.Aucun (image scratch)
14beepass-peppermintpepperlabs/peppermint:latest3000, 5003Helpdesk ticketing beepass.io/support. Frontend + API.wget 127.0.0.1:3000 (start_period 30s)
15beepass-peppermint-dbpostgres:17-alpine5432Base PostgreSQL dediee Peppermint.pg_isready
16beepass-ainvnode:20-alpine + R---AINV-honeybees v20 matrice A^-1 (run on-demand).---
17beepass-zapghcr.io/zaproxy/zaproxy:stable8090OWASP ZAP scanner (daemon mode). 2CPU/2G.curl 127.0.0.1:8090/JSON/core/view/version/
18beepass-nucleiprojectdiscovery/nuclei:latest---Nuclei scanner (profile security, containers ephemeres on-demand).---
Healthchecks : 14 sur 18

14 des 18 services ont un healthcheck Docker configure (une commande qui verifie periodiquement que le service fonctionne correctement). Les 4 exceptions sont : beszel et beszel-agent (images scratch Go sans outil CLI), beepass-ainv et beepass-nuclei (run on-demand, pas de daemon permanent).

Colonnes du tableau

Le tableau Docker presente chaque container avec les informations essentielles pour evaluer rapidement sa sante :

ColonneDescription
ContainerNom du container (ex : beepass-web, traefik)
ImageImage Docker + tag (ex : node:20-alpine)
StateBadge : Running (vert), Exited (rouge), Restarting (ambre)
HealthBadge : Healthy (vert dot), Unhealthy (rouge dot), Starting (ambre dot), "---" (pas de healthcheck). Les badges affichent les termes Docker natifs en anglais.
UptimeTemps depuis la creation du container (relatif)
RestartsCompteur de redemarrages (rouge si > 0) --- un nombre eleve de restarts est souvent signe d'un probleme recurrent
ActionsIcones : Logs (expand) + Restart (avec confirmation)

Cartes de statistiques

Quatre cartes en haut de page donnent une vue synthetique avant d'examiner le detail :

CarteDescription
Total containersNombre total de containers Docker (running + exited)
RunningNombre de containers en cours d'execution (badge vert)
UnhealthyNombre de containers en etat unhealthy (badge rouge, 0 = vert)
Uptime serveurTemps depuis le demarrage du container le plus ancien

Actions par container

Depuis le tableau, deux actions sont disponibles pour chaque container. L'objectif est de pouvoir diagnostiquer et corriger un probleme sans quitter le navigateur :

ActionDescription
Voir les logsAffiche les 50 dernieres lignes de logs en monospace dans un panneau deroulant. Logs recuperes via l'API Docker Engine (stream multiplexe, headers 8 octets supprimes automatiquement).
RedemarrerEnvoie un signal de redemarrage avec un timeout de 10 secondes. Modale de confirmation requise.

Containers non restartables --- certains services sont trop critiques pour etre redemarres depuis l'interface :

  • beepass-web : auto-kill = perte de l'interface admin (on scierait la branche sur laquelle on est assis)
  • traefik : proxy critique, coupure reseau totale (plus aucun service ne serait accessible)

Pour ces containers, le bouton restart est desactive avec un tooltip explicatif.

Tri des containers

Les containers sont tries dans un ordre predefini, les services les plus critiques en haut de la liste. Cela permet de reperer immediatement si un service essentiel est en difficulte :

  1. beepass-web
  2. beepass-worker
  3. beepass-redis
  4. beepass-backup
  5. beepass-ollama
  6. beepass-zap
  7. beepass-nuclei
  8. traefik
  9. Alphabetique pour le reste

Rafraichissement

  • Polling automatique : toutes les 30 secondes
  • Focus refetch : quand l'onglet reprend le focus

Prerequis Docker

Pour que l'interface puisse communiquer avec Docker et lire l'etat des containers, le socket Docker (le canal de communication avec le moteur Docker) doit etre monte en lecture seule sur beepass-web :

# docker-compose.yml -- service beepass-web
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
AutoRemove et logs

Le parametre Docker AutoRemove doit etre a false pour tous les containers persistants. Si AutoRemove: true est active, le container est supprime avant que les logs puissent etre lus, rendant le diagnostic impossible --- comme si un patient quittait l'hopital avant que le medecin ait pu lire ses resultats d'analyse.

Traefik v3 et healthchecks

Traefik v3 exclut automatiquement les containers marques unhealthy du routing HTTP. Concretement, cela signifie qu'un healthcheck defaillant sur un container critique (ex : beepass-web) provoque un 404 sur l'ensemble du site --- Traefik considere que le service ne fonctionne plus et cesse de lui envoyer du trafic. Verifiez toujours le bon fonctionnement des healthchecks avant un deploiement.

BusyBox et IPv6

Dans les containers Alpine, BusyBox (la boite a outils systeme integree) resout localhost en IPv6 (::1) avant IPv4. Les healthchecks Docker doivent toujours cibler 127.0.0.1 explicitement pour eviter les faux negatifs (un service qui fonctionne mais dont le healthcheck echoue parce qu'il frappe la mauvaise adresse).

Next.js standalone et HOSTNAME

Le service beepass-web necessite la variable d'environnement HOSTNAME=0.0.0.0 dans sa configuration Docker. Par defaut, Next.js standalone ecoute uniquement sur le hostname interne du container (un nom genere par Docker), ce qui le rend invisible pour Traefik. Avec 0.0.0.0, Next.js ecoute sur toutes les interfaces reseau, permettant a Traefik de lui transmettre les requetes.

Responsive mobile/tablet

  • Table avec overflow-x-auto (scroll horizontal si necessaire)
  • Colonnes secondaires (Health, Restarts) cachees via hidden md:table-cell
  • 4 stat cards en grille 2x2 (cols-2) au lieu de 4 colonnes
  • Pagination responsive avec padding adapte
  • Boutons Actions conservent 32px minimum

Serveur Hetzner

Toute l'infrastructure BeePass tourne sur un seul serveur cloud Hetzner. Le choix de Hetzner repond a un besoin de souverainete (serveur en Europe) avec un excellent rapport qualite-prix :

ParametreValeur
ProviderHetzner Cloud
PlanCCX23 (4 vCPU / 16 GB RAM / 160 GB SSD)
OSUbuntu 24.04
LocationNuremberg (nbg1)

Limites de ressources Docker

Certains services sont gourmands en ressources. Pour eviter qu'un seul service n'accapare toute la machine au detriment des autres, des limites de CPU et de memoire sont configurees :

ServiceCPU limitRAM limitCPU reserveRAM reserve
beepass-worker48G24G
beepass-ollama410G------
beepass-zap22G------

Supabase Database

La base de donnees est le coeur de BeePass : elle stocke les profils utilisateurs, les reines, les evaluations genetiques, les contacts, les sessions, etc. Ce panneau de monitoring permet de surveiller sa sante sans avoir a ecrire des requetes SQL, en fournissant un tableau de bord visuel couvrant les performances, les connexions et le stockage.

Metriques globales

Ces metriques donnent une vue d'ensemble de l'activite et de la sante de la base de donnees PostgreSQL :

MetriqueDescription
Taille de la baseVolume total en Mo ou Go
Connexions activesNombre de connexions en etat active (en train d'executer une requete)
Connexions idleConnexions ouvertes sans requete en cours (en attente)
Connexions totalesSomme active + idle
Cache hit ratioPourcentage de requetes servies depuis le cache PostgreSQL (la memoire rapide). Un ratio eleve (objectif > 99%) signifie que la base repond principalement depuis la memoire, sans aller lire le disque --- c'est beaucoup plus rapide.
UptimeDuree depuis le dernier redemarrage de PostgreSQL

Sante des services

Supabase est compose de plusieurs sous-services. Un indicateur de statut par service permet de savoir lequel fonctionne et lequel est en difficulte :

ServiceDescription
REST APIPostgREST --- l'API REST auto-generee qui traduit les requetes HTTP en requetes SQL. Cap 1000 lignes par requete (pagination .range() obligatoire pour les grands ensembles de donnees).
AuthGoTrue --- le service d'authentification qui gere les comptes utilisateurs, les mots de passe et les sessions
StorageService de stockage de fichiers (buckets S3-compatible) pour les photos, les documents, etc.
RealtimeServeur WebSocket qui envoie des notifications instantanees quand une donnee change en base (utilise par useAutoRefresh)

Chaque service affiche un voyant vert (operationnel), orange (degrade) ou rouge (hors service).

Statistiques PostgreSQL

Ces compteurs techniques permettent de detecter des anomalies dans le fonctionnement interne de la base :

StatistiqueDescription
CommitsNombre total de transactions validees (operations de lecture/ecriture reussies)
RollbacksNombre total de transactions annulees (operations qui ont echoue ou ete annulees)
DeadlocksNombre de deadlocks detectes (situations ou deux requetes se bloquent mutuellement --- rare mais symptomatique)
Fichiers temporairesNombre de fichiers temp crees (indicateur de requetes couteuses qui debordent de la memoire disponible)

Statistiques plateforme

CompteurDescription
Utilisateurs totauxNombre de comptes dans auth.users
Buckets de stockageNombre de buckets configures

Vue des tables

Ce tableau detaille permet d'identifier les tables qui grossissent trop, celles qui manquent d'index, ou celles qui necessitent une maintenance :

ColonneDescription
NomNom de la table
LignesEstimation du nombre de lignes
Dead rowsLignes mortes en attente de vacuum (maintenance automatique). Un nombre eleve indique que le nettoyage prend du retard.
Taille tableEspace disque occupe par les donnees
Taille indexEspace disque occupe par les index (structures qui accelerent les recherches)
Dernier vacuumDate du dernier nettoyage automatique
Sequential scansNombre de scans sequentiels --- des valeurs elevees peuvent indiquer qu'un index manque (la base parcourt toute la table au lieu d'utiliser un raccourci)

Connexions actives

Cette section liste les requetes en cours d'execution. Elle est utile pour identifier une requete lente qui bloque les autres :

ColonneDescription
RequeteTexte SQL de la requete en cours
Etatactive, idle, idle in transaction
DureeTemps ecoule depuis le debut de la requete
ClientInformations sur l'application ou l'adresse IP du client

Buckets de stockage

ColonneDescription
NomIdentifiant du bucket
Visibilitepublic ou private (protege par RLS, le systeme de controle d'acces de Supabase)
FichiersNombre de fichiers stockes
Taille totaleVolume total du bucket
Cache hit ratio

Un cache hit ratio inferieur a 99% peut indiquer un manque de memoire partagee (shared_buffers) ou des requetes trop volumineuses qui ne tiennent pas en memoire. Consultez les sequential scans dans la vue des tables pour identifier les tables necessitant un index --- c'est souvent la cause la plus simple a corriger.


Monitoring avance : Prometheus & Grafana

Pour aller au-dela des metriques instantanees et observer des tendances sur plusieurs jours ou semaines, BeePass utilise Prometheus (collecte et stockage de metriques) et Grafana (visualisation sous forme de graphiques interactifs). Ensemble, ils permettent de repondre a des questions comme "le CPU est-il plus charge qu'il y a une semaine ?" ou "les temps de reponse PostgreSQL se degradent-ils ?".

Prometheus

Prometheus collecte les metriques de 4 sources (appelees "targets") en les interrogeant a intervalles reguliers :

TargetPortMetriques
prometheus9090Auto-monitoring (Prometheus se surveille lui-meme)
node-exporter9100CPU, RAM, Disk, Network (metriques systeme du serveur)
postgres-exporter9187Connexions, query time, table sizes (metriques de la base PostgreSQL)
traefik8082Requetes HTTP, latence, status codes (metriques du reverse proxy)

Prometheus est uniquement accessible en interne (pas de sous-domaine public). Retention : 30 jours.

Grafana

Grafana transforme les metriques brutes de Prometheus en tableaux de bord visuels avec des graphiques, des alertes et des vues historiques.

Acces : https://monitoring.beepass.io

5 dashboards importes :

DashboardIDContenu
Node Exporter Full1860Metriques systeme detaillees (CPU, RAM, disque, reseau par interface)
PostgreSQL Database9628Performances PostgreSQL (requetes/s, temps de reponse, connexions)
Traefik Official17346Trafic et latence du reverse proxy (requetes par service, codes HTTP)
Prometheus All Metrics15489Vue d'ensemble de toutes les metriques collectees
Main - Prometheus Overview893Tableau de bord general

Backups PostgreSQL

Les donnees sont l'actif le plus precieux de BeePass. Un bug, une fausse manipulation ou un probleme serveur pourrait les compromettre. Les backups automatiques constituent un filet de securite : ils permettent de restaurer la base de donnees a un etat anterieur en cas de probleme, avec une granularite quotidienne.

Backup automatique

ParametreValeur
PlanificationQuotidien 03:00 UTC (pendant les heures creuses pour minimiser l'impact)
Containerbeepass-backup (postgres:17-alpine)
Formatpg_dump --format=custom (format compresse et restaurable selectivement)
Retention7 jours (les backups de plus de 7 jours sont supprimes)
ChecksumSHA256 sidecar (.sha256) --- un fichier de verification qui garantit que le backup n'est pas corrompu

Carte Backup Monitor

Cette carte, presente sur la page de monitoring, donne un apercu immediat de l'etat des sauvegardes :

ElementDescription
Badge statutVert = dernier backup < 24h, Ambre = 24-48h, Rouge = > 48h ou aucun backup
Dernier backupDate relative (ex: "il y a 8h"), taille du fichier (ex: "2.4 GB")
ChecksumBadge vert "Checksum verifie" si le fichier .sha256 sidecar existe
Liste expandableLes 7+ derniers backups avec date, taille, checksum
Prochain backupHeure estimee du prochain cron (03:00 UTC suivant)
CompteurNombre total de backups sur le volume

Trigger manuel

Parfois, il est utile de lancer un backup avant une operation risquee (migration SQL, mise a jour majeure, etc.). Voici la procedure :

  1. Cliquer le bouton "Lancer un backup"
  2. Une modale de confirmation apparait (AlertDialog)
  3. Confirmer : un pg_dump est lance dans le container beepass-backup
  4. Le spinner tourne pendant l'operation (1-3 minutes selon la taille de la DB)
  5. Un toast de succes/erreur s'affiche
  6. Le resultat brut (output du script) est affiche dans un bloc <pre> monospace

Prerequis

Le volume backup-data doit etre monte en lecture seule sur beepass-web pour que l'interface puisse lister les backups existants :

volumes:
- backup-data:/data/backups:ro

Hetzner Snapshots API

En complement des backups pg_dump (qui sauvegardent uniquement la base de donnees), des snapshots Hetzner hebdomadaires capturent l'integralite du serveur --- systeme d'exploitation, configuration, fichiers, etc. C'est une deuxieme couche de protection en cas de defaillance materielle :

ParametreValeur
PlanificationDimanche 04:00 UTC
Scriptinfra/scripts/hetzner_snapshot.sh
APIHetzner Cloud API (HETZNER_API_TOKEN)

Seuils d'alerte

Les seuils d'alerte permettent de definir a partir de quel niveau de charge une notification doit etre envoyee. Chaque infrastructure est differente : un serveur qui tourne habituellement a 60% de CPU n'a pas les memes seuils qu'un serveur a 20%. Cette page permet d'adapter les seuils a la realite de l'infrastructure BeePass.

Page : /backoffice/settings --- carte "Seuils d'alerte"

Parametres configurables

Sliders (0-100%, step 5)

ParametreDefautDescription
CPU --- Avertissement80%Seuil CPU pour notification (attention, la charge monte)
CPU --- Critique95%Seuil CPU critique (intervention necessaire)
Memoire --- Avertissement80%Seuil memoire pour notification
Memoire --- Critique95%Seuil memoire critique
Disque --- Avertissement80%Seuil disque pour notification
Disque --- Critique90%Seuil disque critique (moins de marge car le disque ne se vide pas tout seul)

Champs numeriques

ParametreDefautPlageDescription
Age max backup26h1-168hNotification si le dernier backup depasse ce nombre d'heures (26h = une marge au-dela du cycle quotidien de 24h)
Certificat TLS30j1-90jAlerte avant expiration du certificat TLS (reserve futur)
Seuil erreurs API101-1000Notification si le nombre d'erreurs en 24h depasse ce seuil

Toggle

ParametreDefautDescription
Worker non sainActiveNotification si le container beepass-worker est unhealthy (le worker est critique pour les calculs genetiques)

Stockage technique

Les seuils sont stockes dans la table site_settings (cle alert_thresholds, JSONB). Le helper src/lib/alert-thresholds.ts fournit :

  • loadAlertThresholds() : charge les seuils avec cache memoire 5 minutes (evite de re-lire la base a chaque verification)
  • invalidateAlertCache() : invalide le cache apres modification
  • ALERT_DEFAULTS : valeurs par defaut exportees

Notifications synthetiques

Les notifications classiques sont declenchees par des evenements (un utilisateur s'inscrit, un ticket est cree). Mais certains problemes ne declenchent aucun evenement --- ils se manifestent par l'absence de quelque chose (un backup qui n'a pas eu lieu, un CPU qui reste eleve). Les notifications synthetiques resolvent ce probleme : elles sont calculees a la volee en verifiant des conditions a chaque consultation.

Comment ca marche

Les notifications synthetiques sont calculees a chaque requete sur GET /api/admin/notifications. Elles ne sont pas stockees en base --- leur ID est prefixe synth_ pour eviter les collisions avec les notifications classiques. L'icone TbAlertTriangle (orange) les distingue visuellement.

Les 8 checks

Chaque check verifie une condition specifique et genere une notification si la condition est remplie :

NotificationConditionSourceLien
Backup en retardAge dernier backup > seuilFichiers /data/backups/*.dump/backoffice/monitoring
Espace disque critiqueUsage disque > seuilBeszel API (PocketBase)/backoffice/monitoring
CPU eleveUsage CPU > seuilBeszel API (PocketBase)/backoffice/monitoring
Memoire eleveeUsage memoire > seuilBeszel API (PocketBase)/backoffice/monitoring
Worker non sainContainer beepass-worker = unhealthyDocker Engine API/backoffice/docker
Pic d'erreurs APIErreurs 24h > seuilTable api_error_logs/backoffice/error-logs
Validation de role en attenteComptes avec pending_* dans les rolesTable profiles/backoffice/users
Tickets sans reponseTickets ouverts > 48h sans reponse adminPeppermint API/backoffice/support

Resilience

Chaque check est enveloppe dans son propre try/catch. Si un check echoue (Beszel indisponible, Docker socket absent, etc.), les autres notifications continuent de fonctionner normalement. Aucun check defaillant ne bloque l'ensemble du systeme de notification --- c'est le principe du "fail gracefully" (echouer proprement).


Routes API

Toutes les routes suivantes sont protegees par l'authentification admin (cookie HMAC) et utilisent verifyAdminFromRequest() :

RouteMethodeDescription
/api/admin/backupsGETListe des dumps + checksums + stats
/api/admin/backupsPOSTTrigger backup manuel (action: "trigger")
/api/admin/dockerGETContainers list + inspect + health
/api/admin/dockerGETLogs container (?logs=<name>&tail=50)
/api/admin/dockerPOSTRestart container (action: "restart")
/api/admin/jobsGET5 taches agregees multi-sources
/api/admin/alerts/configGETSeuils actuels + defauts
/api/admin/alerts/configPUTSauvegarder seuils (validation + merge)
/api/admin/notificationsGETNotifications reelles + 8 synthetiques
/api/admin/monitoringGETMetriques serveur (Beszel)
/api/admin/server-upgradesGETPackages apt upgradable

Layout de la page Monitoring

La page est organisee pour presenter les informations les plus urgentes en haut, et les details en bas :

+---------------------------------------------+
| Server Upgrades Card |
| (apt packages, check/upgrade) |
+----------------------+-----------------------+
| Backup Monitor Card | Cron Jobs Card |
| (dumps, trigger) | (5 taches planifiees) |
+----------------------+-----------------------+
| Beszel Monitoring Panel |
| (CPU, RAM, Disk, Network + containers) |
+---------------------------------------------+

Voir aussi : Monitoring reseau | Monitoring operations | Tableau de bord