Differences

This shows you the differences between two versions of the page.

Link to this comparison view

fr:ressources:dossiers:supervision:nagios3 [2011/03/16 00:41] (current)
Line 1: Line 1:
 +====== Nagios 3 avec Nginx sous Debian Squeeze ======
 +{{tag> nagios supervision debian nginx}}
 +
 +**//For english readers, there is a more recent version of this article available in english. check it out: [[http://​wiki.linuxwall.info/​doku.php/​en:​ressources:​dossiers:​supervision:​nagios3|Nagios with Nginx on Fedora (or Amazon Linux AMI)]]//**
 +
 +<code bash>
 +# aptitude install nagios3
 +</​code>​
 +
 +Oui, alors, on va me dire que c'est un peu rude pour une introduction,​ met en fin de compte ça parle de soit-même !
 +
 +===== Initialisation =====
 +
 +Le répertoire **/​etc/​nagios3/​** contient les fichiers suivants:
 +
 +<code bash>
 +ramiel:/​etc/​nagios3#​ ls -l
 +total 76
 +-rw-r--r-- 1 root root    1905 oct.  23 13:38 apache2.conf
 +-rw-r--r-- 1 root root   12218 oct.  23 13:39 cgi.cfg
 +-rw-r--r-- 1 root root    2441 oct.  23 13:39 commands.cfg
 +drwxr-xr-x 2 root root    4096 avril  1 11:09 conf.d
 +-rw-r--r-- 1 root root   43769 oct.  23 13:39 nagios.cfg
 +-rw-r----- 1 root nagios ​ 1293 oct.  23 13:38 resource.cfg
 +drwxr-xr-x 2 root root    4096 avril  1 11:10 stylesheets
 +</​code>​
 +
 +==== Créer un utilisateur ====
 +
 +Nagios stocke ses users dans un fichier htpasswd.users,​ on peux donc créer un nouvel utilisateur et lui associer un mot de passe via la commande htpasswd de Apache.
 +
 +<code bash>
 +ramiel:/​etc/​nagios3#​ htpasswd -c htpasswd.users nagiosadmin
 +New password:
 +Re-type new password:
 +Adding password for user nagiosadmin
 +</​code>​
 +
 +Le fichier htpasswd.users contient alors la ligne suivante:
 +
 +<​file>​
 +ramiel:/​etc/​nagios3#​ cat htpasswd.users
 +nagiosadmin:​5sadZeasd23adt
 +</​file>​
 +
 +===== Configurer NGINX =====
 +
 +Nagios fournit une configuration pour Apache, mais pour Nginx, il faut la modifier quelque peux.
 +Tout d'​abord,​ les scripts CGI de Nagios étant écris en C, il nous faut installer un wrapper fastcgi pour exécuter ces derniers. Ce wrapper bindera un socket et Nginx enverra les requêtes vers le socket, et récupérera la réponse sous forme de code HTML pour la renvoyer au client.
 +
 +==== Installer FCGI Wrap ====
 +
 +Récupérons le code source.
 +
 +<code bash>
 +ramiel:~# wget http://​github.com/​gnosek/​fcgiwrap/​tarball/​master
 +
 +ramiel:~# tar -xzvf gnosek-fcgiwrap-ba8c8d9.tar.gz
 +gnosek-fcgiwrap-ba8c8d9/​
 +gnosek-fcgiwrap-ba8c8d9/​.gitignore
 +gnosek-fcgiwrap-ba8c8d9/​Makefile.in
 +gnosek-fcgiwrap-ba8c8d9/​README.rst
 +gnosek-fcgiwrap-ba8c8d9/​configure.ac
 +gnosek-fcgiwrap-ba8c8d9/​fcgiwrap.c
 +</​code>​
 +
 +
 +Et on compile, la présence du package **libfcgi-dev** est nécessaire:​
 +
 +<code bash>
 +ramiel:​~/​gnosek-fcgiwrap-ba8c8d9#​ autoconf
 +
 +ramiel:​~/​gnosek-fcgiwrap-ba8c8d9#​ ./configure
 +[...]
 +ramiel:​~/​gnosek-fcgiwrap-ba8c8d9#​ make
 +gcc -std=gnu99 -Wall -Wextra -Werror -pedantic -O2 -g3 fcgiwrap.c -o fcgiwrap -lfcgi
 +</​code>​
 +
 +Ce qui nous donne le binaire **fcgiwrap**.
 +On déplace ce binaire dans /usr/bin/ et on crée le script suivant dans **/​etc/​init.d** pour lancer **fcgiwrap** avec **spawn-fcgi** (paquet à installer).
 +
 +<​file>​
 +#!/bin/bash
 + 
 +COMMAND=/​usr/​bin/​spawn-fcgi
 +NAME=fcgiwrap
 +ADDRESS=127.0.0.1
 +PORT=9001
 +USER=www-data
 +GROUP=www-data
 +PHPCGI=/​usr/​bin/​fcgiwrap
 +KILL=/​bin/​kill
 + 
 +case "​$1"​ in
 +    start)
 +        start-stop-daemon --start \
 +                --exec $COMMAND -- -a $ADDRESS -p $PORT \
 +                -u $USER -g $GROUP -f $PHPCGI -P /​var/​run/​$NAME.pid|| true
 +        echo -n "$NAME started with pid "
 +        cat /​var/​run/​$NAME.pid
 +        echo
 +  ;;
 +    stop)
 +        if [ -e /​var/​run/​$NAME.pid ]
 +        then
 +                $KILL `cat /​var/​run/​$NAME.pid`
 +                rm /​var/​run/​$NAME.pid
 +                echo "$NAME stopped"​
 +        else
 +                echo "$NAME is not running, no pid file in /​var/​run/"​
 +        fi
 +  ;;
 +    restart)
 +        $0 stop
 +        $0 start
 +  ;;
 +    *)
 +      echo "​Usage:​ $0 {start|stop|restart}"​
 +      exit 1
 +  ;;
 +esac
 +exit $RETVAL
 +</​file>​
 +
 +On lance ensuite ce script, qui va mettre fcgiwrap en écoute sur le port 9001.
 +
 +<code bash>
 +ramiel:~/# /​etc/​init.d/​spawnfcgiwrap start
 +spawn-fcgi: child spawned successfully:​ PID: 6947
 +fcgiwrap started with pid 6947
 +
 +ramiel:~/# netstat -taupen |grep LISTEN |grep 9001
 +tcp        0      0 127.0.0.1:​9001 ​         0.0.0.0:​* ​              ​LISTEN ​     0          873400 ​     6947/​fcgiwrap
 +</​code>​
 +
 +On termine par un lien dans /etc/rc2.d pour le lancement au démarrage.
 +
 +<code bash>
 +ramiel:~/# ln -s /​etc/​init.d/​spawnfcgiwrap /​etc/​rc2.d/​S19spawnfcgiwrap
 +</​code>​
 +
 +
 +==== Configurer Nginx ====
 +
 +Ceci étant fait, nous pouvons maintenant créer le virtual host de Nginx.
 +Je ne rentre pas dans le détail ici, il faut surtout faire attention à la section **cgi** pour bien envoyer les requêtes vers fcgiwrap.
 +
 +<note important>​je n'ai pas cherché à comprendre comment été structurées les pages de Nagios 3, mais il semblerait que la ré-écriture d'URL soit indispensable. En attente de mieux, la page Nagios est accessible depuis la racine du serveur "/"​... si vous avez mieux je suis preneur !</​note>​
 +
 +<code bash>
 +ramiel:/​etc/​nginx/​sites-available#​ grep -v "​^$"​ ssl|grep -v "#"​
 +server {
 +        listen ​  443;
 +        server_name ​ nagios.toto.com;​
 +
 +        ssl  on;
 +        ssl_certificate ​ /​etc/​nginx/​certs/​nagioscert.pem;​
 +        ssl_certificate_key ​  /​etc/​nginx/​certs/​nagioscert.key;​
 +        ssl_session_timeout ​ 5m;
 +        ssl_protocols ​ SSLv3 TLSv1;
 +        ssl_ciphers ​ ALL:​!ADH:​!EXPORT56:​RC4+RSA:​+HIGH:​+MEDIUM:​!LOW:​!SSLv2:​+EXP;​
 +        ssl_prefer_server_ciphers ​  on;
 +
 +        access_log ​ /​var/​log/​nginx/​nagios-ssl.access.log;​
 +        error_log ​ /​var/​log/​nginx/​nagios-ssl.error.log;​
 +
 +        location / {
 +                root /​usr/​share/​nagios3/​htdocs;​
 +                index  index.html index.htm;
 +                rewrite ^/​nagios3/​(.*) /$1 break;
 +                auth_basic "​Restricted";​
 +                auth_basic_user_file /​etc/​nagios3/​htpasswd.users;​
 +        }
 +
 +        location /​cgi-bin/​nagios3/​ {
 +                root /usr/lib/;
 +                include /​etc/​nginx/​fastcgi_params;​
 +                auth_basic "​Restricted";​
 +                auth_basic_user_file /​etc/​nagios3/​htpasswd.users;​
 +                fastcgi_param ​ AUTH_USER $remote_user;​
 +                fastcgi_param ​ REMOTE_USER $remote_user;​
 +                if ($uri ~ "​\.cgi$"​){
 +                        fastcgi_pass ​  ​127.0.0.1:​9001;​
 +                }
 +        }
 + 
 +}
 +</​code>​
 +
 +On peut maintenant visiter la page d'​accueil de nagios, après passage du login, et admirer la configuration par défaut. Cette dernière inclus automatiquement la machine locale et la passerelle réseau. On a donc deux machines déjà visualisables dans l'​interface:​
 +
 +{{:​fr:​ressources:​dossiers:​supervision:​nagios.png|}}
 +
 +===== Configurer les Hosts dans Nagios =====
 +
 +L'​interface Web de Nagios ne permet pas de gérer la configuration. Pour cela, il faut se rendre dans **/​etc/​nagios3/​conf.d/​** et modifier les templates existants.
 +
 +Par exemple, le fichier **localhost_nagios2.cfg** contient la configuration du host local, on peut renomer ce fichier du nom du serveur local et modifier son contenu pour remplacer, dans mon cas, tous les "​localhost"​ par des "​ramiel"​.
 +
 +<code bash>
 +ramiel:/​etc/​nagios3/​conf.d#​ mv localhost_nagios2.cfg ramiel.cfg
 +
 +ramiel:/​etc/​nagios3/​conf.d#​ vim ramiel.cfg ​
 +
 + 1 # A simple configuration file for monitoring the local host                                                                   
 +  2 # This can serve as an example for configuring other servers; ​
 +  3 # Custom services specific to this host are added here, but services ​
 +  4 # defined in nagios2-common_services.cfg may also apply. ​
 +  5 #  ​
 +  6  ​
 +  7 define host{
 +  8         ​use ​                    ​generic-host ; Name of host template to use 
 +  9         ​host_name ​              ​ramiel
 + ​10 ​        ​alias ​                  ​ramiel
 + ​11 ​        ​address ​                ​127.0.0.1
 + ​12 ​        }
 +
 +[...]
 +</​code>​
 +
 +<note tip>Dans Vim, pour remplacer les occurences d'un mot par un autre, on peut utiliser la commande <​code>:​g/​localhost/​s//​ramiel/​g</​code>​ (en mode commande).</​note>​
 +
 +Ce fichier se base sur le template "​generic-host"​ définit dans **generic-host_nagios2.cfg**. Le template détaille les méthodes utilisées sur ce type de host, et en particulier la méthode pour déterminer s'il est en vie. La méthode par défaut est le ping via la commande check-host-alive:​
 +<​file>​
 +                check_command ​                  ​check-host-alive
 +</​file>​
 +Ce qui signifie que pour savoir si les host de ce type sont vivant, on va les pinger non stop (toutes les minutes).
 +
 +Dans le fichier **hostgroups_nagios2.cfg** se trouvent les groupes utilisés pour les tests. Notre "​localhost"​ est présent dans tous les groupes, et l'on va le remplacer par "​ramiel"​ afin de ne plus avoir de référence à localhost.
 +
 +Puis on redémarre nagios, et de retour dans l'​interface,​ localhost à bien été remplacé par ramiel.
 +
 +{{:​fr:​ressources:​dossiers:​supervision:​host.png|}}
 +
 +===== Ajouter un serveur web =====
 +
 +Voyons maintenant comment ajouter un hôte supplémentaire à Nagios. ​
 +Toutefois, cet hôte ne sera pas joignable par la méthode ping, on va donc créer un nouveau template, copie du template par défaut, ou la méthode //check command// est remplacée du ping à un check_http.
 +
 +On crée ce template dans le fichier **web-host.cfg**:​
 +
 +<code bash>
 +ramiel:/​etc/​nagios3/​conf.d#​ cat web-host.cfg
 +
 +# Web Host (alive is done by http) definition template - This is NOT a real host, just a template!
 + 
 +define host{
 +        name                            web-host ​   ; The name of this host template
 +        notifications_enabled ​          ​1 ​      ; Host notifications are enabled
 +        event_handler_enabled ​          ​1 ​      ; Host event handler is enabled
 +        flap_detection_enabled ​         1       ; Flap detection is enabled
 +        failure_prediction_enabled ​     1       ; Failure prediction is enabled
 +        process_perf_data ​              ​1 ​      ; Process performance data
 +        retain_status_information ​      ​1 ​      ; Retain status information across program restarts
 +        retain_nonstatus_information ​   1       ; Retain non-status information across program restarts
 +                check_command ​                  ​check_http
 +                max_check_attempts ​             10
 +                notification_interval ​          0
 +                notification_period ​            24x7
 +                notification_options ​           d,u,r
 +                contact_groups ​                 admins
 +        register ​                       0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
 +        }
 +</​code>​
 +
 +On va ensuite créer un fichier "​ptichoun.cfg"​ dans le répertoire **/​etc/​nagios3/​conf.d/​** et le remplir comme suis:
 +
 +<code bash>
 +ramiel:/​etc/​nagios3/​conf.d#​ vim ptichoun.cfg
 +
 +define host{                                                                                                                  ​
 +        use                     ​web-host
 +        host_name ​              ​ptichoun
 +        alias                   ​ptichoun
 +        address ​                ​ptichoun.linuxwall.info
 +}
 +
 +</​code>​
 +
 +Et l'on va mettre ce nouvel Host dans le groupe "​http-servers"​ du fichier **hostgroups_nagios2.cfg**.
 +
 +<code bas>
 +ramiel:/​etc/​nagios3/​conf.d#​ vim hostgroups_nagios2.cfg
 +
 +[...]
 +
 +define hostgroup {
 +        hostgroup_name ​ http-servers
 +                alias           HTTP servers
 +                members ​        ​ramiel,​ ptichoun
 +        }
 +</​code>​
 +
 +Il faut ensuite redémarrer nagios pour prendre ce nouvel host en compte.
 +
 +si vous voulez jeter un coup d'oeil aux commandes qui sont lancés, c'est dans le répertoire **/​etc/​nagios-plugins/​config** qu'il faut aller.
 +On y trouve, par exemple, le fichier **http.cfg** qui contient les commandes lancées pour les tests HTTP.
 +
 +<​file>​
 +ramiel:/​etc/​nagios-plugins/​config#​ head http.cfg
 +# '​check_http'​ command definition
 +define command{
 +        command_name ​   check_http
 +        command_line ​   /​usr/​lib/​nagios/​plugins/​check_http -H '​$HOSTADDRESS$'​ -I '​$HOSTADDRESS$'​
 +        }
 + 
 +# '​check_http_hostname'​ command definition
 +define command{
 +        command_name ​   check_httpname
 +        command_line ​   /​usr/​lib/​nagios/​plugins/​check_http -H '​$HOSTNAME$'​ -I '​$HOSTADDRESS$'​
 +</​file>​
 +
 +
 +on peut ainsi lancer les commandes de check manuellement:​
 +
 +<code bash>
 +ramiel:/​etc/​nagios-plugins/​config#​ /​usr/​lib/​nagios/​plugins/​check_http
 +check_http: Impossible de dcomposer les arguments
 +Utilisation:​ check_http -H <​vhost>​ | -I <​IP-address>​ [-u <​uri>​] [-p <​port>​]
 +       [-w <warn time>] [-c <​critical time>] [-t <​timeout>​] [-L]
 +       [-a auth] [-b proxy_auth] [-f <ok | warn | critcal | follow | sticky | stickyport>​]
 +       [-e <​expect>​] [-s string] [-l] [-r <​regex>​ | -R <​case-insensitive regex>]
 +       [-P string] [-m <​min_pg_size>:<​max_pg_size>​] [-4|-6] [-N] [-M <​age>​]
 +       [-A string] [-k string] [-S] [-C <​age>​] [-T <​content-type>​] [-j method]
 +
 +
 +ramiel:/​etc/​nagios-plugins/​config#​ /​usr/​lib/​nagios/​plugins/​check_http -H ptichoun.linuxwall.info -I ptichoun.linuxwall.info
 +
 +HTTP OK: HTTP/1.1 200 OK - 56647 bytes in 0,737 second response time |time=0,​736849s;;;​0,​000000 size=56647B;;;​0
 +
 +</​code>​
 +
 +===== Ajouter un check sur le service DNS =====
 +
 +Admettons que nous souhaitons valider le fonctionnement d'un serveur DNS Bind. On peux, pour cela, créer une commande qui va lancer une requête DNS sur le serveur de destination.
 +
 +Pour cela, il faut modifier le fichier de commandes DNS dans **/​etc/​nagios-plugin/​config/​dns.cf**. On va y ajouter une nouvelle commande "​check_dns_srv"​ comme suis:
 +<code bash>
 +# vim /​etc/​nagios-plugins/​config/​dns.cfg
 +
 +[...]
 +
 +# '​check_dns_srv'​ command definition ​
 +define command{
 +        command_name ​   check_dns_srv
 +        command_line ​   /​usr/​lib/​nagios/​plugins/​check_dns -H '​$HOSTADDRESS$'​ -s '​$HOSTADDRESS$'​
 +}
 +
 +</​code>​
 +
 +Puis, dans le host voulu, on va rajouter ce contrôle sous la forme d'un "​service":​
 +
 +<code bash>
 +ramiel:/​etc/​nagios3/​conf.d#​ cat neuromatrice.cfg
 +
 +define host{
 +        use                     ​ssh-host
 +        host_name ​              ​maurice
 +        alias                   ​maurice
 +        address ​                ​maurice.linuxwall.info
 +}
 +
 +# Define a service to check the DNS Daemon
 +define service{
 +        use                             ​generic-service ​        ; Name of service template to use
 +        host_name ​                      ​maurice
 +        service_description ​            DNS Daemon
 +                check_command ​                  ​check_dns_srv
 +        }
 +</​code>​
 +
 +
  
fr/ressources/dossiers/supervision/nagios3.txt · Last modified: 2011/03/16 00:41 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0