Eole Documentation: Surveillance des serveurs

# Surveillance des serveurs

## 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 agents
- `website.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>

- listings/agent.xml

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>

- listings/agent.htm

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()

- listings/agent.py

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

- listings/agents.cfg

Index

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