Z-Eye est une solution libre basée sur plusieurs autres outils libres (netdisco, MRTG, icinga…) destinée à offrir une solution de supervision système, réseau et sécurité unifiée, tout en permettant la gestion complète d'un réseau.
En avril dernier était présenté la version 1.0 de Z-Eye. Depuis, elle a fait un bon bout de chemin, que ce soit en amélioration de code ou en modernisation de l'interface. De nouvelles fonctionnalités sont apparues afin d'améliorer le quotidien des techniciens et administrateurs gérant l'outil.
Mercredi 31 juillet Z-Eye est sortie dans sa version 1.2.
Le developpeur a choisi de zapper la présentation de la 1.1, qui n'est au final qu'une version de modernisation, n'apportant pas de nouveautés fonctionnelles importantes.
Pour rappel, Z-Eye s'appuie sur FreeBSD 9.1 et est codée à l'origine en PHP
Sommaire
Beaucoup d'améliorations ont été apportées durant ces deux dernières versions, visant à alléger la charge de l'interface web, mais également à moderniser le code, améliorer les performances globales et l'expérience utilisateur.
Service Z-Eye
Un nouveau service expérimental est apparu dans la version 1.1 destiné à remplacer les tâches cron faisant appel à divers scripts PHP. Ce service est développé en python (2.7). Bénéficiant ainsi des technologies de python telles que le multithreading, il a été possible de paralléliser beaucoup de tâches, augmentant la charge CPU sur le serveur mais diminuant énormément les temps de collecte (suivant les tâches cela peut aller de 1/2 à 1/50).
En 1.2 le service Z-Eye s'est étoffé puisqu'on lui a permis de faire disparaître 80% des tâches cron en service, et intègre deux nouveaux composants:
- DatabaseUpgrader: un outil qui permet de mettre automatiquement la base de données à jour lors du lancement du service (après une mise à jour de la solution), ou bien de la demander à tout moment sans relancer un service en cours
- DHCPManager: un outil de distribution de configuration DHCP, j'y reviendrai plus loin
Modernisation du code
PHP5
Beaucoup de code était écrit en PHP 4, basé sur mon expérience personnelle du PHP. Les constructeurs et classes ont été modernisées afin d'utiliser les constructeurs PHP5, classes abstraites et finales
Le code a été également aéré, et des commentaires ont été ajoutés là où cela s'avère nécessaire pour la compréhension du code. Un gros travail de normalisation de l'écriture est en cours, continuant pour la prochaine version 1.3. La libFSS (le coeur de développement de Z-Eye) a déjà été normalisée en profondeur, mais le plus gros reste à faire, sur la couche Z-Eye. Cela ne veut pas pour autant dire que le code est incompréhensible, bien au contraire !
Ajax, jQueryUI
jQuery et jQueryUI ont conquis le coeur du développement de Z-Eye. L'ancien code statique a été basculé sur une version dynamique, apportant plus de modernisme à l'application et allégeant le contenu des requêtes échangées entre serveur et clients.
On retrouve beaucoup de modules basés sur des onglets de type jQueryUI, mais également beaucoup de fenêtres de formulaires basées sur les popup jQueryUI.
Gestionnaire IP
Le gestionnaire IP est un tout nouveau module basé sur l'ancien module de collecte DHCP, permettant de gérer des DHCP UNIX de type ISC-DHCP.
Ce type de DHCP étant le plus répandu, il a été nécessaire d'apporter un soin tout particulier à sa configuration. Z-Eye sait gérer la majorité des configurations DHCP, mais ne gère pas leur partie générique (options globales).
En termes de fonctionnalités, on retrouvera dans l'IPM Z-Eye les fonctionnalités suivantes:
- déclaration de serveurs DHCP : par le biais connexion SSH, hérité des version 1.0 et 1.1 ;
- déclaration de clusters DHCP : notion propre à Z-Eye permettant de regrouper la configuration par ensemble. Pour ISC-DHCP, seuls deux membres sont autorisés, dû à la notion de failover peer ;
- déclaration d'options DHCP : personnalisées, valuées et groupées, avec possibilité de les relier à des sous-réseaux ou des hôtes ;
- déclaration de sous-réseaux DHCP : routeur, DNS principal, secondaire, durée de baux… avec ajout de quelques données administratives (vlan ID, alias et description) ;
- gestion des IP par sous-réseaux : possibilité d'ajouter/exclure des plages d'adresses IP à la volée, possibiliter de mettre des données administratives sur les adresses IP (commentaire), réserver une adresse IP (nom d'hôte, adresse MAC) et lui attribuer des groupes d'options DHCP. Lors d'une réservation dans une plage dynamique, la plage est automatiquement coupée afin de respecter les best practices ISC ;
- gestion fine des droits : suivant le même modèle que pour le gestionnaire de commutateurs, on retrouvera les droits suivants : lecture, gestion des serveurs, utilisation des outils avancés, gestion des (groupes d') options DHCP, gestion des ranges, des IP, des subnets… Ces droits peuvent être attribués de manière globale, et, pour certains, par sous-réseau.
Le service Z-Eye intègre également la partie permettant de pousser les configurations DHCP provenant de Z-Eye. Le service se connecte en SSH à chacun des serveurs et pousse la configuration dans des fichiers dédiés (chemin personnalisable). Il écrit également la valeur 1 dans un fichier de /tmp afin qu'un script puisse redémarrer le service DHCP local. Afin de ne pas redémarrer le service toutes les minutes, la configuration est comparée (hash md5) afin de savoir si elle doit être modifiée ou non.
Le délai de développement n'a malheureusement pas permis d'éliminer la tâche cron de collecte des données DHCP, néanmoins celle-ci devrait être éliminée pour la version 1.3, et intégrée au service Z-Eye (DHCPManager), permettant d'assurer une meilleur cohérence dans la collecte des données.
Plus d'informations sur le gestionnaire IP
Mises à jour logicielles
Entre temps, les logiciels libres utilisés ont évolué, apportant leurs lots de nouveautés et de fixes. On notera surtout:
- Netdisco 1.3.1
- Icinga 1.9.3
- PERL 5.16.3
- Apache 2.4.6
Le plus compliqué dans ces upgrades a été de devoir patcher netdisco afin de l'obliger à se construire avec Apache 2.4 (bien que mod_perl ne soit pas utilisé car pas compatible avec Apache 2.4), et de revoir le système de droits d'Apache, qui a changé depuis la version 2.2. L'upgrade a néanmoins permis de bénéficier de l'unification d'Apache MPM au sein d'Apache. Apache2.4 et MPM ont permis une amélioration notable des performances en terme de temps de réponse.
Vous trouverez la liste complète des logiciels utilisés dans cette version ici: http://z-eye.org/Liste_des_ports_%281.2%29
Correctifs
Hormis quelques correctifs d'affichage, Z-Eye était pénalisé par peu de bugs gênants :
- quelques corrections sur les info-bulles ;
- des corrections de stabilité sur différents modules ;
- quelques problèmes de droits résolus ;
- d'autres corrections plus ou moins intéressantes.
Performances
Plusieurs correctifs ont été ajoutés afin de mettre en cache divers éléments et améliorer ainsi les performances:
- Les communautés SNMP sont désormais mises en cache au lieu d'être demandées pour chaque appel à une MIB ;
- Le speed reporting lit le fichier de statut icinga au lieu de parser l'interface web ;
- La modification d'un port de commutateur (via SNMP) ne modifie que les données nécessaires (excepté le trunk allowed vlan) ;
- Les groupes de l'utilisateur sont mis en cache (optimisation système de droits) ;
- Un appel SQL a été optimisé afin de ne demander que le strict minimum à la base de données.
- Les performances de mise en cache SNMP ont été améliorées entre la version 1.1 et 1.2
Chiffres
Quelques chiffres concernant Z-Eye:
- Nombre de fichiers PHP: 120
- Nombre de fichiers Python: 18
- Nombre de lignes de code totales: 33373 (sans lignes vide: 30564)
- Nombre de lignes de code Python: 2183 (sans lignes vide: 1944)
- Nombre de lignes de code PHP: 28471 (sans lignes vide: 26247)
- Nombre de lignes de code CSS: 975 (sans lignes vide: 849)
- Nombre de lignes de code JS: 1744 (sans lignes vides: 1524, environ 3/4 sont des JS externes)
Nombre de différences entre la version 1.0 et 1.2:
git diff --shortstat cd647fa2ce50b7c02d9337abce3e2d8379693fe1 126f982325f9aa18fee18021bdc1464cb47f31dd
267 files changed, 29991 insertions(+), 22871 deletions(-)
Nombre de différences entre la version 1.1 et 1.2
git diff --shortstat 9fc3334bcba6c276105c2bd7e29a8bdbdbf90648 126f982325f9aa18fee18021bdc1464cb47f31dd
141 files changed, 10998 insertions(+), 4455 deletions(-)
C'est à vous !
Toute suggestion, remarque ou idée est bienvenue, afin que chacun puisse apporter sa pierre à l'édifice.
Je cherche toujours quelques contributeurs au développement de l'outil (PHP/Python), ayant encore énormément d'idée afin d'étendre la portée de Z-Eye sur un réseau (j'insiste bien sur l'aspect réseau). Le développement devrait s'accélérer dans les prochains mois, ayant un peu plus de temps libre. Que ce soit un correctif, une fonction, une amélioration de code existant, toute contribution est la bienvenue !