Introduction
Le tableau de bord
Le tableau de bord est un observatoire des informations relatives aux serveurs. Chaque serveur est doté d'un état qui est la synthèse de différents états des agents disponibles sur ce serveur.
Etat d'un serveur
Si un problème est detecté sur un serveur, le serveur est affiché en rouge sur l'application zephir. Le tableau de bord détaillé permet de diagnostiquer le problème. Le système de diode permet par exemple de voir les services qui ne tournent pas :
Les exécutables
lanceur.py
: lancement régulier des agentswebsite.py
: génération du site web
Côté client :
lanceur.py
génère le xml et des bribes de
html périodiquement.website.py
génère le site web semi-statique.
Côté serveur :
collecteur.py
est responsable de la sérialisation du xml dans une
arborescence twisted.dirdbm
Les agents
Description
Un agent est un exécutable qui écrit deux sorties :
- une sortie en xml
- une sortie en html
La sortie xml d'un agent suit le modèle suivant :
<?xml version="1.0" encoding="utf-8"?> <!-- modele d'agent --> <agent nom="modele" date="" description="modele d'agent" status=""> <data nom="" description="" status=""> <ul id="nom_liste"> <li>ohhhh</li> <li>ahhhh</li> </ul> <table id="nom_dico"> <!-- comme en html , mettre un table <th> pour les headers --> </table> <p id="nom_variable">bla bla bla</p> </data> </agent>
La sortie html d'un agent est préformatée. Les données sont généralement présentées sous forme de liste ou de tableau avec parfois des images (diodes). Voici un exemple de sortie html :
<div class="titlediv"> <h1 class="newstitle"> Informations d'utilisation système </h1> <a name="uptime"/> </div> <div class="bodydiv"> <ul> <li>serveur en marche depuis : 1:23</li> <li>nombre d'utilisateurs actuel : 6</li> </ul> </div>
Un agent est en principe écrit en python de manière à pouvoir hériter
de la classe Agent
définie dans agent.py
.
Cette méthodologie permet de prédéfinir certains comportements pour l'agent.
Un agent en python
Un agent réalise un ou plusieurs tests. D'après les tests réalisés, il retourne un resultat global self.status
.
Si le statut de l'agent est à 0, cela veut dire que certains des tests ont échoués et qu'il y a un dysfonctionnement sur le serveur. Dans ce cas là, le serveur en question est signalé en rouge dans l'application Zephir.
Voici un squelette d'agent en python :
#!/usr/bin/env python # -*- coding: utf-8 -*- """Exemple d'agent """ import os,commands from agent import Agent class AgentExemple(Agent): """Exemple """ def __init__(self): self.name = "exemple" self.description="""Exemple d'agent""" Agent.__init__(self) # traitements brut = self._traitement() self.contenu_xml = traitement_xml(brut) self.contenu_html = traitement_html(brut) # écriture dans les fichiers self.write_html() self.write_xml() def _brut(self): """Appel et traitement des commandes """ # partie calcul resultat commande_a_personnaliser() # partie mise à jour du statut if test(resultat)==0 : self.set_status("0") # renvoi du résultat à formatter return resultat if __name__ == "__main__": AgentExemple()
Pour certains agents réalisant une multitude de petits tests, nous avons défini la notion de micro-agent.
Ainsi, certains agents utilisent les résultats d'autres agents de la classe MicroAgent
.
Le lanceur d'agents
Le lanceur d'agents parse le répertoire des agents et les exécute
périodiquement. Chaque agent se décrit dans le fichier de
configuration agents.cfg
.
agents.cfg
est un fichier csv (à syntaxe en séparateur ";"
). Il permet de répertorier les agents, de les classer en groupe pour
l'affichage, et de spécifier leur période de relancement en secondes.
La syntaxe est la suivante :
- nom de l'agent
- nom du script
- périodicité
- nom du groupe
- description du groupe
reseau;reseau.py;2;systeme;infos système diagnostic-amon;diagnostic-amon.py;4;services;état des services