Surveillance des serveurs

  1. Introduction
  2. Les exécutables
  3. Les agents
  4. Le lanceur d'agents

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

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 :

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 :

  1. nom de l'agent
  2. nom du script
  3. périodicité
  4. nom du groupe
  5. description du groupe
Ce qui donne par exemple :
reseau;reseau.py;2;systeme;infos système
diagnostic-amon;diagnostic-amon.py;4;services;état des services

Index

mar mar 23 09:10:33 CET 2004 Version: 0.7