Authentification LDAP pour l’interface Web de Nagios

L’idée est d’avoir un .htaccess permettant l’authentification avec LDAP afin d’accéder à l’interface web de Nagios (version 2.0).

Extrait de mon httpd.conf (apache version 2.2) :


ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"


   Options ExecCGI
   AllowOverride All
   Order allow,deny
   Allow from all


Alias /nagios "/usr/local/nagios/share"


   Options None
   AllowOverride All
   Order allow,deny
   Allow from all


Création du .htaccess dans /usr/local/nagios/share et dans /usr/local/nagios/sbin :


AuthName "Controle d'acces"
AuthType Basic
AuthBasicProvider ldap
AuthBasicAuthoritative On
AuthzGroupFileAuthoritative On
AuthLDAPCompareDNOnServer on
AuthLDAPURL ldap://annuaire.mon-domaine.fr/ou=people,dc=mon-domaine,dc=fr?uid?sub?(objectClass=posixAccount)
require ldap-filter |(uid=utilisateur1)(uid=utilisateur2)(uid=utilisateur3)

Je modifie le cgi.cfg de la sorte :


use_authentication=1
#default_user_name=nagios
authorized_for_system_information=utilisateur1,utilisateur2,utilisateur3
authorized_for_configuration_information=utilisateur1,utilisateur2,utilisateur3
authorized_for_all_services=utilisateur1,utilisateur2,utilisateur3
authorized_for_all_hosts=utilisateur1,utilisateur2,utilisateur3

#Autorisation de l'execution de commandes via l'interface de nagios
#authorized_for_system_commands=nagiosadmin,nagios
#authorized_for_all_service_commands=nagiosadmin
#authorized_for_all_host_commands=nagiosadmin

Publié dans Sécurité, Supervision | Commentaires fermés

Générer automatiquement les fichiers de configuration de Nagios

Les fichiers de configurations de Nagios (version 2.0) sont assez fastidieux à remplir si l’on doit y ajouter fréquement des nouvelles machines. Voici deux scripts que j’utilise pour m’éviter la saisie à la main de toutes les nouvelles bornes wifi…

PS : Je répertorie ces bornes dans le fichier bornes.wifi suivant :


bornesA: maborneA1
bornesA: maborneA2
bornesA: maborneA3
bornesB: maborneB1
bornesC: maborneC1
...

Scripts config-hosts-wifi-nagios.pl pour la génération du fichier hosts.cfg :


#!/usr/bin/perl
# Ce script permet d'eviter la saisie fastidieuse du fichier de configuration nagios : hosts.cfg
#
# Il permet d'ajouter toutes les bornes wifi dans nagios
#
# Exemple d'emploi: ./config-hosts-wifi-nagios.pl > /usr/local/nagios/etc/hosts-wifi.cfg
# Dans nagios.cfg, il faut indiquer :
# cfg_file=/usr/local/nagios/etc/hosts-wifi.cfg
$f1 = "/home/wifi/bornes.wifi";
open (IN,$f1) || die "impossible d'ouvrir le fichier $f1 \n";

while () {
        chop;
        $ligne=$_;
        ($site,$borne)= split(/ /,$ligne);
        $ip= `nslookup $borne | tail -n 2 | sed '/^[[:space:]]*\$/d' | sed 's/Address:\ //g'`;
        print STDOUT  "

define host{
        use                     generic-host            ; Name of host template to use
        host_name               $borne
        alias                   $borne
        address                 $ip        check_command           check-host-alive
        max_check_attempts      10
        notification_interval   120
        notification_period     24x7
        notification_options    d,r
        contact_groups  admins
        }"
;
}

Exemple d’utilisation :


perceval:~# perl /usr/local/scripts/config-hosts-wifi-nagios.pl > /usr/local/nagios/etc/hosts-wifi.cfg

Scripts config-hostgroups-wifi-nagios.sh pour la génération du fichier hostgroups.cfg :


#!/bin/sh
# Ce script permet d'eviter la saisie fastidieuse du fichier de configuration nagios : hostgroups.cfg
#
# Il permet d'ajouter toutes les bornes wifi dans le hostgroup "wifi-ap"
#
# Exemple d'emploi: ./config-hostgroups-wifi-nagios.sh > /usr/local/nagios/etc/hostgroups-wifi.cfg
# Dans nagios.cfg, il faut indiquer :
# cfg_file=/usr/local/nagios/etc/hostgroups-wifi.cfg

