Vous vous souvenez ? Il y a quelques semaines, je vous avais glissé Maintenant en pépite du Lundi matin, puis j’avais interviewé son créateur, Benjamin Touchard, en promettant un test plus complet. Eh bien voilà, promesse tenue, avec une instance qui tourne depuis plusieurs semaines sur mon vLab, et qui a eu le temps de me dire pas mal de choses… pas toutes agréables, d’ailleurs 😅.
Dans mon article sur le comparatif Portainer / Komodo / Dockge / DockHand / Arcane (et il y en a d’autres encore aujourd’hui …), à lire ici, je parlais d’outils qui pilotent vos conteneurs. Ici, rien de tout ça : pas de bouton « redémarrer », pas d’éditeur de stack. Maintenant observe, c’est tout. Et il le fait sur un périmètre assez large pour remplacer, dans un lab ou une petite équipe, au moins 4 ou 5 outils (ce que Benjamin m’expliquait dans l’interview : il en avait marre de combiner un outil pour ceci, un autre pour cela, etc.).
Ce que Maintenant couvre globalement aujourd’hui en terme d’observabilité :
- Les Conteneurs : auto-découverte Docker (mais aussi Swarm et Kubernetes), état, health checks, détection des boucles de redémarrage, métriques CPU/mémoire/réseau/disque, logs en streaming
- Endpoints HTTP/TCP : vérifs de disponibilité avec temps de réponse et historique d’uptime
- Les Certificats TLS : suivi des expirations et validation de la chaîne
- Heartbeats : surveillance de vos tâches cron
- Mises à jour d’images : détection des nouvelles versions (digest OCI ou semver) + CVE
- Sécurité : score de posture, ports exposés, conteneurs privilégiés
- Alertes possibles via : webhook, Discord, e-mail, Telegram, Slack, Teams, avec politiques d’escalade
- Page de statut publique
- Un serveur MCP intégré (51 outils d’après la doc) pour que votre assistant IA préféré aille interroger votre monitoring.



