Skip to main content

Monitoring operations

Le monitoring serveur surveille la sante du materiel ; le monitoring reseau surveille le trafic. Le monitoring operations, lui, surveille le quotidien de l'application : les erreurs que rencontrent les utilisateurs, la securite des dependances logicielles, le bon deroulement des taches automatiques, et l'historique de ce qui a ete deploye en production. C'est la vue "jour apres jour" de l'exploitation de BeePass.


Logs d'erreurs API

Quand un utilisateur rencontre une erreur 500 (erreur interne du serveur), il voit un message generique. Mais en coulisses, BeePass enregistre automatiquement tous les details de l'erreur --- la route API concernee, le message d'erreur, la trace d'execution --- pour permettre un diagnostic rapide. Sans ce systeme, il faudrait fouiller manuellement dans les logs Docker, ce qui est chronophage et peu fiable.

Tous les appels API qui retournent un code HTTP 500 sont automatiquement enregistres dans la table api_error_logs via le helper errorResponse(). Ce mecanisme est fire-and-forget (tirer et oublier) : l'enregistrement en base ne bloque pas la reponse au client.

Colonnes du tableau

ColonneDescription
DateHorodatage de l'erreur
RouteChemin de l'API concernee (ex : /api/admin/users, /api/queens/f0)
MethodeVerbe HTTP : GET, POST, PUT, DELETE
Message d'erreurDescription de l'erreur capturee
UtilisateurIdentifiant anonymise de l'utilisateur concerne
IPAdresse IP du client
Stack traceTrace d'execution detaillee (panneau deroulant) --- montre la suite d'appels de fonctions qui a conduit a l'erreur

Filtres et recherche

Pour retrouver rapidement une erreur parmi potentiellement des centaines, plusieurs filtres sont disponibles :

FiltreDescription
RouteFiltrer par chemin d'API specifique (utile pour isoler les erreurs d'un module)
Methode HTTPFiltrer par verbe (GET, POST, PUT, DELETE)
Plage de datesSelectionner une periode de debut et de fin
Recherche textuelleRecherche libre dans le message d'erreur

Cartes de statistiques

Trois cartes en haut de page donnent une vision rapide de la situation :

CarteDescription
Erreurs aujourd'huiNombre d'erreurs API enregistrees dans les dernieres 24 heures
Routes distinctesNombre de routes API differentes ayant genere des erreurs (aide a savoir si le probleme est localise ou generalise)
Total (30 jours)Nombre cumule d'erreurs sur les 30 derniers jours

Retention des donnees

Les logs d'erreurs API sont conserves pendant 30 jours. Au-dela, ils sont automatiquement purges par le cron job "Nettoyage erreurs API". Cette retention est un compromis entre la capacite de diagnostic (pouvoir remonter dans le temps) et l'espace disque.

Monitoring des erreurs

L'erreur API est enregistree via errorResponse() qui remplace le pattern console.error + return 500. Cela centralise le logging dans un seul endroit et evite les oublis. Chaque erreur est inseree en base de maniere non-bloquante --- l'utilisateur recoit sa reponse sans attendre que le log soit ecrit.

Erreurs Peppermint

Les erreurs liees au centre de support Peppermint (serveur inaccessible en dev) retournent un code 503 via la classe PeppermintUnavailableError et ne sont pas enregistrees dans api_error_logs. Ce comportement evite de polluer les logs et les notifications en environnement de developpement, ou Peppermint n'est pas lance. Les 11 points d'interception dans le code renvoient un 503 propre sans logger.

Route API

RouteMethodeDescription
/api/admin/error-logsGETListe paginee avec filtres (route, methode, dates, recherche)
/api/admin/error-logsDELETEPurge manuelle des logs

Taches planifiees (Cron Jobs)

Un serveur ne se gere pas uniquement en reagissant aux problemes : il faut aussi s'assurer que les taches automatiques (sauvegardes, nettoyage, mises a jour) s'executent correctement et dans les temps. La carte "Taches planifiees" joue ce role de sentinelle : elle verifie que chaque tache a bien tourne recemment et signale celles qui sont en retard.

Page : /backoffice/monitoring --- carte "Taches planifiees" (cote droit, grid 2 colonnes)

Jobs monitores

Chaque tache est verifiee selon une logique propre. Par exemple, pour le backup, on verifie l'age du dernier fichier .dump ; pour le nettoyage des erreurs, on compte les entrees obsoletes :

TachePlanificationSource de la dateLogique de statut
Backup PostgreSQLQuotidien 03:00 UTCFichier .dump le plus recent dans /data/backupsOK si < 26h, Warning si < 48h, Critical sinon
Snapshot HetznerDimanche 04:00 UTCPas de donnee locale disponibleToujours "Inconnu" (le snapshot est gere cote Hetzner Cloud)
Verification mises a jourManuelchecked_at dans /data/upgradable.jsonOK si < 7 jours, Warning sinon
Nettoyage erreurs APIRetention 30 joursCOUNT api_error_logs avec date > 30jOK si 0 vieux logs, Warning sinon
Generation changelogAu deploiementmtime du fichier /data/changelog.jsonOK si < 7 jours, Warning sinon

Badges de statut

BadgeCouleurSignification
OKVertLa tache s'est executee dans les temps --- tout va bien
En retardAmbreLa tache a depasse le delai attendu --- a surveiller
CritiqueRougeLa tache est tres en retard ou a echoue --- action necessaire
InconnuGrisPas de donnee disponible pour determiner le statut (ex : snapshot Hetzner)

Audit de securite automatique

En complement des cron jobs systeme, un audit de securite complet est planifie automatiquement. L'objectif est de detecter les nouvelles vulnerabilites chaque jour, sans intervention humaine :

DeclencheurHoraireDescription
Cron quotidien03:30 UTCExecution des 19 outils de scan du Centre de securite
Post-deploiementApres chaque deploy.shAudit declenche automatiquement pour verifier que la nouvelle version n'a pas introduit de vulnerabilite

Le crontab serveur :

30 3 * * * /opt/beepass/scripts/cron-security.sh >> /var/log/beepass-cron.log 2>&1

L'endpoint /api/cron/security-audit est protege par un Bearer token (CRON_SECRET) verifie via timingSafeEqual (une methode de comparaison qui resiste aux attaques par timing --- elle prend toujours le meme temps pour comparer, qu'il y ait 0 ou 10 caracteres corrects).

Route API

RouteMethodeDescription
/api/admin/jobsGET5 taches agregees multi-sources (backup, snapshot, upgrades, error cleanup, changelog)

Rafraichissement

  • Polling automatique : toutes les 5 minutes
  • Focus refetch : quand l'onglet reprend le focus

Audit des dependances

Un projet Node.js comme BeePass depend de centaines de packages (bibliotheques tierces). Chacun de ces packages peut contenir des failles de securite decouvertes apres sa publication. L'audit des dependances scanne ces packages pour detecter les vulnerabilites connues et recommander des mises a jour --- un peu comme un rappel de produit dans l'industrie automobile.

Tableau des vulnerabilites

ColonneDescription
SeveriteNiveau de criticite : critical (faille exploitable immediatement), high (risque eleve), medium, low
CVEIdentifiant CVE (Common Vulnerabilities and Exposures --- le numero unique de la faille dans la base mondiale) avec lien vers la base National Vulnerability Database
PackageNom du package NPM affecte
Version installeeVersion actuellement utilisee dans le projet
Version corrigeeVersion minimale contenant le correctif
RemediationEtapes recommandees pour corriger la vulnerabilite

Les vulnerabilites sont triees par severite decroissante : les critical et high apparaissent en premier car elles necessitent une action rapide.

Contraintes architecturales