fichier2conf=/home/wifi/bornes.wifi
ligne=`cat $fichier2conf | cut -d' ' -f2 | tr '\n' ','`;
echo "define hostgroup{"
echo "   hostgroup_name wifi-ap"
echo "   alias Points d'acces WIFI"
echo "   members $ligne"
echo "}"
echo

Exemple d’utilisation :


perceval:~# sh /usr/local/scripts/config-hostgroups-wifi-nagios.sh > /usr/local/nagios/etc/hostgroups-wifi.cfg

Avant de relancer Nagios, il faut s’assurer que les fichiers de configuration que l’on a générés aient été inlus dans le fichier de configuration général nagios.cfg :


cfg_file=/usr/local/nagios/etc/hosts-wifi.cfg
cfg_file=/usr/local/nagios/etc/hostgroups-wifi.cfg

Ultime vérification de la configuration de Nagios :


perceval:~# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cf

Si c’est OK, on peut relancer Nagios :


perceval:~# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cf

Publié dans Supervision | Commentaires fermés

Configurer le plugin Java JRE pour firefox

Lien vers le fichier « auto-extractible » :
http://www.java.com/fr/download/manual.jsp

A modifier suivant les configurations :


# Installation de JRE :
su
chmod a+x jre-1_5_0_06-linux-i586.bin
./jre-1_5_0_06-linux-i586.bin
cp -R jre-1_5_0_06/ /usr/java/

# Configuration pour Firefox :
ln -s /usr/java/jre-1_5_0_06/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/firefox-1.0.7/plugins/

# Suppression du fichier d'installation :
rm jre-1_5_0_06-linux-i586.bin

Publié dans web | Commentaires fermés

Remplacer un retour chariot par un espace

Après des essais avec sed et awks, je me suis aperçu que tr le faisait également très bien!

L’exemple suivant montre le remplacement d’un retour à la ligne par une virgule suivie d’un espace :


perceval:~# cat monfichier.txt
1
2
3
perceval:~# cat monfichier.txt | tr -s "\n" ", "
1, 2, 3,

Publié dans Shell | Commentaires fermés

Liens extérieurs sur une page Web

Voici le code css pour marquer les liens extérieurs (avec l’icone lien extérieur) :


a.liens_ext:link {
	color:blue;
	background: url(liens_ext.png) no-repeat 100% 0;
	padding: 0 15px 0 0;
}

a.liens_ext:visited {
	color:blue;
	background: url(liens_ext.png) no-repeat 100% 0;
	padding: 0 15px 0 0;
}

Exemple d’utilisation :


http://www.univ-brest.fr

Ce qui donne : http://ww.univ-brest.fr.

Publié dans web | Commentaires fermés

Insertion de code source dans un post WordPress

L’objectif est de pouvoir insérer du code source dans les posts de WordPress. L’idée est d’éviter les retours à la ligne automatique… en ajoutant une scrollbar.

Voici le code css associé à la balise pre que j’utilise dans mes posts WordPress :


pre {
	font-family: monaco, "Courier New", monospace;
	font-size: 1.1em;
	color: #666;
	width: 99%;
	padding-top:15px;
	padding-bottom:15px;
	padding-left:5px;
	padding-right:5px;
	overflow: scroll;
	border: 1px solid #ccc;
}

Ce qui permet d’avoir un affichage correcte sous IE (et c’est bien sûr parfaitement valide sous Firefox).

