Modifications entre les versions 2 et 7 (s'étendant sur 5 versions)
Version 2 à la date du 2008-06-15 22:12:52
Taille: 2202
Commentaire:
Version 7 à la date du 2009-07-20 15:50:05
Taille: 5590
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
= Installation et configuration de Nagios =
Ligne 3: Ligne 2:
[[http://wiki.auf.org/wikiteki/Projet/Supervision/AutomatisationdeNagios]Jettez un coup d'oeil ici aussi!]
== Fiche serveur ==
||Services || apache2, nagios, mysql, exim *||
||Sécurité ||sudo, sXid, Logcheck, PortSentry||
|| Outils || Git, iproute, mtr, trafshow, tcpdump, dig ||
[[http://wiki.auf.org/wikiteki/Projet/Supervision/AutomatisationdeNagios|Jettez un coup d'oeil ici aussi!]]
Ligne 10: Ligne 5:
L'installation est assez classique: Rien de plus simple:
Ligne 12: Ligne 7:
# aptitude install apache2 nagios-mysql mysql-server # aptitude install apache2 nagios3
Ligne 14: Ligne 9:
Pour la (re)configuration de la base de données associée à nagios, il est plus simple d'utiliser Pour la configuration du mot de passe de nagiosadmin
Ligne 16: Ligne 11:
# dpkg-reconfigure nagios-mysql # dpkg-reconfigure nagios3-common
Ligne 18: Ligne 13:
Ensuite, ne pas oublier d'ajuster les paramètres de connexion à la BD dans le fichier /etc/nagios/resources.cfg. Ce fichier n'est pas modifié par la commande précédente, mais empêchera la connexion à la bd si pas ajusté correctement.

Dans mon cas, j'ai utilisé le système d'authentification proposé par nagios par défaut, via le fichier /etc/nagios/htpasswd, que l'on peut modifier avec la commande htpasswd.
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).
Ligne 23: Ligne 17:
'''Section Non achevée''' 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.
Ligne 25: Ligne 19:
Personnellement, j'ai opté pour une configuration progressive des services/hôtes à surveiller. Pour tester mon installation, j'ai commencé par surveillé l'état d'une des passerelles du BAC. Mais voici quelques actions à faire juste après l'installation
1- Configurer les contacts des différents administrateurs. Pour cela, éditer les fichiers /etc/nagios/contactgroups.cfg et /etc/nagios/contacts.cfg en suivant les modèles proposés.
=== 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:
 * créer un fichier /etc/apache2/site-available/nagios
Ligne 28: Ligne 23:
contenus de contactgroups.cfg et contacts.cfg 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>
Ligne 30: Ligne 51:
2- Dans le fichier /etc/nagios/hosts.cfg, ajouter les instructions pour la surveillance des hôtes ciblés:  * Activer la config:
Ligne 32: Ligne 53:
contenu de hosts.cfg
}}}
3- Et dans le fichier /etc/nagios/services.cfg, les instructions pour les services à surveiller
{{{
contenu de services.cfg
web:/etc/apache2/sites-available# a2ensite nagios
web:/etc/apache2/sites-available# invoke-rc.d apache2 reload
Ligne 39: Ligne 57:
L'identification des services/hôtes à surveiller peut ensuite se faire au fur et à mesure du besoin. Mais mettre en place un contrôle comme celui du l'exemple de hosts.cfg ci dessus m'a permis de m'assurer que tout fonctionne et de déceller quelques erreurs de configuration rapidement.  * Ajouter nagios.cm.{auf,refer}.org dans le dns
 * Un simple http://nagios.cm.auf.org dans le navigateur + login et mot de passe et nous voilà dans l'interface web de nagios3.
=== config des hôtes ===
Basée sur l'approche décrite [[http://wiki.auf.org/wikiteki/Projet/Supervision/AutomatisationdeNagios|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):
{{{
#!/usr/bin/env python
# -*- 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: '''
 * Motivation du script: pouvoir ajouter de nouveaux templates sans avoir à modifier le script
 * Pour le moment il ne fait rien d'autres que d'afficher le contenu des fichiers .cfg générés (on peut facilement l'adapter pour écrire dans un fichier, mais j'y reviens)
 * De plus, je suppose que les fichiers .tmpl, et les fichiers .py et .cfg générés sont tous dans le répertoire courant. Comportement à corriger, j'y travaille.
 * Il y a plein de déchets dans ce script, mais ca semble donner de bons résultats. On jouera au puriste plus tard.
 * Un bon fichier make pour combiner les deux étapes décrites ci-dessus reste à faire.
 * Conclusion: je bavarde autant, parce que ce sera mon premier vrai (utile?) script écrit en python.

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:

  • créer un fichier /etc/apache2/site-available/nagios

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>
  • Activer la config:

web:/etc/apache2/sites-available# a2ensite nagios
web:/etc/apache2/sites-available# invoke-rc.d apache2 reload
  • Ajouter nagios.cm.{auf,refer}.org dans le dns
  • Un simple http://nagios.cm.auf.org dans le navigateur + login et mot de passe et nous voilà dans l'interface web de nagios3.

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:

  • Motivation du script: pouvoir ajouter de nouveaux templates sans avoir à modifier le script
  • Pour le moment il ne fait rien d'autres que d'afficher le contenu des fichiers .cfg générés (on peut facilement l'adapter pour écrire dans un fichier, mais j'y reviens)
  • De plus, je suppose que les fichiers .tmpl, et les fichiers .py et .cfg générés sont tous dans le répertoire courant. Comportement à corriger, j'y travaille.
  • Il y a plein de déchets dans ce script, mais ca semble donner de bons résultats. On jouera au puriste plus tard.
  • Un bon fichier make pour combiner les deux étapes décrites ci-dessus reste à faire.
  • Conclusion: je bavarde autant, parce que ce sera mon premier vrai (utile?) script écrit en python.

NacerAdamouSaidou/Nagios (dernière édition le 2009-07-30 15:37:08 par NacerAdamouSaidou)