Côté technique : un seul binaire/conteneur, pas de Redis, pas de file de messages, stockage dans SQLite (PostgreSQL possible si vous avez une flotte). Licence Apache 2.0 pour l’édition Community.
Les version de Maintenant
Maintenant est Open Source, totalement assumé, avec le même binaire pour tout le monde : c’est une clé de licence qui débloque des limites. d’ailleurs, vous le verrez, Benjamin m’a donné une version pro pour tester confortablement, merci encore à lui.
| Édition | Principe | Ce qu’elle apporte (d’après la doc) |
|---|---|---|
| Community | Gratuite, open source (Apache 2.0) | Limites sur les monitors manuels, 7 jours d’historique seulement, alertes webhook + Discord |
| Personal | Achat unique, sans expiration | Jusqu’à 20 hôtes distants, e-mail + Telegram, CVE, 30 jours d’historique, idéal pour un vLab |
| Pro | Abonnement mensuel | Hôtes illimités, Slack/Teams, escalade, 90 jours d’historique, page de statut avancée |
Installation
Là où ça devient presque frustrant de simplicité (je me répète, je sais, c’est un peu la marque des bonnes pépites). Un docker-compose.yml, un docker compose up -d, et c’est parti.
Voici le manifest :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# docker-compose.yml services: maintenant: image: ghcr.io/kolapsis/maintenant:latest ports: - "9080:8080" read_only: true security_opt: - no-new-privileges:true tmpfs: - /tmp:noexec,nosuid,size=64m volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /proc:/host/proc:ro - maintenant-data:/data environment: MAINTENANT_ADDR: "0.0.0.0:8080" MAINTENANT_DB: "/data/maintenant.db" MAINTENANT_LICENSE_KEY: "xxxxxxxx" restart: unless-stopped volumes: maintenant-data: |
Quelques points à noter, et que la doc dit elle-même, bravo pour la transparence : Monter docker.sock, même en :ro, c’est équivalent à donner les clés root de la machine : le :ro ne bloque pas les écritures via l’API Docker. Maintenant ne fait que des lectures, donc la doc recommande de passer par un docker-socket-proxy (qui répond 403 aux écritures) et de pointer dessus. De même, aucune authentification intégrée n’existe. Je vous recommande (comme la doc ^^) de mettre Maintenant derrière un solution traefik/middleware OIDC/pocketID par exemple pour sécuriser tout ça.
Il existe aussi une installation native sous Linux, des manifests Kubernetes et un chart Helm, pour ceux qui préfèrent.
Le tour du propriétaire
J’avoue que je n’ai pas eu le temps (jusqu’à maintenant …) de corriger toues les alertes présentes, honte à moi… mais bon ça reste du vlab perso ou il n’y a pas grand chose d’exposé réellement (quasi 100% de mes applis internes sont protégées par un traefik, un firewall Unifi avec sa sonde IDS/IPS … et dans quelques temps un Waf Open Source, dont je vous parlerai très bientôt (teasing inside spotted !).
Mon instance surveille 27 conteneurs (Gitea, Immich ×2, Traefik, Jellyfin, Trilium, FreshRSS, LogStream, Arcane etc. …), bref, ma ménagerie habituelle.
Le dashboard


Première impression : c’est beau, c’est sobre, c’est lisible (et je vous ai déjà dit que j’était très sensible à l’interface). Tous les monitors s’affichent aussi en grille, groupés par type (heartbeats, conteneurs, certificats) ou par sévérité.
Les conteneurs

Les conteneurs ont été découverts automatiquement et regroupés par projet Compose. Pour chacun : état, tag, statut de mise à jour, badges de CVE, mini-graphes CPU/mémoire/logs stdio.
Pour personnaliser le comportement, on passe par des labels Docker (et c’est un bandeau directement dans l’interface qui vous le rappelle) : maintenant.ignore : masquer un conteneur ; maintenant.group : le ranger dans un groupe ; maintenant.alert.severity : régler la sévérité de l’alerte
Les endpoints HTTP/TCP, les certificats TLS, les Heartbeats



Quelques screenshots pour vous montrer « at glance » le look’n feel de l’interface.
Pour les Endpoints HTTP et les Certificats, simplissime et ça peut remplacer une Uptime Kuma, si vous ne faites que ça pour la supervision.
Pour les Heartbeats, le principe est cool je trouve : chaque monitor a une URL de ping unique. Votre tâche cron/systemd timer/script fait un curl dessus à la fin (/ping/<uuid>, avec /$? pour remonter le code de sortie, ou /start pour mesurer la durée). Si le ping n’arrive pas avant l’échéance (intervalle + délai de grâce), alerte « deadline missed ».
Les mises à jour d’images

Maintenant scanne également les registres : par digest pour les tags flottants (latest), ou par comparaison semver en respectant les variantes de tag (-alpine, -bookworm…). On peut contraindre avec maintenant.update.tag-include / tag-exclude, épingler une version ou exclure une image. Consultez la documentation pour des détails sur cette partie, que je n’ai pas creusé pour le moment.
Mon bilan : 3 critiques, 1 recommandée, 23 à jour. Les trois critiques sont parlantes : vblogmail-mariadb-1 : MariaDB 11.8 → 13.0, immich-redis-killy et immich-redis-bzh Redis 6.2-alpine → 8.10-alpine
Je rappelle pour les alertes CVE que c’est un vlab perso hein … installez Maintenant et donnez moi vos propres alertes qu’on discute ^^
Security Posture : le score qui pique

C’est probablement l’écran super intéressant permet de vous situer au niveau sécu. Pour moi, un score global de 84/100 sur mes 27 conteneurs, décomposé en : CVE, 179 (issues des images), Network exposure : 25, Updates : 4. Bon … certes 🙂
Sur les nombreux incidents « Port exposed on all interfaces (8080/tcp) » : en gros, Maintenant a repéré que mes conteneurs publient leurs ports sur 0.0.0.0 au lieu de 127.0.0.1. C’est vrai, c’est mon vLab, je confirme, ça se corrige, et c’est exactement le type de petite négligence qui peut vous couter cher en production. N’exposez jamais des ports que vous n’utilisez pas ! security by design 🙂
Petite nuance honnête : c’est une analyse de base (ports, privilèges, CVE de l’image, âge). Ce n’est pas un scanner de vulnérabilités à la Trivy/Grype, ni un EDR. Mais pour un « ah tiens, ça je n’y avais pas pensé ou j’avais zappé », c’est déjà très bien.
Pour les alertes, canaux, webhooks, escalade, je vous laisse avec des photos d’écran qui se suffisent à elles-mêmes je pense :





Une page de statut publique (composants, incidents, fenêtres de maintenance, abonnés, SMTP, personnalisation), mise à jour en direct. Je ne l’ai pas configurée pour l’instant (pas de composants), mais l’onglet montre bien l’ambition, à découvrir de votre côté en fonction de vos besoins. Enfin, pour surveiller d’autres machines depuis cette même instance : on génère un jeton d’enrôlement, on lance la commande d’installation sur l’hôte distant, et un agent léger remonte son état en gRPC avec TLS (une clé par agent, avec mise en tampon locale en cas de coupure réseau). Sur mon instance, 0 agent : un seul serveur pour le moment.
Maintenant vs les autres ?
Pour situer : Uptime Kuma fait très bien la disponibilité (endpoints, ping, certificats) mais ne regarde pas dans vos conteneurs ; Portainer/Arcane/Komodo & co. pilotent mais ne surveillent pas vraiment ; Beszel/Netdata/Grafana font les métriques mais pas la sécurité ni les heartbeats.
Maintenant se place au milieu : un tableau de bord de santé et de risque pour un parc Docker/K8s de taille petite à moyenne.
La gestion des faux positifs mériterait un peut d’outillage pour faire du acknowledge par lot : sur un vLab où tout est exposé sur 0.0.0.0 par flemme, le dashboard est rouge en permanence. Utile pour se faire engueuler, moins pour avoir un monitoring « vert ». Il faut prendre le temps d’acquitter ce qu’on assume.
De mon côté honnêtement je me pose la question d’utiliser Maintenant à la place de Uptime Kuma, car plus puissant notamment côté sécu, pour MON usage.
Si vous cherchez un monitoring Docker tout-en-un, auto-hébergé, sans usine à gaz, allez le tester : l’édition Community est gratuite, et le projet évolue vite. Mettez-le derrière un reverse proxy avec authentification et passez par un socket-proxy et vous aurez potentiellement une excellente solution d’observabilité à l’échelle d’une production pour PME.
Références :
– Le site offciel de Maintenant : maintenant.dev
– Sa documentation : docs.maintenant.dev
– Sur GitHub : https://github.com/kOlapsis/maintenant
– Benjamin Touchard sur LinkedIn : https://www.linkedin.com/in/benjamin-touchard/
– Mon interview de Benjamin : Interview de Benjamin Touchard