Bilan: En fait, pour avoir un rendu correct sous IE, je suis obligé d’avoir une scrollbar horizontale et verticale même si mon texte ne dépasse pas la largeur du cadre… merci IE! :(

Publié dans web | Commentaires fermés

Graphiques des températures avec RRDTool

Comment grapher les températures de Brest sans sonde?

En allant chercher les informations sur www.weather.com !

1. Installer RRDTool :


perceval:~# apt-get install rrdtool
perceval:~#

2. Créer le répertoire où sera placée la base de données Round Robin (ainsi que les graphiques) :


perceval:~# mkdir /home/temperatures
perceval:~# cd /home/temperatures

3. Créer la base de données :


perceval:~# /usr/bin/rrdtool create temperature.rrd --step 300 \
DS:temp:GAUGE:900:-50:100 \
RRA:LAST:0.5:1:288 \
RRA:AVERAGE:0.5:6:336 \
RRA:AVERAGE:0.5:12:8760 \
RRA:MAX:0.5:12:8760 \
RRA:MIN:0.5:12:8760

4. Ecrire le script /home/temperature/temperature.sh :


#!/bin/sh
logfile="/home/temperature/tempCourante";
rrdfile="/home/temperature/temperature.rrd";
htmldir="/home/temperature";
#
wget -nv -o /dev/null -O /dev/stdout http://fr.weather.com/weather/local/FRXX0019 | grep "ressentie" | cut -d"&" -f2 | sed 's/nbsp;//g' > $logfile
#
value=$(tail $logfile)
#
/usr/bin/rrdtool update $rrdfile N:$value
#
# Create 24hrs image
/usr/bin/rrdtool graph $htmldir/tempDaily.png --title="Variations sur 24hrs (moyenne sur 5 minutes)" \
        DEF:tempC=$rrdfile:temp:LAST -v"° Celsius" -aPNG -h250 -w700 \
        LINE2:tempC#DD0000:"Température" \
        CDEF:nodat=tempC,tempC,+,UN,INF,UNKN,IF \
	HRULE:0#0000DD \
        AREA:nodat#BBBBBB:"NoData"

# Create 7 days image
/usr/bin/rrdtool graph $htmldir/tempWeekly.png --title="Variations sur 7 jours (moyenne sur 1 hr)" \
	DEF:tempC=$rrdfile:temp:AVERAGE  -v"° Celsius" -aPNG -h150 -w700 -s-604800 \
        LINE2:tempC#DD0000:"Température" \
        CDEF:nodat=tempC,tempC,+,UN,INF,UNKN,IF \
	HRULE:0#0000DD \
        AREA:nodat#BBBBBB:"NoData"
#
# Create 28 days image
/usr/bin/rrdtool graph $htmldir/tempMonthly.png --title="Variations sur 28 jours" \
	-v"° Celsius" -aPNG -h150 -w700 -s-2419200 \
        DEF:tempC=$rrdfile:temp:AVERAGE \
        LINE2:tempC#DD0000:"Température" \
        CDEF:nodat=tempC,tempC,+,UN,INF,UNKN,IF \
	HRULE:0#0000DD \
        AREA:nodat#BBBBBB:"NoData"
#
# Create 60 days image
/usr/bin/rrdtool graph $htmldir/temp2Monthly.png --title="Variations sur 60 jours (-60j < 0)" \
        -v"° Celsius" -aPNG -h150 -w700 -l0 -u25 -s-5184000 \
        DEF:tempC=$rrdfile:temp:AVERAGE \
        LINE2:tempC#DD0000:"Température" \
        CDEF:nodatp=tempC,tempC,+,UN,INF,UNKN,IF \
        CDEF:nodatn=tempC,tempC,+,UN,NEGINF,UNKN,IF \
        HRULE:0#0000DD \
        AREA:nodatp#BBBBBB:"NoData" \
        AREA:nodatn#BBBBBB

# Create 2nd 60 days image
/usr/bin/rrdtool graph $htmldir/temp3Monthly.png --title="Variations sur 60 jours (-120j < -60j)" \
        -v"° Celsius" -aPNG -h150 -w700 -l0 -u25 -s-10368000 -e-5184000 \
        DEF:tempC=$rrdfile:temp:AVERAGE \
        LINE2:tempC#DD0000:"Température" \
        CDEF:nodatp=tempC,tempC,+,UN,INF,UNKN,IF \
        CDEF:nodatn=tempC,tempC,+,UN,NEGINF,UNKN,IF \
        HRULE:0#0000DD \
        AREA:nodatp#BBBBBB:"NoData" \
        AREA:nodatn#BBBBBB
#
#
# Create 3th 60 days image
/usr/bin/rrdtool graph $htmldir/temp4Monthly.png --title="Variations sur 60 jours (-180j < -120j)" \
        -v"° Celsius" -aPNG -h150 -w700 -l0 -u25 -s-15552000 -e-10368000 \
        DEF:tempC=$rrdfile:temp:AVERAGE \
        LINE2:tempC#DD0000:"Température" \
        CDEF:nodatp=tempC,tempC,+,UN,INF,UNKN,IF \
        CDEF:nodatn=tempC,tempC,+,UN,NEGINF,UNKN,IF \
        HRULE:0#0000DD \
        AREA:nodatp#BBBBBB:"NoData" \
        AREA:nodatn#BBBBBB
#
# Create 1 year image
/usr/bin/rrdtool graph $htmldir/tempYearly.png --title="Variations sur une année" \
        -v"° Celsius" -aPNG -h150 -w700 -s-31449600 \
        DEF:tempMin=$rrdfile:temp:MIN \
        DEF:tempMax=$rrdfile:temp:MAX \
        AREA:tempMax#EEDDAA:"Variations journalières" \
        AREA:tempMin#FFFFFF \
        LINE1:tempMax#DD0000:"Max" \
        LINE1:tempMin#0000DD:"Min" \
        CDEF:nodatp=tempMax,tempMin,+,UN,INF,UNKN,IF \
        CDEF:nodatn=tempMax,tempMin,+,UN,NEGINF,UNKN,IF \
        HRULE:0#0000DD \
        AREA:nodatp#BBBBBB:"NoData" \
        AREA:nodatn#BBBBBB

date > $htmldir/dateCourante.txt
echo Température: $value ° Celsius > $htmldir/tempCourante.txt

Ce script récupère la température (extérieure) instantamnée pour la ville de BREST (29) par un wget sur le site www.weather.com.

5. Ajouter dans le crontab :


# Lancement tous les 5 minutes
#
*/5 * * * * /home/temperature/temperature.sh > /dev/null 2>&1

6. Créer une page HTML pour l’affichage des graphiques (il y en a 7).
7. Modifier la configuration d’Apache pour pouvoir accéder au répertoire /home/temperature depuis le serveur Web.

Publié dans Supervision | Commentaires fermés

Ordre des graphiques avec Cacti

Il ne semble pas possible de gérer l’ordre des graphiques lors de leur affichage dans l’arbre des hosts. L’ordre, utilisé par Cacti (0.86h), est l’ordre alphabétique par nom de Template Graph. Si, par exmple, je veux que le graphique concernant la charge CPU d’une machine apparaîsse en premier dans les graphiques associés à cette machine… il faut que je m’arrange pour que le nom du Template Graph en question soit en tête de liste…alphabétiquement.

Pas très pratique…

L’ordre des Graph Trees n’est également pas modifiable : c’est aussi l’ordre alphabétique !

Publié dans Supervision | Commentaires fermés

Quelques OIDs…

Superviser les machines avec SNMP…

Quelques oids :

Windows

Charge proc (proc1 – windows 2003) :
.1.3.6.1.2.1.25.3.3.1.2.1
Charge proc (proc2 – windows 2003) :
.1.3.6.1.2.1.25.3.3.1.2.2
Nombre de users sur IIS (windows 2003 srv) :
.1.3.6.1.4.1.311.1.7.3.1.13
Nombre d’users connectés (windows 2003 srv) :
.1.3.6.1.4.1.77.1.2.19.0
Charge processeur système (nt4 + snmp4NT) :
.1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.3.48.58.48
Charge processeur users (nt4 + snmp4nt) :
.1.3.6.1.4.1.311.1.1.3.1.1.2.1.4.3.48.58.48

Proliant (avec inside manager.windows 2003Srv & MIB HP)

Temperature CPU1 :
.1.3.6.1.4.1.232.6.2.6.8.1.4.0.1
Temperature CPU2 :
.1.3.6.1.4.1.232.6.2.6.8.1.4.0.2
Temperature IoBoard :
.1.3.6.1.4.1.232.6.2.6.8.1.4.0.3
Temperature alimentation :
.1.3.6.1.4.1.232.6.2.6.8.1.4.0.5

Linux (avec Net-SNMP)

Memoire disponible ram+swap :
.1.3.6.1.4.1.2021.4.11
Memoire disponible ram :
.1.3.6.1.4.1.2021.4.6.0
Pourcentage cpu système :
.1.3.6.1.4.1.2021.11.10
Pourcentage cpu user :
.1.3.6.1.4.1.2021.11.9
Partition / disque disponible :
.1.3.6.1.4.1.2021.9.1.7
Partition / pourcentage utilisé :
.1.3.6.1.4.1.2021.9.1.9
Charge système 5min :
.1.3.6.1.4.1.2021.10.1.3.2
Memoire disponible ram :
.1.3.6.1.4.1.2021.4.6.0
Uptime :
.1.3.6.1.2.1.1.3.0

Autres

Nombre connectés wifi :
.1.3.6.1.4.1.9.9.273.1.1.2.1.1.1
Taille du cache courant (squid) :
.1.3.6.1.4.1.3495.1.3.2.1.14
Nombre de clients connectés au cache :
.1.3.6.1.4.1.3495.1.3.2.1.15.0

Publié dans Supervision | Commentaires fermés

Envoyer un mail en ligne de commande

Prérequis : Le service SMTP de la machine peut expédier des messages.

1) Envoyer un mail simple (sans pièce jointe) :


perceval:~# mail -s "Le sujet" login@mailhost < mon.fichier

2) Envoyer un mail avec une pièce jointe:


perceval:~# echo "contenu" | mutt -x -a mon.fichier -s "sujet" login@mailhost

Publié dans Système | Commentaires fermés