Xytherion est une plateforme de monitoring de serveurs conçue pour ceux qui refusent de confier leurs données d'infrastructure à un tiers. Elle collecte, analyse et visualise l'état de vos machines en temps réel — CPU, mémoire, disque, réseau, processus, ports, connexions — sans jamais sortir de votre réseau local.
Pas de compte à créer, pas d'abonnement, pas de données qui partent vers le cloud. Ce qui se passe sur vos serveurs reste sur vos serveurs.
Ce que Xytherion surveille
- ✓CPU — Charge par cœur, pourcentage global, tendance
- ✓Mémoire — RAM, cache, swap, pourcentage d'utilisation
- ✓Disque — Espace utilisé, vitesse de lecture/écriture, IOPS
- ✓Réseau — Bande passante montante/descendante en Mo/s
- ✓Processus — Top CPU/RAM, anomalies comportementales
- ✓Ports — Tous les ports en écoute, classification risque
- ✓Connexions TCP — Connexions établies en temps réel
- ✓SSH — Historique des dernières connexions entrantes
- ✓Pare-feu — macOS (pf, pare-feu applicatif) · Linux (ufw, firewalld, nftables, iptables)
- ✓HTTP — Latence, statut, expiration SSL des sites surveillés
- ✓Historique — Moyenne par minute conservée 7 jours, même après un redémarrage
La plupart des outils de monitoring modernes fonctionnent selon le même schéma : vos métriques sont envoyées vers des serveurs distants, agrégées dans une base de données centrale, puis renvoyées vers votre navigateur via une API. Vous ne contrôlez pas où vos données vont, ni combien de temps elles sont conservées.
Xytherion prend le chemin inverse. L'agent tourne directement sur la machine à surveiller. Le dashboard s'y connecte en direct. Aucun intermédiaire. C'est le modèle de Zabbix ou Prometheus, mais sans base de données à déployer, sans YAML de 300 lignes, sans conteneurs.
100% Local
Aucune donnée ne quitte votre réseau
Zéro dépendance
Un seul binaire Go, aucune installation préalable
Temps réel
SSE à 1 seconde d'intervalle, aucun polling
Le système repose sur deux composants distincts qui communiquent directement sur votre réseau local.
L'agent (xytherion)
Un binaire Go compilé statiquement qui tourne sur chaque machine à surveiller. Il collecte les métriques toutes les secondes via gopsutil, les pousse dans un ring buffer en mémoire (3 600 points = 1 heure), évalue les alertes et diffuse tout via Server-Sent Events sur le port 9001.
Le dashboard (intégré à l'agent)
L'interface web est embarquée dans le binaire de l'agent et servie sur http://localhost:9001 — rien d'autre à installer. Elle reçoit les métriques en temps réel via SSE, affiche les 2 dernières minutes en direct, les courbes sur 7 jours, et peut suivre jusqu'à 2 serveurs depuis un seul onglet en plan Free.
Découverte automatique du réseau
Les agents s'annoncent mutuellement par UDP broadcast sur le port 9002. Dès qu'un nouvel agent démarre sur votre réseau local, il apparaît automatiquement dans l'onglet Réseau sans aucune configuration.
Quelle méthode choisir ?
- →Vous êtes sur macOS : utilisez Homebrew — c'est la méthode recommandée, elle gère les mises à jour automatiquement.
- →Vous êtes sur Linux (ou macOS sans Homebrew) : utilisez le Script curl — une seule commande, zéro prérequis.
- →Vous voulez personnaliser la compilation ou contribuer : utilisez les sources — nécessite Go 1.26+.
Ajouter le tap Xytherion
brew tap OpenDojoSystems0/xytherionInstaller l'agent
brew install xytherionVérifier l'installation
xytherion --version# → xytherion v0.3.0 (linux/amd64)brew upgrade xytherionDémarrage automatique
Le script d'installation vous propose ce choix automatiquement à la fin. Si vous avez répondu non et souhaitez l'activer après coup, voici les commandes selon votre OS.
macOS — launchd
# Activerlaunchctl load ~/Library/LaunchAgents/com.xytherion.agent.plist # Désactiverlaunchctl unload ~/Library/LaunchAgents/com.xytherion.agent.plistLinux — systemd
# Activersudo systemctl enable --now xytherion # Désactiversudo systemctl disable --now xytherion # Statutsystemctl status xytherionDésinstallation
Le script de désinstallation arrête l'agent, retire le service de démarrage automatique, supprime le binaire, et vous demande si vous souhaitez effacer les données locales (~/.xytherion/ — logs et données de l'agent).
curl -fsSL https://raw.githubusercontent.com/OpenDojoSystems0/xytherion-core/main/uninstall.sh | bash~/.xytherion/, et sur un serveur Linux /var/lib/xytherion/ et le jeton dans /etc/xytherion/) sont conservées par défaut — le script vous demande explicitement avant de les supprimer.pfctl nécessite les droits root. Lancez l'agent avec sudo xytherion pour activer cette fonctionnalité.Lancer l'agent sur le serveur à surveiller
xytherion# → xytherion listening on :9001 (hostname: mon-serveur)# → dashboard: http://localhost:9001Ouvrir le dashboard
Ouvrez http://localhost:9001 dans votre navigateur : le dashboard est intégré à l'agent, rien d'autre à installer. Depuis une autre machine, utilisez http://IP-du-serveur:9001.
Ajouter un deuxième serveur (optionnel)
Le dashboard se connecte tout seul à l'agent qui l'affiche. Pour suivre un autre serveur depuis le même onglet, donnez-lui un jeton (voir Configuration), entrez son adresse http://192.168.1.X:9001 dans la barre latérale et collez le jeton. Le plan Free suit jusqu'à 2 serveurs.
Xytherion intègre sept technologies propriétaires qui n'existent dans aucun autre outil de monitoring open source. Elles ont été conçues pour répondre à des problèmes concrets rencontrés lors de la gestion d'infrastructure en production.
Replay de pannes
ExclusifPro · BientôtRetournez dans le temps et rejouez frame par frame n'importe quelle période de l'historique. Un contrôleur de lecture (⏮ ◀ ▶ ⏸ ⏭) avec scrubber temporel et vitesses 1x/2x/5x vous permet d'analyser exactement ce qui s'est passé lors d'un incident — CPU, RAM, disque, réseau, processus — sans avoir eu besoin de configurer quoi que ce soit à l'avance.
Fingerprint de processus
ExclusifChaque processus accumule un profil comportemental en temps réel (fenêtre glissante de 60 secondes). Dès qu'il dévie de plus de 2 écarts-types (z-score ≥ 2.0) de sa baseline habituelle en CPU ou mémoire, un badge ⚡ 3.2σ apparaît à côté de son nom. Idéal pour détecter les fuites mémoire progressives ou les pics CPU anormaux.
Topology Map
ExclusifLes agents s'annoncent mutuellement par UDP broadcast toutes les 8 secondes sur le port 9002. Aucune configuration nécessaire — dès qu'un nouvel agent démarre sur votre réseau local, il apparaît automatiquement dans l'onglet Réseau avec sa carte SVG interactive et un lien direct vers son interface.
Time Capsule
ExclusifPro · BientôtCapturez un état de référence nommé de votre serveur à n'importe quel moment ("après-déploiement-v2"). À tout instant, comparez l'état actuel avec cette référence : delta CPU/RAM/disque, processus apparus ou disparus. Parfait pour vérifier l'impact d'un déploiement ou diagnostiquer une régression.
Drain Score
ExclusifPro · BientôtXytherion analyse la tendance de la RAM, du CPU et des disques et prédit le moment de saturation : "RAM saturée dans 4.2h", "Disque / plein dans 18 jours" — pour agir avant l'incident.
Process DNA
Exclusif15 processus courants (nginx, postgres, redis, sshd, node, java…) ont un profil comportemental attendu intégré. Si l'un d'eux dépasse ses seuils normaux (CPU ou mémoire), une violation DNA est émise immédiatement avec le détail. Permet de détecter un nginx qui consomme anormalement ou un sshd qui tourne en dehors de son enveloppe habituelle.
Dead Man's Switch
ExclusifLe dashboard distingue deux types de déconnexion d'un agent : l'arrêt gracieux (l'agent a envoyé un signal SSE shutdown avant de s'éteindre via SIGTERM) versus la perte de connexion brutale (crash, coupure réseau, reboot non planifié). Chaque situation affiche un message différent, permettant de distinguer une maintenance planifiée d'un incident réel.
Vue d'ensemble
Jauges CPU/RAM, sparklines, disques, I/O, processus
Alertes
Moteur avec seuils, historique 100 événements, webhooks
Sécurité
Scanner de ports, ports en écoute, audit SSH, état du pare-feu, Process DNA
Medikit
Scan sécurité complet, score /100, remédiation — Plan Pro (bientôt)
Moniteurs HTTP
Latence, statut HTTP, jours restants du certificat SSL
Webhooks
Discord, Slack, JSON générique — déclenché sur alerte
Réseau
Découverte LAN auto, carte topologique interactive
Historique
Courbes CPU et RAM sur 1 h, 24 h ou 7 jours (moyenne par minute, conservée sur disque)
Vue flotte
Jusqu'à 2 serveurs côte à côte avec statut agrégé (plan Free)
Page de statut
Vue simplifiée sur http://localhost:9001/status
Mode sombre
Bascule instantanée, persistée en localStorage
Replay
Relecture d'incidents — Plan Pro (bientôt)
L'agent se configure entièrement par flags CLI. Aucun fichier de configuration requis.
| Flag | Défaut | Description |
|---|---|---|
| --port | 9001 | Port d'écoute HTTP de l'agent |
| --interval | 1s | Intervalle de collecte des métriques |
| --ring | 3600 | Taille du ring buffer (nombre de snapshots) |
| --cors | localhost:3092, :3093 | Origines CORS supplémentaires (développement du dashboard) |
| --version | — | Affiche la version et quitte |
| --update | — | Installe la dernière version signée puis quitte (redémarrez ensuite le service) |
Exemples
# Agent standardxytherion # Port personnalisé, collecte toutes les 2 secondesxytherion --port 9002 --interval 2s # Afficher la versionxytherion --versionVariables d'environnement
| Variable | Rôle |
|---|---|
| XYTHERION_TOKEN | Jeton d'accès. Sans jeton, l'API n'est accessible que depuis la machine elle-même. |
| XYTHERION_ALLOW_REMOTE=1 | Autorise l'accès réseau sans jeton (déconseillé hors réseau de confiance). |
| XYTHERION_ALLOWED_HOSTS | Noms de domaine supplémentaires acceptés (protection anti DNS-rebinding). |
| XYTHERION_DATA_FILE | Fichier des moniteurs et webhooks (défaut : ~/.xytherion/data.json, ou /var/lib/xytherion/data.json en service Linux). |
| XYTHERION_AUTO_UPDATE=1 | Installe automatiquement les mises à jour signées (sinon : bandeau dans le dashboard). |
| XYTHERION_UPDATE_URL | Manifeste signé auto-hébergé, à la place des releases GitHub (HTTPS obligatoire). |
| XYTHERION_AUTOSTART=o|n | Pour install.sh : répond d'avance à la question du démarrage automatique (installation sans interaction). |
| XYTHERION_REMOVE_DATA=o|n | Pour uninstall.sh : supprime ou conserve les données sans poser la question. |
Accès à distance & jeton
Le dashboard s'ouvre sur http://localhost:9001. Par sécurité, sans jeton, l'agent n'écoute que sur la machine elle-même (127.0.0.1 et ::1) et ne s'annonce pas sur le réseau : personne d'autre ne peut lire vos métriques.
Pour consulter un serveur depuis une autre machine, définissez un jeton. Le script d'installation le fait automatiquement pour un service Linux (il l'affiche une fois et le range dans /etc/xytherion/agent.env). Ouvrez ensuite http://IP-du-serveur:9001 et collez le jeton dans « Jeton d'accès ».
# Lancer l'agent avec un jeton (générez-en un long et aléatoire)XYTHERION_TOKEN="$(openssl rand -hex 32)" xytherion # Voir le jeton d'un service Linux installé par le scriptsudo cat /etc/xytherion/agent.envPour changer le jeton d'un service Linux (par exemple s'il a fuité), remplacez-le dans /etc/xytherion/agent.env puis redémarrez le service :
echo "XYTHERION_TOKEN=$(openssl rand -hex 32)" | sudo tee /etc/xytherion/agent.env >/dev/nullsudo chmod 600 /etc/xytherion/agent.envsudo systemctl restart xytherionLe plus sûr est de ne pas ouvrir le port 9001 sur Internet : passez par un VPN ou par un tunnel SSH, puis ouvrez http://localhost:9001 sur votre ordinateur.
ssh -L 9001:127.0.0.1:9001 utilisateur@votre-serveurXYTHERION_ALLOWED_HOSTS. Derrière un reverse proxy installé sur la même machine, définissez toujours un jeton : l'agent voit alors toutes les requêtes comme locales.Mises à jour
L'agent vérifie toutes les 6 heures si une nouvelle version officielle est publiée. Quand c'est le cas, le dashboard affiche un bandeau « Xytherion vX est disponible » avec un bouton Installer la mise à jour : l'agent télécharge la nouvelle version, la vérifie, la remplace et redémarre tout seul — vos données et votre historique sont conservés.
# Ou en ligne de commandexytherion --updatesudo systemctl restart xytherion # Linux (service)launchctl kickstart -k gui/$(id -u)/com.xytherion.agent # macOS # Installation via Homebrew : passez par Homebrewbrew upgrade xytheriondev) ne se mettent jamais à jour automatiquement.Chaque snapshot émis via SSE est un objet JSON avec la structure suivante.
Snapshot complet
{ "agent_id": "mon-serveur-9001", "hostname": "mon-serveur", "os": "linux", "arch": "amd64", "time": "2026-07-02T20:13:57Z", "cpu": { "percent": 17.4, "per_core": [12.1, 22.3, 14.8, 20.1], "cores": 4 }, "memory": { "total": 8589934592, "used": 7516192768, "available": 1073741824, "cached": 2147483648, "percent": 87.5, "swap_total": 2147483648, "swap_used": 536870912 }, "disk": [ { "device": "/dev/sda1", "mountpoint": "/", "total": 107374182400, "used": 59055800320, "free": 48318382080, "percent": 55.0 } ], "disk_io": [ { "name": "sda", "read_mb_s": 0.5, "write_mb_s": 2.1, "read_iops": 12, "write_iops": 48 } ], "net": { "bytes_sent": 1234567890, "bytes_recv": 9876543210, "packets_sent": 12345, "packets_recv": 98765 }, "net_io": { "send_mb_s": 0.13, "recv_mb_s": 0.02 }, "load": [1.25, 1.10, 0.95], "uptime": 86400, "procs": [ { "pid": 1234, "name": "nginx", "cpu": 0.5, "memory": 0.3 } ]}Endpoints REST disponibles
| Endpoint | Méthode | Description |
|---|---|---|
| /api/stream | GET (SSE) | Flux temps réel de tous les événements |
| /api/metrics | GET | Dernier snapshot JSON |
| /api/history?n=60 | GET | N derniers snapshots (max 3600) |
| /api/trends?range=24h | GET | Historique long : 1 point par minute (1h, 24h ou 7d) |
| /api/alerts | GET | Alertes actives |
| /api/alerts/history | GET | Historique des 100 dernières alertes |
| /api/scan | GET | Résultat du dernier scan de ports |
| /api/scan/run | POST | Déclenche un nouveau scan |
| /api/monitors | GET/POST/DELETE | Moniteurs HTTP |
| /api/ssh | GET | Dernières connexions SSH |
| /api/firewall | GET | État du pare-feu |
| /api/ports | GET | Ports en écoute |
| /api/topology | GET | Agents découverts sur le LAN |
| /api/update | GET/POST | État des mises à jour / installer la dernière version signée |
| /api/webhooks | GET/POST/DELETE | Gestion des webhooks |
| /health | GET | Statut de l'agent |
Le moteur d'alertes est intégré à l'agent. Les seuils sont évalués à chaque collecte (toutes les secondes). Une alerte ne se déclenche que si le seuil est dépassé pendant 10 secondes consécutives, ce qui évite les faux positifs liés aux pics momentanés.
Seuils par défaut
| Métrique | Seuil | Gravité |
|---|---|---|
| CPU | 85 % | Avertissement |
| Mémoire RAM | 90 % | Critique |
| Disque (par partition) | 90 % | Critique |
| Charge système | 2.0 par cœur | Avertissement |
Format d'un événement d'alerte (SSE)
{ "id": "cpu", "metric": "CPU élevé", "message": "CPU à 87.3% (seuil 85%)", "value": 87.3, "threshold": 85, "severity": "warning", "active": true, "fired_at": "2026-07-02T20:15:00Z"}"active": false et cleared_at.L'onglet Sécurité regroupe cinq modules indépendants. Le Medikit (scan avancé) est disponible dans le Plan Pro — voir la section dédiée.
Scanner de ports
Scan TCP parallèle sur 30 ports réputés dangereux (SSH, Telnet, RDP, bases de données exposées, services legacy…). Chaque port reçoit un score de risque sur 5 niveaux : critique, élevé, moyen, faible, info. Un score de sécurité global est calculé à partir des ports ouverts.
Ports en écoute
Liste complète de tous les ports en état LISTEN, lus directement depuis les tables de sockets du noyau via gopsutil. Plus rapide et plus précis qu'un scan TCP — chaque port est accompagné de : protocole, adresse de bind, processus associé, PID et classification de risque.
L'état Ouvert indique que le port écoute sur 0.0.0.0 (accessible depuis le réseau). L'état Local indique un port lié à 127.0.0.1 (accessible uniquement en local).
Audit SSH
Lecture des 20 dernières connexions SSH via la commande last. Affiche les connexions réussies : utilisateur, IP source, terminal et date.
État du pare-feu
Détection automatique de l'outil actif. Sur macOS : pf (si l'agent tourne en root), sinon le pare-feu applicatif de macOS (Réglages Système → Réseau → Pare-feu). Sur Linux, dans cet ordre : ufw, firewalld (Fedora, RHEL, Rocky…), nftables (Debian 11+, Ubuntu récents) puis iptables. Affiche l'état (actif/inactif), le moteur détecté et le nombre de règles. Certains moteurs exigent les droits root : en service systemd, l'agent les possède.
Le Medikit est le module de sécurité proactive de Xytherion Pro. Il analyse l'intégrité de la machine elle-même : rootkits, malwares, fichiers système altérés, tâches cron suspectes, et durcissement de configuration — avec un score global sur 100 et des actions correctives intégrées (quarantaine, liste blanche).
Il orchestre les outils de sécurité existants (rkhunter, chkrootkit, ClamAV, Lynis), normalise leurs résultats, et vous permet de corriger ou d'ignorer chaque finding directement depuis le dashboard.
Disponible dans le Plan Pro :
- ◆7 moteurs de sécurité (natifs Go + outils externes)
- ◆Score de sécurité /100 avec Hardening Index
- ◆Remédiation intégrée : quarantaine & liste blanche
- ◆Historique des scans et journal d'audit
Xytherion envoie une notification (requête POST JSON) à chaque déclenchement ou résolution d'alerte. Jusqu'à 50 webhooks par agent.
Types supportés
| Type | Format envoyé | Compatible avec |
|---|---|---|
| discord | {"content": "🔴 [ALERTE] ..."} | Discord, Guilded |
| slack | {"text": "🔴 [ALERTE] ..."} | Slack, Mattermost |
| generic | {"hostname", "status", "alert", "timestamp"} | n8n, Make, Zapier, custom |
Ajouter un webhook via l'API
# Si l'agent a un jeton, ajoutez : -H "Authorization: Bearer VOTRE_JETON"curl -X POST http://localhost:9001/api/webhooks \ -H "Content-Type: application/json" \ -d '{ "name": "Alertes Discord", "url": "https://discord.com/api/webhooks/...", "type": "discord", "enabled": true }'Chaque technologie a été choisie pour une raison précise, pas par habitude.
Compilation en binaire statique unique — zéro dépendance runtime. Performance native pour le traitement temps réel. Cross-compilation triviale pour macOS/Linux/arm64/amd64. Goroutines pour la collecte parallèle sans overhead.
La seule bibliothèque Go qui abstrait correctement les appels système macOS (sysctl, IOKit) et Linux (/proc, /sys) derrière une API unifiée. Alternative : écrire 2000 lignes de code natif pour chaque OS.
Unidirectionnel serveur → client, pas de latence de polling, nativement supporté par tous les navigateurs, compatible avec les proxies HTTP. WebSocket aurait été surdimensionné — on n'a pas besoin de communication bidirectionnelle.
Le dashboard est une app React exportée en fichiers statiques (≈ 1 Mo) puis embarquée dans le binaire Go : aucun serveur Node.js à faire tourner, l'agent sert l'interface lui-même sur le port 9001. Les données temps réel arrivent côté navigateur via SSE.
Génération CSS à la compilation, aucun runtime. Note : Tailwind v4 (Lightning CSS) purge les sélecteurs custom — le mode sombre est donc géré via CSS custom properties injectées en JS directement sur document.documentElement.style.
Comprendre ces mécanismes vous permettra de mieux interpréter ce que vous voyez dans le dashboard.
Ring buffer
L'historique des métriques est stocké dans un anneau de taille fixe (3 600 entrées). Quand l'anneau est plein, le point le plus ancien est écrasé par le plus récent. Cela garantit une empreinte mémoire constante quelle que soit la durée de fonctionnement de l'agent. En parallèle, l'agent calcule une moyenne par minute (CPU, RAM, disque, charge, réseau) qu'il conserve 7 jours et enregistre sur disque toutes les 5 minutes : c'est l'historique long, qui survit aux redémarrages.
Calcul des deltas (I/O réseau et disque)
Les compteurs système (octets envoyés, octets lus) sont monotoniquement croissants depuis le démarrage. Pour obtenir un débit en Mo/s, l'agent soustrait la valeur précédente de la valeur actuelle et divise par l'intervalle. Une structure protégée par mutex conserve l'état précédent entre deux collectes.
Z-score (Fingerprint)
Le z-score mesure combien d'écarts-types une valeur s'éloigne de la moyenne. Un z-score de 2 signifie que la valeur actuelle est 2 fois l'écart-type au-dessus de la normale. Le seuil de 2.0 est un équilibre entre sensibilité (détecter les vraies anomalies) et précision (éviter les faux positifs).
z = |valeur_actuelle - moyenne| / écart_type z < 2.0 → comportement normalz ≥ 2.0 → anomalie signalée ⚡z ≥ 3.0 → anomalie significativeUDP broadcast (Topology)
Un paquet envoyé à 255.255.255.255:9002 est automatiquement livré à tous les hôtes du sous-réseau local. Chaque agent qui reçoit un broadcast d'un autre agent l'enregistre comme peer. Les peers non-vus depuis 30 secondes sont automatiquement purgés.
Est-ce que Xytherion envoie des données vers Internet ?+
Combien de mémoire consomme l'agent ?+
Peut-on surveiller des serveurs dans des VLANs différents ?+
Où sont stockées les données ? Que se passe-t-il si l'agent redémarre ?+
Peut-on utiliser Xytherion sur Windows ?+
Combien de serveurs peut-on surveiller simultanément ?+
Le Fingerprint de processus fonctionne immédiatement ?+
Comment fonctionne le Dead Man's Switch concrètement ?+
Prêt à surveiller vos serveurs ?
Xytherion v0.2 — Tout en local, rien dans le cloud.