Le panneau liste egalement les contraintes de compatibilite entre dependances. Parfois, mettre a jour un package pour corriger une faille casse la compatibilite avec un autre package du projet --- c'est le dilemme classique des dependances imbriquees.

Actions

ActionDescription
Rafraichir l'auditRelance npm audit et met a jour les resultats
Resolution des vulnerabilites

Avant d'appliquer un npm audit fix, verifiez les contraintes architecturales listees. Une mise a jour automatique peut casser des dependances peer (des packages qui doivent etre dans une version specifique pour fonctionner ensemble). Privilegiez les mises a jour manuelles ciblees avec npm install package@version.

Route API

RouteMethodeDescription
/api/admin/dependenciesGETResultat de npm audit --json avec parsing et classification

Changelog et deploiements

Chaque deploiement en production modifie le code qui tourne sur le serveur. Pour garder une tracabilite complete --- savoir ce qui a change, quand et pourquoi --- le panneau changelog affiche l'historique des commits Git deployes en production, organises par type et filtrables. C'est l'equivalent d'un journal de bord de l'application.

Classification des commits

Les commits sont automatiquement categorises par leur prefixe conventionnel (une convention d'ecriture ou le type de changement est indique au debut du message) :

TypePrefixeDescription
Featurefeat:Nouvelle fonctionnalite
Fixfix:Correction de bug
Performanceperf:Amelioration des performances
Refactoringrefactor:Restructuration du code sans changement fonctionnel
Documentationdocs:Mise a jour de la documentation
Chorechore:Taches de maintenance (CI, configs, dependances)
Stylestyle:Changements cosmetiques (formatage, nommage)
Testtest:Ajout ou modification de tests
Autre---Commits ne correspondant a aucun prefixe conventionnel

Filtres et recherche

FiltreDescription
Type de commitFiltrer par categorie (feat, fix, docs, etc.) --- utile pour voir "toutes les nouvelles fonctionnalites depuis un mois"
RechercheRecherche libre dans le message de commit
PaginationNavigation par pages pour les historiques longs

Cartes de statistiques

CarteDescription
Total commitsNombre total de commits deployes
FeaturesNombre de commits de type feat
FixesNombre de commits de type fix

Generation du changelog

Le changelog est genere automatiquement par le script generate-changelog.mjs lors de chaque deploiement. Voici la sequence complete d'un deploiement, du code source au serveur en production :

1. git pull                   --> Recuperation du code source
v
2. generate-changelog.mjs --> Extraction et classification des commits
v
3. docker compose build --> Construction des images Docker
v
4. docker compose up -d --> Demarrage des nouveaux containers
v
5. security-audit (post-deploy) --> Audit de securite automatique (background)
v
6. docker system prune -af --> Nettoyage images/cache inutilises (libere l'espace disque)

Commandes de deploiement

# Deploiement automatise (depuis la machine locale)
./scripts/deploy.sh # web (changelog + build + restart + prune + security audit)
./scripts/deploy.sh worker # worker (git SHA + build + restart + prune)
./scripts/deploy.sh docs # docs (build + restart + prune)
./scripts/deploy.sh all # les 3 d'un coup

# Deploiement manuel (depuis le serveur)
cd /opt/beepass && git pull
docker run --rm -v /opt/beepass:/app -w /app node:20-alpine sh -c \
'apk add --no-cache git >/dev/null 2>&1 && node scripts/generate-changelog.mjs'
docker compose build --no-cache beepass-web
docker compose up -d beepass-web
Deploiement

Le script deploy.sh execute automatiquement toute la sequence. Il declenche egalement un audit de securite post-deploiement via curl /api/cron/security-audit?trigger=post_deploy (non-bloquant, en arriere-plan). Le rapport est visible dans /backoffice/security-reports avec triggered_by = 'post_deploy'.

Route API

RouteMethodeDescription
/api/admin/changelogGETListe des commits avec classification, filtres, pagination

Mises a jour serveur (Server Upgrades)

Le serveur Ubuntu a lui aussi des mises a jour de securite et de stabilite. Comme les dependances npm, les packages systeme (apt) peuvent contenir des failles corrigees par de nouvelles versions. La carte Server Upgrades permet de verifier et d'appliquer ces mises a jour directement depuis le backoffice, sans se connecter en SSH.

Fonctionnalites

  • Liste des packages : nom, version actuelle, version disponible
  • Verification manuelle : bouton pour relancer la verification (apt list --upgradable)
  • Application : bouton pour appliquer les mises a jour (apt upgrade -y)
  • Fichier source : /data/upgradable.json (genere par la commande de verification)

Route API

RouteMethodeDescription
/api/admin/server-upgradesGETListe des packages upgradable
/api/admin/server-upgradesPOSTLancer verification ou appliquer mises a jour

Toutes les commandes admin utiles

Pour les cas ou l'interface ne suffit pas, voici les commandes les plus utiles a lancer en SSH sur le serveur :

# Monitoring
docker compose ps # Etat des services (equivalent du tableau Docker)
docker compose logs -f beepass-web # Logs temps reel du frontend
docker compose logs --tail 50 beepass-worker # Les 50 dernieres lignes du worker
docker ps --format 'table {{.Names}}\t{{.Status}}' # Sante de tous les containers en un coup d'oeil

# Backups
docker exec beepass-backup /backup.sh # Backup manuel (equivalent du bouton "Lancer un backup")
docker exec beepass-backup ls -lh /data/backups/ # Voir la liste des backups sur le disque

# Worker
curl http://127.0.0.1:8000/health # Verifier que le worker est vivant
curl http://127.0.0.1:8000/health/db # Verifier que le worker peut se connecter a la DB
curl -X POST http://127.0.0.1:8000/db/reset-pool # Reinitialiser le pool de connexions DB (utile apres un probleme de connexion)

# Prometheus / Grafana
curl -s http://localhost:9090/-/healthy # Prometheus est-il en bonne sante ?
curl -s http://localhost:9100/metrics | head -50 # Echantillon des metriques systeme
curl -s http://localhost:9187/metrics | head -50 # Echantillon des metriques PostgreSQL

# Securite
bash scripts/cron-security.sh # Lancer un audit de securite manuellement

# Nettoyage
docker system prune -af # Nettoyer les images et caches Docker inutilises

Workflow recommande

Verification quotidienne

Cette routine de 30 secondes permet de detecter la plupart des problemes avant qu'ils n'impactent les utilisateurs :

  1. Ouvrir /backoffice --- verifier le widget Server Health (jauges vertes)
  2. Ouvrir la cloche --- verifier qu'aucune notification synthetique rouge n'apparait
  3. Si alerte : cliquer le lien dans la notification pour acceder a la page concernee

Apres un deploiement

Les deploiements sont les moments les plus risques --- un bug peut etre introduit par un changement de code. Voici les verifications a effectuer :

  1. Ouvrir /backoffice/docker --- verifier que tous les containers sont Running + Healthy
  2. Verifier que les Restarts sont a 0 (sinon investiguer les logs)
  3. Ouvrir /backoffice/monitoring --- verifier le statut des Cron Jobs (tous verts)
  4. Verifier /backoffice/security-reports --- le rapport post-deploy doit apparaitre

En cas de probleme serveur

Quand quelque chose ne va pas, voici la demarche de diagnostic recommandee :

  1. /backoffice/docker --- identifier le container problematique (unhealthy, exited, restarts > 0)
  2. Expand les logs du container pour diagnostic
  3. Si necessaire, redemarrer le container depuis l'interface (sauf beepass-web et traefik qui sont critiques)
  4. Verifier dans /backoffice/error-logs si des erreurs API sont liees (souvent, une erreur API est le symptome d'un probleme de container)

Voir aussi : Monitoring serveur | Monitoring reseau | Centre de securite