Un peu de supervision avec Nagios, pourquoi pas! Jettez un coup d'oeil ici aussi!

Installation

Rien de plus simple:

# aptitude install apache2 nagios3

Pour la configuration du mot de passe de nagiosadmin

# dpkg-reconfigure nagios3-common

Cette commande crée le fichier /etc/nagios3/htpasswd.users qu'on peut utiliser plus tard pour gérer de nouveaux utilisateurs et leur mot de passe. Pour l'instant, pas de mysql (chaque chose en son temps).

Configuration

Il me semble que la configuration de nagios est une tâche de longue haleine. Alors je suis pas pressé, j'y vais au fur et à mesure que j'identifierais des besoins de monitoring. Par conséquent, cette section s'enrichira au fur et à mesure que j'avancerais dans cette aventure.

Intégration avec Apache2

Après installation du paquet nagios3, un fichier /etc/nagios3/apache2.conf est founit un lien vers ce fichier crée dans /etc/apache2/conf.d/nagios3.conf. Donc:

web:/etc/nagios3# cat /etc/apache2/sites-available/nagios 
NameVirtualHost *
<VirtualHost *>
        ServerAdmin webmaster@cm.auf.org
        ServerName nagios.cm.auf.org
        ServerAlias nagios.cm.refer.org

        #DocumentRoot /nagios3
        <Directory />
                #Options FollowSymLinks
                #AllowOverride None
                RedirectMatch ^/$ /nagios3/
        </Directory>

        ErrorLog /var/log/apache2/nagios-error.log

        LogLevel warn

        CustomLog /var/log/apache2/nagios-access.log combined
        ServerSignature On

        #SSLEngine            on 
        #SSLCertificateFile   /etc/apache2/ssl/server.crt
        #SSLCertificateKeyFile   /etc/apache2/ssl/server.key

</VirtualHost>

web:/etc/apache2/sites-available# a2ensite nagios
web:/etc/apache2/sites-available# invoke-rc.d apache2 reload

config des hôtes

Basée sur l'approche décrite Ici.

              fichiers *.tmpl
                    |
                    |
                    | via le script compile
                    |
                    |
                    v
              fichiers .py     +      fichiers .csv (ou d'autres!!!)
                    \                        /
                     -------------------------
                                |
                                | via le script makeit (que je propose)
                                |
                                v
                      fichiers *.cfg de Nagios

Script makeit (version alpha très très très .... très améliorable):

# -*- coding:utf-8 -*-

import os, sys, csv

def filtre(filename):
        """
        Le rôle de cette fonction est de retourner l'ensemble des fichiers
        templates compilés et pour lesquels il y a des données.
        """
        (root,ext) = os.path.splitext(filename)
        return os.path.exists(root + '.tmpl') and \
                os.path.exists(root + '.py') and \
                os.path.exists(root + '.csv')

def listdir(path):
        return filter(filtre, os.listdir(path))

def listmodule(path):
        liste = [os.path.splitext(fle)[0]  for fle in listdir(path)]
        set = {}
        map(set.__setitem__, liste, [])
        return set.keys()

def importing(modulename):
        print modulename
        return __import__(modulename)

"""
TODO: si on veux supporter d'autres types de fichiers!!!
def read (filename):
        
        Détermine le type de fichier de données et active la fonction
        de lecture correspondante.

        ext = os.path.splitext(filename)[1]
        read_func = getattr(__NAME__, "read_%s"% ext, read_csv)
        read_func(filename)
"""

def read_csv(csvfile):
        """
        Cette fonction parse le fichier de données au format csv
        et retourne le searchList à partir de ces données.
        La première ligne de données contient les champs de colonne.
        """
        infile = csv.reader(open(csvfile,"rb"))
        headers =  []
        isFirstLine = True
        searchList = []
        for row in infile:
                entry = {}
                if isFirstLine :
                        isFirstLine = False
                        headers = row
                        continue
                else:
                        for item in headers:
                                entry[item] = row[headers.index(item)]  
                searchList.append(entry)
        return searchList


for modulename in listmodule(os.curdir):
        module = importing(modulename)
        searchlist = read_csv("/root/"+ modulename + ".csv")
        for dic in searchlist:
                liste = []
                liste.append(dic)
                serv = getattr(module, modulename)(searchList=liste)
                print serv.respond()

Quelques éclaircissements: