Copyright © 2009 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Plus de renseignements ici : FDL
Historique des versions | |
---|---|
Version 1.0 | 30 sept 2013 |
Publication. | |
Version 1.2 | 20 oct 2013 |
Ajout des addons pour Netasq | |
Version 1.2 | 30 nov 2013 |
Ajout de PNP4nagios |
Table of Contents
nagios.cfg
et cgi.cfg
Ce document explique comment installer, configurer et exploiter Nagios 4.0, tout en constituant une solution technique et financière viable. De nos jours, le moindre réseau comprend une multitude d’éléments actifs, de machines et de services. Il est donc important de pouvoir connaître la disponibilité d'un service, d'une machine ou d'un réseau pour en informer rapidement les administrateurs. Nagios se distingue des autres logiciels de supervision souvent propriétaires et utilisant en masse SNMP, par son développement constant depuis 1999, par son coté “Open source”, par la présence de greffons installables sur les serveurs. La surveillance d'un ensemble de machines pourra s'effectuer par plusieurs niveaux, suivant les besoins :
Simple : PING sur une machine et un service avec notification et supervision par pages WEB.
Élaboré : Test du service et de la machine avec notification supplémentaire par courriel, PAGER, SMS...
Sophistiqué : Dans ce cas Nagios sera capable de relancer un service avec notification MAIL/PAGER/SMS...
Parmi les fonctionnalités basiques de Nagios voilà les possibilités :
Surveillance des services réseaux (SMTP, POP3, IMAP, HTTP(s), NNTP, PING, SSH, NTP, ORACLE, ...Etc..)
Surveillance des ressources des machines (hôtes) (charge processeur, utilisation des disques, etc.)
Système simple de plugins (ou greffons) permettant aux utilisateurs de développer facilement leurs propres vérifications de services personnalisés.
Parallélisation de la vérification des services et ou des machines.
Possibilité de définir la hiérarchie du réseau en utilisant des hôtes parents , ce qui permet la détection et la distinction entre les hôtes qui sont à l'arrêt et ceux qui sont injoignables.
Notifications des contacts quand un hôte ou un service a un problème, et est résolu (via mél, pager, ou par méthode définie par l'utilisateur)
Possibilité d'alertes sonores.
Possibilité de définir des gestionnaires d’événements qui s'exécutent pour des événements sur des hôtes ou des services, pour une résolution des problèmes directement sur la machine.
Rotation automatique des fichiers log.
Support pour l'implémentation de la surveillance des machines (hôtes) de manière redondante, et ou répartie.
Interface web pour voir l'état actuel du réseau, notification et historique des problèmes, fichiers log, etc avec authentification des utilisateurs.
Utilisation d'une base de données possible.
Nombreux plugins(greffons) disponibles.
Évolution permanente et encore bien d'autres possibilités.
Cet article va aborder l'installation, la configuration et l'exploitation de Nagios™ 3.99.96 ,autant parler de Nagios 4.0. Je ne peux classer cette version dans le domaine "stable", la version 4.0 en version finale arrive; d'où le choix de cette version. L'installation, la configuration et l'exploitation des greffons NRPE sera abordée, et au final comment superviser des équipements de type Netasq (U70)™ et divers équipements Vmware/ESXi/Vcenter 5.0™.
Pour avoir travaillé finement avec Nagios en version 2.0 (2004/2005) cette version apporte à mes yeux de grands changements, sans pour cela changer la philosophie Nagios. Et puis Nagios est pour moi par forcément l'outil le meilleur à configurer, mais il apporte par la suite beaucoup comme des graphiques sur l'état d'un service, d'un serveur. Ce système est suffisamment ouvert pour permettre pleins de choses, y compris se lancer soi-même si besoin. Et comme souvent le travail est récompensé !
Table of Contents
Courant juillet 2013, j'ai commencé à rédiger ce document et le 20 septembre 2013 le version finale de Nagios est sortie. Ce chapitre à été ajouté pour la sortie de cette version à la vieille de publier ce document. Cette version apporte une page pour les diverses modifications entre la version 3 et 4. Les modifications portent surtout le moteur en lui-même, beaucoup d'optimisations et peut de modifications vis-à-vis des fichiers de configuration.
Après lecture des nouveautés, je suis heureux de constater que ce document ne doit pas être modifié, les définitions obsolètes font déjà l'objet de remarques.
Voici le lien de cette annonce : nagios-core-4-now-available.
Voici le lien sur les diverses modifications : whatsnew.html
Les composants qui suivent s'installent très simplement; ils sont indispensables. Ils sont tous disponibles sans modification. Cette liste n'est pas exhaustive car je me suis basé sur une distribution activée depuis longtemps, certains composants étaient déjà installés. Néanmoins voici une liste pour information :
apt-get install apache2 make php5-gd postfix fping snmp ntp smbclient nmap saidar traceroute \ php5-snmp curl gettext libperl-dev libgd2-xpm-dev libltdl3-dev build-essential rrdtool librrdbs-perl \ wget build-essential libgd2-xpm libapache2-mod-php5 libgetargs-long-perl libgd-tools libapache2-mod-gnutls \ libssl-dev mrtg libsnmp-perl libglib2.0-dev
Rien de bien spécial à ce niveau, cette liste prend en compte des paquets pour l'extension par la suite de Nagios, comme SNMP, MRTG.
Voici les procédures pour télécharger les éléments principaux pour une version de Nagios
classique, il existe de nombreuses applications autour de lui (Nagvis, Nagiograph...).
J'ai choisi volontairement d'utiliser une version basique, chaque chose en son temps.
Il est nécessaire d'aller sur le site : Nagios-core, puis de télécharger la dernière version. A ce jour, la version disponible est la version 3.5, la version 4 est en béta1, à vous de choisir.
Selon votre version, il suffit tout simplement de décompresser les archives dans un répertoire dédié.
J'ai choisi la version via git-n3. A savoir que le mot nagios4
correspond à votre répertoire de destination, ce qui donne :
git clone git://git.code.sf.net/p/nagios/nagios nagios4 Cloning into 'nagios4'... remote: Counting objects: 17407, done. remote: Compressing objects: 100% (3275/3275), done. remote: Total 17407 (delta 14090), reused 17407 (delta 14090) Receiving objects: 100% (17407/17407), 9.68 MiB | 212 KiB/s, done. Resolving deltas: 100% (14090/14090), done.
J'ai donc téléchargé la dernière version de nagios 3.X, ce qui donne à ce jour et dans mon cas la version 3.99.96
.
Mais pourquoi se compliquer la vie alors que la version 4.0.béta 1
est disponible plus facilement.
Sans analyser fichier par fichier, il s'avère que la taille des sources de cette version est moindre que
ma version téléchargée via Git. J'en conclue, peut-être facilement, qu'elle est plus complète.
Warning | |
---|---|
Avec la nouvelle version en 4.0.x, le dépot GIT semble ne plus être tenu à jour; il est toujours en version 3.96... |
Les plugins sont indispensables, ils fournissent divers modules que Nagios utilisera pour tester ce que vous voulez, les exemples sont nombreux et multiples. Les domaines concernés sont très variés, ils concernent les services, les routeurs et switchs et même des sondes de température, le matériel comme “Netapp”, les bases de données ...etc.
Il existe un site dédié à tous ces modules, disponible ici : Nagios Exchange ou est listé 4007 plugins dans 429 catégories.
Il suffit de télécharger le fichier suivant : http://nagiosplug.sourceforge.net/snapshot/nagios-plugins-master.tar.gz, puis de le décompresser ou il faut.
Table of Contents
La partie précédente est une formalité, nous attaquons l'une des étapes les plus importantes et qui parfois prend du temps. Comme déjà dit choisir une version en cours de développement n'est pas forcément fait pour aider. En ce qui concerne les plugins, comme il en existe dans divers langages, des problèmes de dépendance peuvent apparaître.
Placez vous dans le répertoire nagios4
, conformément au paragraphe git-n3. Voici les options possibles de compilation, toutes ne seront pas
utilisées.
./configure --help `configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local/nagios] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/nagios/bin', `/usr/local/nagios/lib' etc. You can specify an installation prefix other than `/usr/local/nagios' using `--prefix', for instance `--prefix=$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-statusmap=disables compilation of statusmap CGI --disable-statuswrl=disables compilation of statuswrl (VRML) CGI --enable-nanosleep enables use of nanosleep (instead of sleep) in event timing --enable-event-broker enables integration of event broker routines --enable-cygwin enables building under the CYGWIN environment --enable-libtap Enable built-in libtap for unit-testing (default: no). Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-nagios-user=user sets user name to run nagios --with-nagios-group=grp sets group name to run nagios --with-command-user=user sets user name for command access --with-command-group=grp sets group name for command access --with-mail=path_to_mail sets path to equivalent program to mail --with-httpd-conf=path_to_conf sets path to Apache conf.d directory --with-checkresult-dir=path sets path to check results spool directory --with-temp-dir= path sets path to temp directory --with-init-dir=path sets directory to place init script into --with-lockfile=path sets path and file name for lock file --with-gd-lib=DIR sets location of the gd library --with-gd-inc=DIR sets location of the gd include files --with-cgiurl=local-url sets URL for cgi programs (do not use a trailing slash) --with-htmurl=local-url sets URL for public html Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -Llib dir if you have libraries in a nonstandard directory lib dir LIBS libraries to pass to the linker, e.g. -l library CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I include dir if you have headers in a nonstandard directory include dir CPP C preprocessor
J'ai choisi une compilation presque par défaut, ce qui donne ceci pour mes paramètres :
make clean dep ; ./configure --with-nagios-group=nagios --with-command-group=nagcmd \ --enable-embedded-perl --with-temp-dir=/tmp --with-init-dir=/etc/init.d \ --with-cgiurl=/nagios3/cgi-bin --with-htmurl=/nagios3 --sysconfdir=/etc/nagios \ --localstatedir=/var/nagios --with-checkresult-dir=/var/nagios --enable-event-broker--enable-nanosleep
Note | |
---|---|
Je ne peux que vous conseiller de mémoriser ces paramètres, ils pourront éventuellement servir ultérieurement, ou même pour une autre plate-forme. (config.log) |
La commande make clean dep ; est optionnelle, mais indispensable si vous faites plusieurs essais de compilation. Le --enable-embedded-perl
est activé et ne pose aucun problème. Néanmoins dans la version 4 de Nagios cette option sera supprimée. Il est inutile de créer au préalable l'utilisateur nagios
et son groupe
nagcmd
, ils seront faits à la fin de compilation automatiquement.
Avant de tout lancer il est nécessaire de créer l'utilisateur nagios et ses groupes : voici comment faire.
Ensuite il faut modifier le fichier /etc/passwd
et modifier la valeur /bin/sh (ou autre)
par cette valeur /bin/false
.
# groupadd -g 1002 nagios # groupadd -g 1003 nagcmd # useradd -u 1001 -g nagios -G nagcmd -d /usr/local/nagios -c "Nagios Admin" nagios
*** Configuration summary for nagios 3.99.96 03-14-2013 ***: General Options: ------------------------- Nagios executable: nagios Nagios user/group: nagios,nagios Command user/group: nagios,nagcmd Event Broker: yes Install ${prefix}: /usr/local/nagios Install ${includedir}: /usr/local/nagios/include/nagios Lock file: ${prefix}/var/nagios.lock Check result directory: ${prefix}/var/spool/checkresults Init directory: /etc/init.d Apache conf.d directory: /etc/apache2/conf.d Mail program: /bin/mail Host OS: linux-gnu Web Interface Options: ------------------------ HTML URL: http://localhost/nagios3/ CGI URL: http://localhost/nagios3/cgi-bin/ Traceroute (used by WAP): /usr/sbin/traceroute Review the options above for accuracy. If they look okay, type 'make all' to compile the main program and CGIs.
Rien de bien spécial à ce niveau, il est tout de même intéressant de bien regarder chaque ligne car elles correspondent à un paramètre qui formera la structure de votre Nagios.
A titre d'exemple, la ligne Check result directory: ${prefix}/var/spool/checkresults
va se retrouver ici /usr/local/nagios/var/spool/checkresults
.
Ceci n'est pas très gênant, mais personnellement je préfère chercher directement dans le répertoire /var/spool/...
.
Une fois l'architecture définie, il est temps de faire chauffer les CPUs, via la commande make all :
make all ; *** Exfoliation theme installed *** NOTE: Use 'make install-classicui' to revert to classic Nagios theme make[1]: quittant le répertoire « /mnt/Divers@/Compilation/nagios3 » make install-basic make[1]: entrant dans le répertoire « /mnt/Divers@/Compilation/nagios3 » /usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/libexec /usr/bin/install -c -m 775 -o nagios -g nagios -d /var /usr/bin/install -c -m 775 -o nagios -g nagios -d /var/archives /usr/bin/install -c -m 775 -o nagios -g nagios -d /var/spool/checkresults *** Main program, CGIs and HTML files installed *** You can continue with installing Nagios as follows (type 'make' without any arguments for a list of all possible options): make install-init - This installs the init script in /etc/nagios3 make install-commandmode - This installs and configures permissions on the directory for holding the external command file make install-config - This installs sample config files in /etc
Une fois cette commande réalisée, Nagios vous indique les étapes suivantes, il faut les faire :
make install && make install-init && make install-commandmode && make install-config && make install-webconf
Une fois toutes ces étapes réalisées avec succès, Nagios™ est presque installé, il est nécessaire de copier manuellement ceci et de donner les droits nécessaires:
Warning | |
---|---|
Pour une mise à jour de Nagios ou plutôt pour une évolution dans la même série, il suffit de refaire la compilation puis de lancer les scripts suivants :
make all ; make install , et le tour est joué ! |
cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/ ; chown -R nagios:nagcmd /usr/local/nagios/libexec/eventhandlers
Il est temps de tester tout çà, simplement en faisant cette commande :
/usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg
Rien de bien spécial une fois de plus. Si une erreur est présente Nagios va l'afficher clairement. L'étape suivante est le lancement de Nagios en mode résident, via la commande :
/etc/init.d/nagios start
Warning | |
---|---|
Sauf que le fichier fournit dans les sources ne fonctionne pas sur une Debian/Ubuntu. Si nécessaire, le plus rapide est d'adapter un script existant pour votre situation. |
Il faut créer le fichier /etc/default/nagios
avec les valeurs suivantes :
# Activer Nagios au boot ENABLED="yes" # Fichier de conf Nagios : NAGIOSCFG="/etc/nagios/nagios.cfg" # localisation du fichier de conf des CGI-BIN : CGICFG="/etc/nagios/cgi.cfg" # Niveau "nice" : NICENESS=5 # Si utilisation de "pam_tmpdir" il faut activer : # TMPDIR="/tmp" # Si utilisation de RAM DISK : USE_RAMDISK="2048"
Pour le fichier /etc/init.d/nagios
, voici ma version actuelle: elle comporte un bogue au niveau du stop. Je vais refaire ce script ultérieurement.
>#! /bin/sh # Written by Miquel van Smoorenburg miquels@cistron.nl # Modified for Debian GNU/Linux # by Ian Murdock imurdock@gnu.ai.mit.edu. # Clamav version by Magnus Ekdahl magnus@debian.org # Nagios version by Sean Finney seanius@debian.org and probably others # nagios2 version by Marc Haber mh+debian-packages@zugschlus.de # nagios3 version by Alexander Wirt formorer@debian.org ### BEGIN INIT INFO # Provides: nagios3 # Required-Start: $local_fs $remote_fs $syslog $named $network $time # Required-Stop: $local_fs $remote_fs $syslog $named $network # Should-Start: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: nagios host/service/network monitoring and management system # Description: nagios is a monitoring and management system for hosts, services and networks. ### END INIT INFO set -e . /lib/lsb/init-functions DAEMON=/usr/local/nagios/bin/nagios NAME="nagios" DESC="nagios 3.99 monitoring daemon" NAGIOSCFG="/etc/nagios/nagios.cfg" CGICFG="/etc/nagios/cgi.cfg" NICENESS=5 [ -x "$DAEMON" ] || exit 0 [ -r /etc/default/nagios ] && . /etc/default/nagios # this is from madduck on IRC, 2006-07-06 # There should be a better possibility to give daemon error messages # and/or to log things log() { case "$1" in [[:digit:]]*) success=$1; shift;; *) :;; esac log_action_begin_msg "$1"; shift log_action_end_msg ${success:-0} "$*" } check_started () { #nagios3-core can be installed without -cgi if [ -e $CGICFG ]; then check_cmd=$(get_config nagios_check_command $CGICFG) if [ ! "$check_cmd" ]; then log 6 "unable to determine nagios_check_command from $CGICFG!" return 6 fi else #use hardcoded default version check_cmd="/usr/lib/nagios/plugins/check_nagios /var/cache/nagios3/status.dat 5 '/usr/local/nagios/bin/nagios'" fi eval $check_cmd >/dev/null if [ -f "$THEPIDFILE" ]; then pid="$(cat $THEPIDFILE)" if [ "$pid" ] && kill -0 $pid >/dev/null 2>/dev/null; then return 0 # Is started fi fi return 1 # Isn't started } # # get_config() # # grab a config option from nagios.cfg (or possibly another nagios config # file if specified). everything after the '=' is echo'd out, making # this a nice generalized way to get requested settings. # get_config () { if [ "$2" ]; then set -- `grep ^$1 $2 | sed 's@=@ @'` else set -- `grep ^$1 $NAGIOSCFG | sed 's@=@ @'` fi shift echo $* } check_config () { if $DAEMON -v $NAGIOSCFG >/dev/null 2>&1 ; then # First get the user/group etc Nagios is running as nagios_user="$(get_config nagios_user)" nagios_group="$(get_config nagios_group)" log_file="$(get_config log_file)" log_dir="$(dirname $log_file)" return 0 # Config is ok else # config is not okay, so let's barf the error to the user $DAEMON -v $NAGIOSCFG fi } check_named_pipe () { nagiospipe="$(get_config command_file)" if [ -p "$nagiospipe" ]; then return 1 # a named pipe exists elif [ -e "$nagiospipe" ];then return 1 else return 0 # no named pipe exists fi } if [ ! -f "$NAGIOSCFG" ]; then log_failure_msg "There is no configuration file for Nagios 3." exit 6 fi THEPIDFILE=$(get_config "lock_file") [ -n "$THEPIDFILE" ] || THEPIDFILE='/var/run/nagios.pid' start () { if [ "$ENABLED" = "no" ]; then log_warning_msg "Not starting Nagios3 - set ENABLED to yes in /etc/default/nagios" exit 0 fi DIRECTORY=$(dirname $THEPIDFILE) [ ! -d $DIRECTORY ] && mkdir -p $DIRECTORY chown nagios:nagios $DIRECTORY if ! check_started; then if ! check_named_pipe; then log_action_msg "named pipe exists - removing" rm -f $nagiospipe fi if check_config; then start_daemon -n $NICENESS -p $THEPIDFILE $DAEMON -d $NAGIOSCFG ret=$? else log_failure_msg "errors in config!" log_end_msg 1 exit 1 fi else log_warning_msg "already running!" fi return $ret } stop () { killproc -p $THEPIDFILE ret=$? if [ `pidof nagios3 | wc -l ` -gt 0 ]; then echo -n "Waiting for $NAME daemon to die.." cnt=0 while [ `pidof nagios3 | wc -l ` -gt 0 ]; do cnt=`expr "$cnt" + 1` if [ "$cnt" -gt 15 ]; then kill -9 `pidof nagios` break fi sleep 1 echo -n "." done fi echo if ! check_named_pipe; then rm -f $nagiospipe fi if [ -n "$ret" ]; then return $ret else return $? fi } status() { log_action_begin_msg "checking $DAEMON" if check_started; then log_action_end_msg 0 "running" else if [ -e "$THEPIDFILE" ]; then log_action_end_msg 1 "$DAEMON failed" exit 1 else log_action_end_msg 1 "not running" exit 3 fi fi } reload () { # Check first if check_config; then if check_started; then killproc -p $THEPIDFILE $DAEMON 1 else log_warning_msg "Not running." fi else log_failure_msg "errors in config!" log_end_msg 6 exit 6 fi } case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" start log_end_msg $? ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" stop log_end_msg $? ;; restart) log_daemon_msg "Restarting $DESC" "$NAME" stop if [ -z "$?" -o "$?" = "0" ]; then start fi log_end_msg $? ;; reload|force-reload) log_daemon_msg "Reloading $DESC configuration files" "$NAME" reload log_end_msg $? ;; status) status ;; check) check ;; *) log_failure_msg "Usage: $0 {start|stop|restart|reload|force-reload|status}" >&2 exit 1 ;; esac exit 0
Il faut lancer le serveur HTTP (Apache2) désormais :
/etc/init.d/httpd start
Il faut établir un mot de passe pour le compte nagiosadmin
, voici la procédure :
cd /etc/nagios ; htpasswd -c htpasswd.users nagiosadmin
New password:
Re-type new password:
Adding password for user nagiosadmin
Il est possible de rajouter et/ou modifier le mot de passe d'une ou plusieurs personnes via cette commande. Reportez vous à la commande htpasswd
pour de plus amples renseignements.
En fonction de la configuration de votre serveur Apache™, il est possible de voir plusieurs instances de Nagios.
Warning | |
---|---|
Pendant que nous sommes avec Apache, si jamais Nagios affiche des caractères mal encodés il faut activer ceci dans le fichier etc/apache2/conf.d/charset :
AddDefaultCharset UTF-8Cette modification demande un reload pour Apache, et le tour est joué. |
Cette commande vous facilitera la vie : ajout de l'utilisateur Apache dans le group nagios
, ce qui donne : adduser www-data nagcmd.
Table of Contents
Il faut se placer dans le répertoire des plugins récemment téléchargés; puis lancer la commande :
./configure --with-nagios-user=nagios --with-nagios-group=nagios
Depuis ce problème est peut-être corrigé. Si vous rencontrez une erreur fatale liée à ce fichier ./gl/stdio.ht
, il faut faire ceci :
Éditez le fichier gl/stdio.ht
ligne 456 remplacer gets
par fgets
,
-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
. Ensuite refaire le début de la compilation sans lancer avant un “make clean dep”
Une fois cette étape complète, il faut lancer la compilation proprement dite via make && make install
Tous les plugins sont installés dans ce répertoire : /usr/local/nagios/libexec
Il en reste plein d'autres encore dans le répertoire des sources, dans le répertoire contrib
.
Libre à vous de les utiliser à condition de les copier dans /usr/local/nagios/libexec
.
Note | |
---|---|
Il existe un site dédié pour le développement ou pour régler un bogue avec un plugin. Donc il vaut mieux éviter de choisir l'un des plugins figurant sur ce site : https://github.com/nagios-plugins/nagios-plugins/issues |
Table of Contents
Ce fichier doit être vérifié ligne par ligne, il mérite quelques modifications ou adaptations. Les données qui suivent proviennent de ma configuration, libre à vous de les modifier.
Personnellement j'ai regroupé beaucoup de fichiers dans /var/nagios/
: ceci pour éviter des problèmes de droits, mais surtout pour retrouver presque tout rapidement.
log_file=/var/log/nagios.log
object_cache_file=/var/nagios/objects.cache
precached_object_file=/var/nagios/objects.precache
status_file=/var/nagios/status.dat
command_file=/var/log/nagios/nagios.cmd
lock_file=/var/run/nagios.lock
temp_file=/tmp/nagios.tmp
temp_path=/tmp
state_retention_file=/var/nagios/retention.dat
use_timezone=Africa/Libreville
Les paramètres possibles sont dans le répertoire /usr/share/zonefinfo/
(Etc/GMT+1 ou Europe/Paris...)
date_format=euro
admin_email=nagios@localhost
Sera modifié/adapté par la suite...
Les paramètres suivants sont apparus avec la V 4; ils ne sont pas obligatoires car ils existent des valeurs par défaut.
# represente le nbr de daemon pour les requêtes HOST/SRV...par defaut=4, en fonction de l'importance de votre réseau. check_workers=10 # fichier necessaire avec la V 4 query_socket=/var/nagios/rw/nagios.qh # pour de grosses installation placer cette valeur à 0 permet de gagner de la place disque lors de la rotation des logs. log_current_states=0
Ce fichier comprend les paramètres pour l'interface WEB.
Ce fichier est configuré avec une authentification obligatoire pour accéder à l'interface. Ceci permet de régler les accès en modifications, finement et ceux en lecture seules
avec le caractère *
.
nagios_check_command=/usr/local/nagios/libexec/check_nagios -F /var/cache/status.dat 5 '/usr/local/nagios/bin/nagios'
Ligne que j'ai ajoutée : elle était absente (?) et pourtant obligatoire.
Warning | |
---|---|
Ne placer cette ligne qu'uniquement lors d'un problème. Lors d'une récente installation tout est passé sans problème. C'est l'avantage de se baser sur une version en développement... |
authorized_for_system_information=*
authorized_for_configuration_information=*
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
#authorized_for_read_only=*
Cette ligne sera activée par la suite, une fois Nagios actif.#statusmap_background_image=smbackground.gd2
Comme pour la ligne précédente, elle sera modifiée ultérieurement. Voir aussi le chapitre sur le format gd2 pour de plus amples renseignements.Maintenant que les 2 fichiers principaux sont configurés vous pouvez tester l'ensemble via cette commande :
/usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfgNagios Core 3.99.96 Copyright (c) 2009-present Nagios Core Development Team and Community Contributors Copyright (c) 1999-2009 Ethan Galstad Last Modified: 03-14-2013 License: GPL Website: http://www.nagios.org Reading configuration data... Read main config file okay... Read object config files okay... Running pre-flight check on configuration data... Checking services... Checked 8 services. Checking hosts... Checked 1 hosts. Checking host groups... Checked 1 host groups. Checking service groups... Checked 0 service groups. Checking contacts... Checked 1 contacts. Checking contact groups... Checked 1 contact groups. Checking commands... Checked 24 commands. Checking time periods... Checked 5 time periods. Checking for circular paths... Checked 1 hosts Checked 0 service dependencies Checked 0 host dependencies Checked 5 timeperiods Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
Table of Contents
Ce chapitre va s’efforcer d'expliquer la configuration des divers matériels, services pour que Nagios soit en mesure de les superviser. Cette étape est relativement pénible car elle doit être faite manuellement. Il faut avoir en tête tous les types différents à superviser et les placer dans la mesure du possible dans des fichiers distincts, et non tous dans un même fichier.
Je présente les différents états que peuvent avoir un hôte ou service, il est important de les connaître avant de passer à la configuration. Ces paramètres sont présents un peu partout sous la forme d'une seule lettre.
d : Notification sur les hôtes en états DOWN
u : Notification sur les hôtes en états non joignables (UNREACHABLE)
r : Notification quand un hôte retourne à l'état normal (états UP)
f : Notification quand un hôte commence ou s'arrête d'osciller,
s : Notification quand un hôte ou service entre ou sort de période de maintenance planifiée.
n : None ou (null) aucune notification
w : Notification sur états WARNING de service
u : Notification sur états UNKNOWN de service
c : Notification sur états CRITICAL de service
r : Notification sur états OK
f : Notification quand le service commence et s'arrête d'osciller.
n : (none) : Le contact ne recevra aucun type de notifications de services
Une définition d'hôte ou de machine s'applique à un serveur "physique/virtuel", une station de travail, un périphérique, ou un équipement présent sur votre réseau. Il est possible d'utiliser les templates pour la configuration de ce fichier
define host{ host_name host_name ; C'est le nom court qui permet d'identifier l'hôte. ; Il est utilisé dans les groupes d'hôtes et les définitions de service pour faire référence à cet hôte particulier. ; Les hôtes peuvent être associés à de multiples services (qui sont supervisés). ; Si elle est utilisée dans le bon contexte, la macro $HOSTNAME$ contient ce nom court. alias alias ; C'est un nom long ou une description de l'hôte permettant de l'identifier plus facilement. ; Si elle est utilisée dans le bon contexte, la macro $HOSTALIAS$ contient cet alias/description. display_name display_name address address ; @IP ou FQDN parents host_names ; dépendance vis-à-vis d'un autre hôte hostgroups hostgroup_names ; à remplir check_command command_name ; C'est le nom court de la commande à utiliser pour déterminer si l'hôte est hors service ou non. ; Typiquement, cette commande lance un "test (HTTP)" vers l'hôte pour voir si il est "vivant". ; La commande doit retourner un état OK (0) sinon Nagios supposera que cet hôte est hors service. ; Si vous laissez cet argument vide, l'hôte ne sera pas contrôlé - ; Nagios supposera que l'hôte est toujours en fonctionnement. ; Ceci est utile pour superviser des imprimantes ou autres périphériques qui sont éteints fréquemment. initial_state [o,d,u] ; OK/ DOWN / UP "d" est à mon sens une bonne valeur max_check_attempts 1 ; C'est le nombre de fois que Nagios relancera la commande de contrôle de ; l’hôte si celle-ci retourne un état différent de OK. Positionner cette valeur à 1 fera ; que Nagios générera une alerte sans re-contrôler l'hôte. ; Note : si vous ne voulez pas contrôler l'état de l'hôte, ; vous devez quand même mettre une valeur supérieure ou égale à 1. ; Pour ne pas effectuer le contrôle de l'hôte, laissez simplement vide l'option "host_check_command". check_interval # ; interval de test si état = OK retry_interval # ; interval de test si etat est NOK. active_checks_enabled [0/1] ; active les tests via Nagios passive_checks_enabled [0/1] ; active les tests indirects, style NRPE, nsclient... check_period timeperiod_name ; période de test, souvent "24x7" obsess_over_host [0/1] ; experimentale - a utiliser avec precaution - defaut à zéro check_freshness [0/1] ; a utiliser avec passive tests ! en général plus pour un service qu'un hote. ; A utiliser si vous utilisez un Nagios en redondant. freshness_threshold # ; a utiliser avec passifs test et en Nagios redondant ; elle indique en secondes l'âge maximum des résultats fournis pour ce service, sachant qu'il s'agit en général d'un système distribué event_handler command_name ; permet de lancer une commande après que le SVC soit passé en NOK, style un reboot du SVC, un autre test... event_handler_enabled [0/1] ; active ou pas le gestionnaire d’événement low_flap_threshold # ; a utiliser si l'option "flap_detection_enabled" est active, à utiliser en particulier pour la mémoire, CPU. ; Donc plus pour un service qu'un hôte en général. high_flap_threshold # ; a utiliser si l'option "flap_detection_enabled" est active sinon Nagios supprime les notifications sauf ; les valeures hautes et basses sont dépassées. flap_detection_enabled [0/1] ; active le mode "oscillation" de l'hôte, en général valable pour un service et non un hote. flap_detection_options [o,d,u] ; Ok / DOWN / UP process_perf_data [0/1] ; a utiliser pour faire des stats via MRTG ou autre... retain_status_information [0/1] ; conserve un état de l’hôte si Nagios est redémarré - par défaut = 1 retain_nonstatus_information [0/1] ; conserve l'état ...si Nagios est redémarré par défaut = 1 contacts contacts ; à remplir, si notification activée contact_groups contact_groups notification_interval # ; notification_interval 0 ; C'est le nombre d'"unités de temps" à patienter avant de re-notifier un ; contact que l'hôte est toujours hors service ou inaccessible. ; Si vous n'avez pas modifié la valeur par défaut de la variable interval_length dans ; le fichier de configuration principal, qui est de 60, ce nombre exprime des minutes. ; Si vous mettez cette valeur à 0, Nagios ne re-notifiera pas les contacts à propos des problèmes ; de cet hôte - une seule notification sera émise. first_notification_delay # ; quand sera transmise la 1ere notification en principe tout de suite donc à zéro ou sinon réglable : "0h 0m 0s" notification_period timeperiod_name ; notification_period 24x7 ; C'est le nom court de la période durant laquelle les notifications d'événements ; concernant cet hôte peuvent être émises vers les contacts. ; Si un hôte est hors service, inaccessible, ou se rétablit en dehors ; de la période de notification, aucune notification ne sera envoyée. notification_options [d,u,r,f,s] ; Cette directive définit quand les notifications pour cet hôte doivent être envoyées. ; Les options valides sont une combinaison d'une ou plusieurs des valeurs suivantes : ; d = envoi de la notification pour un état DOWN, ; u = envoi de la notification pour un état UNREACHABLE , et ; r = envoi de la notification pour le retour à la normale (état OK). ; f = mode "flap" ; s = mode "stop" ; Si vous spécifiez la valeur n (none), aucune notification ne sera envoyée. ; Exemple: avec les valeurs d,r dans ce champ, les notifications seront envoyées quand l'hôte ; sera DOWN et quand il sortira de cet état pour un état OK. notifications_enabled [0/1] stalking_options [o,d,u]; ; utilisé en général pour un service OK / DOWN / non joignable ; permet de notifier en limitant si besoin les états ; si vous sélectionnez que U, uniquement les notifications UP seront envoyées ; (Cette option n'est pas encore documenté pour un hôte). ; par défaut = none ou rien(vide). notes note_string ; description possible notes_url url action_url url ; pour un site WEB, il est possible de placer son lien ici. icon_image image_file icon_image_alt alt_string vrml_image image_file statusmap_image image_file ; en prinicpe au format GD2. 2d_coords x_coord,y_coord 3d_coords x_coord,y_coord,z_coord }
La définition d'un service identifie un service tournant sur un hôte. Le terme "service" est très générique. Il peut s'appliquer à un service ( tel que POP, SMTP, HTTP, etc.) ou bien tout autre type de mesure associé à l'hôte (temps de réponse à un “ping”, nombre d'utilisateurs connectés, usage des disques). Les différents arguments sont expliqués ci-dessous. Ce fichier est également indispensable et primordial : c'est lui qui définit les tests à effectuer pour un service. Il ressemble au précédent fichier avec des options identiques mais applicables à un service. Il est conseillé de faire plusieurs fichiers services plutôt qu'un gros fichier inexploitable par la suite.
Il est conseillé de travailler avec les templates; expliqués par la suite.
define service{ host_name host_name hostgroup_name hostgroup_name service_description service_description display_name display_name servicegroups servicegroup_names ; appartenance à un group de service is_volatile [0/1] ; En principe tous les services sont "non volatiles" (normaux). Donc valeur à zéro ; a utiliser dans des cas "rares" comme sur un test (portsentry), une alerte dans ou sur un fichier (log), une alarme... check_command command_name ; la commande à lancer pour les tests initial_state [o,w,u,c] ; OK/ WARNING / UNKNOWN joignable / CRITICAL ; peut utiliser max_check_attempts # ; C'est le nombre de fois que Nagios relancera la commande de contrôle du SVC ; si celle-ci retourne un état différent de OK. Positionner cette valeur à 1 fera ; que Nagios générera une alerte sans re-contrôler. ; Note : si vous ne voulez pas contrôler l'état,vous devez quand même mettre une valeur supérieure ou égale à 1. check_interval # ; interval de test si état = OK - minutes retry_interval # ; interval de test si etat est NOK. minutes active_checks_enabled [0/1] ; test via Nagios passive_checks_enabled [0/1] ; test via NRPE, nsclient... check_period timeperiod_name ; période de test, souvent "24x7" obsess_over_service [0/1] ; experimentale - à utiliser avec précaution - défaut à zéro check_freshness [0/1] ; a utiliser avec passive tests ! en général plus pour un service qu'un hôte. ; à utiliser avec un nagios en redondant freshness_threshold # ; a utiliser avec passifs test ! ; à utiliser avec un nagios en redondant event_handler command_name ; permet de lancer une commande supplémentaire une fois l'état est NOK event_handler_enabled [0/1] ; active le gestionnaire d’événement complémentaire ou pas, en général non low_flap_threshold # ; a utiliser si l'option "flap_detection_enabled" est active, à utiliser en particulier pour la mémoire, CPU. ; Donc plus pour un service qu'un hôte en général. high_flap_threshold # ; a utiliser si l'option "flap_detection_enabled" est active sinon Nagios supprime les notifications sauf ; les valeures hautes et basses sont dépassées. flap_detection_enabled [0/1] ; active le mode "oscillation" de l'hôte, en général valable pour un service et non un hote. flap_detection_options [o,w,c,u] ; Ok / WARNING / CRITICAL / Non joignable process_perf_data [0/1] retain_status_information [0/1] ; conserve un état de l'hote si Nagios est redémarré - par défaut = 1 retain_nonstatus_information [0/1] ; conserve l'état ...si Nagios est redémarré par défaut = 1 notification_interval # ; tout de suite donc 0 first_notification_delay # notification_period timeperiod_name ; notification_period 24x7 ; C'est le nom court de la période durant laquelle les notifications d'événements ; concernant cet hôte peuvent être émises vers les contacts. ; Si un hôte est hors service, inaccessible, ou se rétablit en dehors ; de la période de notification, aucune notification ne sera envoyée. notification_options [w,u,c,r,f,s] ; Cette directive définit quand les notifications pour cet hôte doivent être envoyées. ; Les options valides sont une combinaison d'une ou plusieurs des valeurs suivantes : ; w = warning ; u = UP ; c = CRITICAL ; r = envoi de la notification pour le retour à la normale (état OK RECOVERY). ; f = mode "flap" ; s = mode "stop" ; Si vous spécifiez la valeur n (none), aucune notification ne sera envoyée. notifications_enabled [0/1] stalking_options [o,d,u]; ; utilisé en général pour un service OK / DOWN / UP ; permet de notifier en limitant si besoin les états ; si vous sélectionnez que U, uniquement les notifications UP seront envoyées ; (Cette option n'est pas encore documenté pour un hôte). ; par défaut = none ou rien(vide). contacts contacts contact_groups contact_groups stalking_options [o,w,u,c] ; utilisé en général pour un service OK / DOWN / UP ; permet de notifier en limitant si besoin les états ; si vous sélectionnez que U, uniquement les notifications UP seront envoyées ; (Cette option n'est pas encore documenté pour un hôte). ; par défaut = none ou rien(vide). notes note_string notes_url url action_url url icon_image image_file icon_image_alt alt_string }
Ce fichier permet de regrouper les mêmes services pour une simplification de la configuration.
Depuis je ne sais pas combien temps, mais dans la définition du service existe également l'option
servicegroups
. Certes elle peut être utilisée ici. Personnellement je préfère configurer les groupements au travers d'un fichier dédié à cela.
La configuration est très simple ici; pas de “templates” possibles. Il suffit de placer l'identification du service au niveau de l'option members
.
Chaque valeur doit être séparée par une virgule.
define servicegroup{ servicegroup_name http-services alias WEB Services members web1,web2,Server,web3 }
Il est possible d'ajouter la variable servicegroup_members
pour inclure un groupe dans ce groupe. Il est possible de faire une note
également.
Une définition de contact s'applique à la personne physique, qui doit être contactée en cas de problèmes sur le réseau. Les différents arguments possibles sont expliqués ci-dessous
############################################################################### # CONTACTS.CFG - SAMPLE CONTACT/CONTACTGROUP DEFINITIONS # # NOTES: This config file provides you with some example contact and contact # group definitions that you can reference in host and service # definitions. # # You don't need to keep these definitions in a separate file from your # other object definitions. This has been done just to make things # easier to understand. # ############################################################################### # Il est possible de faire encore plus fin : #define contact{ #contact_name mdupont #alias Moi Dupont #host_notifications_enabled 1 #service_notifications_enabled 1 #service_notification_period 24x7 #host_notification_period 24x7 #service_notification_options w,u,c,r #host_notification_options d,u,r #service_notification_commands notify-by-email #host_notification_commands host-notify-by-email #email mdupont@domain.fr #pager 456-7890@pager.domain.fr #address1 mdupont@icq.com #address2 545-565-5775 #can_submit_commands 1 #} # 06 adresses MAX à utiliser avec la vaviable $CONTAC-TADDRESSx$ ou "x" est le n° ############################################################################### ############################################################################### # # CONTACTS # ############################################################################### ############################################################################### define contact{ use generic-contact ; Inherit default values from generic-contact template (defined above) contact_name paul ; Short name of user alias Paul Linux Admin ; Full name of user email paul@localhost ; }
Cette définition permet de regrouper un ou plusieurs contacts pour émettre des notifications. Quand un hôte ou un service à un problème ou se rétablit, Nagios recherche les groupes de contacts à qui envoyer des notifications, et les notifie. Ceci peut sembler complexe, mais dans la plupart des cas, ce ne le sera pas. On obtient ainsi une meilleure souplesse dans la définition de qui est notifié vis-à-vis d'un problème. Les différents arguments d'une définition de groupe de contacts sont détaillés ci-dessous.
define contactgroup{ contactgroup_name linux-admins alias Linux Administrators members jdoe,robert,paul }
Cette définition permet de regrouper un ou plusieurs hôtes pour simplifier la gestion, et simplifie l'affichage dans Nagios. Chaque hôte que vous définissez doit être membre d'au moins un groupe d'hôtes, même si c'est le seul hôte du groupe. Un hôte peut faire partie de plusieurs groupes. Quand un hôte est hors service, inaccessible, ou se rétablit, Nagios recherche les groupes dont cet hôte fait partie, en extrait chaque groupe de contacts, et les notifie. On obtient ainsi une meilleure souplesse.
# A list of your Debian GNU/Linux servers define hostgroup { hostgroup_name debian-servers alias Debian GNU/Linux Servers members localhost, serveur, vm-debian }
Une période est une liste de tranches horaires pour les différents jours de la semaine, qui sont "valides" pour l'envoi des notifications et les contrôles de service.
Ces tranches sont elles-mêmes composées d'autres tranches de temps, pour chaque jour de la semaine.
On ne peut pas définir d'exception. Par contre on peut utiliser l'option use
pour inclure une déclaration qui fera
exception sur des dates ou des horaires.
define timeperiod{ name us-holidays timeperiod_name us-holidays alias U.S. Holidays january 1 00:00-00:00 ; New Years monday -1 may 00:00-00:00 ; Memorial Day (last Monday in May) july 4 00:00-00:00 ; Independence Day monday 1 september 00:00-00:00 ; Labor Day (first Monday in September) thursday 4 november 00:00-00:00 ; Thanksgiving (4th Thursday in November) december 25 00:00-00:00 ; Christmas } # This defines a modified "24x7" timeperiod that covers every day of the # year, except for U.S. holidays (defined in the timeperiod above). define timeperiod{ timeperiod_name 24x7_sans_holidays alias 24x7 Sans Holidays use us-holidays ; va inclure les journées fériées. sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 }
Les commandes qu'on peut définir sont les contrôles de service, les notifications de service, les gestionnaires d'événements de services, les contrôles d'hôtes, les notifications d'hôtes, et les gestionnaires d'événements d'hôtes. Les définitions de commandes peuvent contenir des macros, mais vous devez vous assurer de n'utiliser que des macros "valides" dans le contexte de la commande. Les différents arguments d'une définition de commande sont détaillés ci-dessous.
############################################################################### # COMMANDS.CFG - SAMPLE COMMAND DEFINITIONS FOR NAGIOS 3.99.96 # # # NOTES: This config file provides you with some example command definitions # that you can reference in host, service, and contact definitions. # # You don't need to keep commands in a separate file from your other # object definitions. This has been done just to make things easier to # understand. # ############################################################################### # These are some example notification commands. They may or may not work on # your system without modification. As an example, some systems will require # you to use "/usr/bin/mailx" instead of "/usr/bin/mail" in the commands below. ################################################################################ # 'notify-host-by-email' command definition define command{ command_name notify-host-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ } ################################################################################ # # SAMPLE HOST CHECK COMMANDS # ################################################################################ # This command checks to see if a host is "alive" by pinging it # The check must result in a 100% packet loss or 5 second (5000ms) round trip # average time to produce a critical error. # Note: Five ICMP echo packets are sent (determined by the '-p 5' argument) # 'check-host-alive' command definition define command{ command_name check-host-alive command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5 } ################################################################################ # 'check_local_disk' command definition define command{ command_name check_local_disk command_line $USER1$/check_disk -W 85 -C 90 -p $ARG1$ -u GB } # 'check_local_load' command definition define command{ command_name check_local_load command_line $USER1$/check_load -w $ARG1$ -c $ARG2$ } # 'check_local_procs' command definition define command{ command_name check_local_procs command_line $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$ } # 'check_local_users' command definition define command{ command_name check_local_users command_line $USER1$/check_users -w $ARG1$ -c $ARG2$ } # 'check_local_swap' command definition define command{ command_name check_local_swap command_line $USER1$/check_swap -w $ARG1$ -c $ARG2$ } # 'check_local_temp-CPU' command definition # voir manuel a l'interieur du script !!! define command{ command_name check_local_temp command_line $USER1$/check_temp.pl -s temp1 -w 65 -c 75 } # 'check_local_mrtgtraf' command definition #define command{ # command_name check_local_mrtgtraf # command_line $USER1$/check_mrtgtraf -F $ARG1$ -a $ARG2$ -w $ARG3$ -c $ARG4$ -e $ARG5$ # } ################################################################################ # NOTE: The following 'check_...' commands are used to monitor services on # both local and remote hosts. ################################################################################ # 'check_ftp' command definition define command{ command_name check_ftp command_line $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$ } # 'check_snmp' command definition define command{ command_name check_snmp command_line $USER1$/check_snmp -H $HOSTADDRESS$ $ARG1$ } # 'check_http' command definition define command{ command_name check_http command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$ } # 'check_ssh' command definition define command{ command_name check_ssh command_line $USER1$/check_ssh $ARG1$ $HOSTADDRESS$ } # 'check_dhcp' command definition define command{ command_name check_dhcp command_line $USER1$/check_dhcp $ARG1$ } # 'check_ping' command definition define command{ command_name check_ping command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5 } # 'check_pop' command definition define command{ command_name check_pop command_line $USER1$/check_pop -H $HOSTADDRESS$ $ARG1$ } # 'check_imap' command definition define command{ command_name check_imap command_line $USER1$/check_imap -H $HOSTADDRESS$ $ARG1$ } # 'check_smtp' command definition define command{ command_name check_smtp command_line $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$ } # 'check_tcp' command definition define command{ command_name check_tcp command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$ } # 'check_udp' command definition define command{ command_name check_udp command_line $USER1$/check_udp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$ } # 'check_nt' command definition define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$ } #./check_mem.sh - Les valeurs W + C sont inscrites dans le plugin !!! define command{ command_name check_mem command_line $USER1$/check_mem1.sh -w 85 -c 90 } ################################################################################ # # SAMPLE PERFORMANCE DATA COMMANDS - 2 Lignes coupées volontairement pour ce document ! # ################################################################################ # 'process-host-perfdata' command definition define command{ command_name process-host-perfdata command_line /usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\ t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /var/nagios/host-perfdata.out } # 'process-service-perfdata' command definition define command{ command_name process-service-perfdata command_line /usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\ t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /var/nagios/service-perfdata.out } # Pour nagiosgraph configuration define command { command_name process-service-perfdata-for-nagiosgraph command_line /usr/local/nagiosgraph/bin/insert.pl }
Les définitions de dépendance du service sont une fonctionnalité avancée de Nagios qui permet de supprimer des notifications et des contrôles actifs, à partir de l'état d'un ou plusieurs services. Elles sont optionnelles et sont principalement destinées aux utilisateurs avertis qui ont des configurations de supervisions complexes.
define servicedependency{ host_name WEB service_description Apache HTTP dependent_host_name localhost dependent_service_description Main Web Site execution_failure_criteria n notification_failure_criteria w,u,c }
Une définition d'escalade pour un service est complètement optionnelle, et est utilisée pour notifier un ou plusieurs contacts différents de la première notification ou plus.
define serviceescalation{ host_name act-1 service_description Mail problem first_notification 4 last_notification 0 notification_interval 15 contact postmaster@domain.fr ;contact_groups admins,themanagers (optionnelle) ;escalation_period 24x7 (optionnelle) }
Un groupe de services permet de rassembler plusieurs services ensemble pour pouvoir apparaître dans les CGIs. Très pratique lors d'une multitude de services testés.
# ******************************************************************* # servicegroups.cfg # # Pour prise en compte ne pas oublier dans nagios.cfg, # la mise a jour/ajout de cfg_file=/etc/nagios/servicegroups.cfg # ******************************************************************* # service group >>> PING define servicegroup{ servicegroup_name PING alias Tests PING members serveur,dm,nt1,switch1 } # service group >>> HTTP define servicegroup{ servicegroup_name HTTP alias Test serveur WWW members serveur,HTTP,dm,HTTP } # service group >>> MEM define servicegroup{ servicegroup_name MEMOIRE alias Mémoire utilisé members serveur,MEM }
Ce fichier est obsolète avec la version 4.0.x ! (nouveau). Ses paramètres identiques sont à inclure désormais avec la définition de l'hôte (Cf chap.hosts).
Les “templates” apportent une souplesse dans la configuration des paramètres pour les hôtes et les services.
Il est nécessaire de créer d'abord votre modèle, exemple generic-contact
puis de configurer avec précision tous les paramètres
communs de vos hôtes. Les paramètres spécifiques pour chaque hôte seront définis lors des déclarations. Il va de soi que les fichiers de configuration sont
plus compacts et plus faciles à comprendre en utilisant les templates.
L’utilisation est simple : d'abord il faut que votre modèle(template) soit conforme à vos réglages. Ensuite vous pouvez définir des paramètres particuliers au travers de cette configuration (exemple):
define host{ name linux-server ; Le nom du template use generic-host ; Le nom d'un template qui sert également pour compléter les définitions. ...
############################################################################### # TEMPLATES.CFG - SAMPLE OBJECT TEMPLATES # # NOTES: This config file provides you with some example object definition # templates that are refered by other host, service, contact, etc. # definitions in other config files. # # You don't need to keep these definitions in a separate file from your # other object definitions. This has been done just to make things # easier to understand. # ############################################################################### ############################################################################### # # CONTACT TEMPLATES # ############################################################################### ############################################################################### # Generic contact definition template - This is NOT a real contact, just a template! define contact{ name generic-contact ; The name of this contact template service_notification_period 24x7 ; Période de notification pour le service host_notification_period 24x7 ; Période de notification pour l'hôte service_notification_options w,u,c,r,f,s ; Prise en compte des statut pour les notifications (services) host_notification_options d,u,r,f,s ; Prise en compte des statut pour les notifications (hôtes) service_notification_commands notify-service-by-email ; send service notifications via email host_notification_commands notify-host-by-email ; send host notifications via email register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE! } ############################################################################### ############################################################################### # # HOST TEMPLATES # ############################################################################### ############################################################################### # Generic host definition template - This is NOT a real host, just a template! define host{ name generic-host notifications_enabled 1 ; Host notifications are enabled event_handler_enabled 1 ; Host event handler is enabled flap_detection_enabled 1 ; Flap detection 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_period 24x7 ; By default, Linux hosts are checked round the clock check_command check-host-alive ; la commande pour le test 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! } # Linux host definition template - This is NOT a real host, just a template! define host{ name linux-server ; The name of this host template use generic-host ; This template inherits other values from the generic-host template check_period 24x7 ; By default, Linux hosts are checked round the clock check_interval 5 ; Actively check the host every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each Linux host 10 times (max) check_command check-host-alive ; Default command to check Linux hosts notification_period 24x7 ; notification_interval 60 ; Resend notifications / 60 mn notification_options d,u,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE! } # Define a template for switches that we can reuse define host{ name generic-switch ; The name of this host template use generic-host ; Inherit default values from the generic-host template check_period 24x7 ; By default, switches are monitored round the clock check_interval 5 ; Switches are checked every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each host 10 times (max) check_command check-host-alive ; Default command to check if routers are "alive" notification_period 24x7 ; Send notifications at any time notification_interval 30 ; Resend notifications every 30 minutes notification_options d,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE } ############################################################################### ############################################################################### # # SERVICE TEMPLATES # ############################################################################### ############################################################################### # Generic service definition template - This is NOT a real service, just a template! # generic service template definition define service{ name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Test actif (via Nagios) passive_checks_enabled 0 ; Test passif (via NRPE/nsclient...) parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 0 ; We should obsess over this service (if necessary) check_freshness 0 ; A utiliser via des plugins externes (NSCDA) notifications_enabled 1 ; Les notifications sont actives event_handler_enabled 1 ; Le gestionnaire d’événement est il active flap_detection_enabled 1 ; "Flap" ou qui oscille process_perf_data 1 ; Data complémentaire (souvent utilise dans les graphes) retain_status_information 1 ; garde en rétention les données (re demarrage de Nagios) retain_nonstatus_information 1 ; Nagios peut garder en retention des variables de conf, si problème il faut placer cette valeur à zero notification_interval 0 ; Notifications sur changement de statut. is_volatile 0 ; check_period 24x7 ; période de tests/notification normal_check_interval 5 ; Toutes les 5 mn retry_check_interval 1 ; test /1 mn après changement d'etat (voir avec "interval length") max_check_attempts 1 ; Nbr de fois que Nagios va tenter de contrôler l’hôte si l’état est NOK, suivi d'une notification. Vide=rien notification_period 24x7 notification_options w,u,c,r contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! } # Local service definition template - This is NOT a real service, just a template! define service{ name local-service ; The name of this service template use generic-service ; Inherit default values from the generic-service definition max_check_attempts 4 ; Re-check the service up to 4 times in order to determine its final (hard) state normal_check_interval 5 ; Check the service every 5 minutes under normal conditions retry_check_interval 1 ; Re-check the service every minute until a hard state can be determined register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }
Table of Contents
Son utilisation est simple : à savoir que ce serveur est destiné à Gnu/Linux. Il n'est pas possible d'interroger des services sur une machine distante sans un additif quelconque. Il existe pour Nagios une formule via SSH qui fonctionne, mais aussi via NRPE. C'est cette formule qui sera utilisée et expliquée. Le serveur Nagios demandera au serveur client de réaliser des commandes à sa place, et de lui retourner les résultats. Les commandes, vers le serveur NRPE, peuvent comporter des arguments. Les arguments peuvent être définis avec précision au niveau du client. C'est aussi cette solution que j'ai adoptée. Dans un premier temps, elle évite de surcharger Nagios par des paramètres spécifiques, alors qu'une commande générique suffit. Au niveau de la sécurité, le transfert de ces variables peut poser un problème, surtout si vous n'utilisez pas SSL (comme moi).
Au sujet de SSL, NRPE peut communiquer avec ce protocole pour sécuriser les connexions. Personnellement je n'ai pas opté pour cette solution.
Pour télécharger : Sourceforge-NRPE.
Il faut se placer dans le répertoire puis lancer la compilation via cette commande :
./configure --prefix=/usr/local/nagios --localstatedir=/var/nagios --sysconfdir=/etc/nagios \ --with-nrpe-user=nagios --with-nrpe-grp=nagioscmd --infodir=/usr/share/info --mandir=/usr/share/man \ --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu
La dernière ligne est importante surtout si rencontrez l'erreur suivante :
checking for SSL libraries... configure: error: Cannot find ssl libraries
Tout est mentionné :
*** Generating DH Parameters for SSL/TLS *** Generating DH parameters, 512 bit long safe prime, generator 2 This is going to take a long time ........................+.......+........+......+........+...+..........+......++*++*++*++*++*++* checking for Kerberos include files... could not find include files checking for perl... /usr/bin/perl configure: creating ./config.status config.status: creating Makefile config.status: creating subst config.status: creating src/Makefile config.status: creating package/solaris/Makefile config.status: creating init-script config.status: creating init-script.debian config.status: creating init-script.suse config.status: creating nrpe.spec config.status: creating sample-config/nrpe.cfg config.status: creating sample-config/nrpe.xinetd config.status: creating include/config.h config.status: include/config.h is unchanged configure: WARNING: unrecognized options: --with-nrpe-grp *** Configuration summary for nrpe 2.14 12-21-2012 ***: General Options: ------------------------- NRPE port: 5666 NRPE user: nagios NRPE group: nagios Nagios user: nagios Nagios group: nagios
Ensuite il faut lancer la commande make all && make install plugin && make install-daemon && make install-daemon-config && ,
cette étape est rapide. Après et manuellement il faut copier les exécutables qui se trouvent dans le répertoire src
vers le
répertoire suivant: (/usr/local/nagios/bin
).
J'avoue avoir passé un certain temps avant d'apercevoir mes états en “OK”. En se servant de mes fichiers cette étape est courte.
Ce fichier est facile à régler, il ne pose pas de problème.
# defaults file for nagios-nrpe-server # (this file is a /bin/sh compatible fragment) # DAEMON_OPTS # -n = sans SSL DAEMON_OPTS="-n" NICENESS=5 # INETD is if you want to run the server via inetd (default=0, run as daemon) INETD=0
Ce fichier a été l'un de mes problèmes. Avec une Debian en version 7, la commande sudo
n'est plus incluse par défaut.
Le fichier /etc/sudousers
est donc également absent; en conséquence il ne faut pas activer la ligne # command_prefix=/usr/bin/sudo
, au risque de voir le message “Unable to read output”. Le cas échéant il suffit d'abord de tester sans la commande sudo
puis
adapter ou pas.
Rien de bien spécial dans ce fichier, il est important de tester les commandes avant de les placer définitivement. Au moindre problème, il faut passer en mode débogage et rechercher
l'erreur. NRPE utilise le fichier/etc/hosts.allow
, il est donc recommandé d'y placer l'adresse IP du serveur Nagios.
NRPE écrit toutes ses historiques dans le fichier /var/log/syslog
, pour mémoire.
############################################################################# # Sample NRPE Config File # Written by: Ethan Galstad (nagios@nagios.org) # # Last Modified: 11-23-2007 # # NOTES: # This is a sample configuration file for the NRPE daemon. It needs to be # located on the remote host that is running the NRPE daemon, not the host # from which the check_nrpe client is being executed. ############################################################################# # LOG FACILITY log_facility=daemon # PID FILE pid_file=/run/nagios/nrpe.pid # PORT NUMBER vérifier/modifier le fichier /etc/services si besoin server_port=5666 # SERVER ADDRESS # Adresse IP du serveur, chaque client de Nagios est serveur NRPE, c'est l'@IP d'écoute donc pas "127.0.0.1" server_address=192.168.1.4 # NRPE USER nrpe_user=nagios nrpe_group=nagios # NOTE: c'est l'@IP de nagios, pour plusieurs IP il faut placer une virgule # possible 192.168.1.0/24 allowed_hosts=192.168.1.2 # COMMAND ARGUMENT PROCESSING # Values: 0=SANS prise en compte de paramètre, 1= AVEC prise en compte dont_blame_nrpe=0 # COMMAND PREFIX SUDO # # nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/ # # command_prefix=/usr/bin/sudo # DEBUGGING OPTION # Values: 0=debugging off, 1=debugging on debug=0 # COMMAND TIMEOUT # This specifies the maximum number of seconds that the NRPE daemon will # allow plugins to finish executing before killing them off. command_timeout=60 # CONNECTION TIMEOUT connection_timeout=300 # WEEK RANDOM SEED OPTION # This directive allows you to use SSL even if your system does not have # a /dev/random or /dev/urandom (on purpose or because the necessary patches # were not applied). The random number generator will be seeded from a file # which is either a file pointed to by the environment valiable $RANDFILE # or $HOME/.rnd. If neither exists, the pseudo random number generator will # be initialized and a warning will be issued. # Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness #allow_weak_random_seed=1 # INCLUDE CONFIG FILE # This directive allows you to include definitions from an external config file. #include=somefile.cfg # INCLUDE CONFIG DIRECTORY # This directive allows you to include definitions from config files (with a # .cfg extension) in one or more directories (with recursion). #include_dir=somedirectory #include_dir=someotherdirectory # COMMAND DEFINITIONS # # Voici des exemples, ne pas hésiter à tester sur la machine pour les réglages... command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_disk]=/usr/lib/nagios/plugins/check_disk -u GB -c 10% -p / -p /var -p /home # command[check_var]=/usr/lib/nagios/plugins/check_disk -w GB -c 10% -p /var command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 command[check_http]=/usr/lib/nagios/plugins/check_http_status -w 1 -c 2 -H 127.0.0.1 # The following examples allow user-supplied arguments and can # only be used if the NRPE daemon was compiled with support for # command arguments *AND* the dont_blame_nrpe directive in this # config file is set to '1'. This poses a potential security risk, so # make sure you read the SECURITY file before doing this. #command[check_users]=/usr/lib/nagios/plugins/check_users -w $ARG1$ -c $ARG2$ #command[check_load]=/usr/lib/nagios/plugins/check_load -w $ARG1$ -c $ARG2$ #command[check_disk]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ #command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$ # # local configuration: # if you'd prefer, you can instead place directives here #include=/etc/nagios/nrpe_local.cfg # # you can place your config snipplets into nrpe.d/ # only snipplets ending in .cfg will get included #include_dir=/etc/nagios/nrpe.d/
En regardant de prés l'exécutable NRPE, pour inhiber le protocole SSL il faut utiliser le paramètre -n
, et non --no-ssl
.
NRPE - Nagios Remote Plugin Executor Copyright (c) 1999-2008 Ethan Galstad (nagios@nagios.org) Version: 2.14 Last Modified: 12-21-2012 License: GPL v2 with exemptions (-l for more info) SSL/TLS Available: Anonymous DH Mode, OpenSSL 0.9.6 or higher required *************************************************************** ** POSSIBLE SECURITY RISK - TCP WRAPPERS ARE NOT AVAILABLE! ** ** Read the NRPE SECURITY file for more information ** *************************************************************** Usage: nrpe [-n] -c config_file mode Options: -n = Do not use SSL config_file = Name of config file to use mode = One of the following operating modes: -i = Run as a service under inetd or xinetd -d = Run as a standalone daemon -d -s = Run as a subsystem under AIX
C'est bien le coté le plus simple ! Il faut installer les plugins spéciaux “nrpe”et c'est tout. Ceci peut-être fait via la commande apt-get install nagios-nrpe-plugin
.
Celui ci installe juste un script supplémentaire qui servira par la suite check_nrpe
, et divers fichiers.
Parmi les fichiers installés il existe de quoi prendre en compte la commande check_nrpe
par le fichier classique command.cfg
.
Voici ce qu'il faut ajouter :
############################################################################### # N R P E # nrpe sans ssl define command{ command_name check_nrpe command_line $USER1$/check_nrpe -n -H $HOSTADDRESS$ -c $ARG1$ } ################################################################################
Il reste à placer les commandes au niveau des services, ce qui donne en exemple :
################### N R P E ####################### define service{ use generic-service host_name vm-debian service_description HDD libre check_command check_nrpe!check_disk contact_groups admins } define service{ use generic-service host_name vm-debian service_description Charge check_command check_nrpe!check_load contact_groups admins }
Donc rien de très compliqué, les commandes sont simples car je ne passe aucun argument: c'est le client qui fait tout. On relance Nagios. Maintenant je peux superviser toutes les machines Gnu/Linux. Il est temps de passer à du similaire mais pour Windows.
Table of Contents
Après plusieurs recherches, il existe un site dédié à ce projet: http://nsclient.org/nscp/. Le site est bien fait il est possible de trouver la dernière version, et de la documentation.
Pour télécharger il faut choisir parmi les versions disponibles ici : http://nsclient.org/nscp/downloads. Vous avez le choix entre les formats .msi et .zip en version 32 ou 64 bits. Une fois sur l'hôte windows, il faut installer ce package. J'ai personnellement choisi une installation via un fichier en “.msi”, cette étape est propre et ne pose aucun problème. Un menu est créé pour la gestion de Nsclient.
Il faut vérifier que le service NSClient++ (Win32)
démarre automatiquement. Il est aussi possible d'utiliser les menus.
Ensuite à vous de régler le fichier nsclient.ini
afin d'éviter qu'il charge tout inutilement. Je n'ai rien fait d'autre, les 3 tests que je fais sur la mémoire,
la charge CPU et l'état des disques durs fonctionnent. Néanmoins les retours d'informations sont à mes yeux légers. J'aurais aimé plus d'informations.
Mon choix s'est donc porté sur le système NRPE que j'utilise déjà pour autre chose. Il est simple à configurer. Il correspond bien à mes demandes.
Vis-à-vis des plateformes Microsoft, je pense qu'il est possible de faire mieux.
Voici mon fichier d'initialisation :
# If you want to fill this file with all avalible options run the following command: # nscp settings --generate --add-defaults --load-all # If you want to activate a module and bring in all its options use: # nscp settings --activate-module <MODULE NAME> --add-defaults # For details run: nscp settings --help # fichier : nsclient.ini ; Undocumented section [/modules] ; CheckDisk - CheckDisk can check various file and disk related things. The current version has commands to check Size of hard drives and directories. CheckDisk = 1 ; Event log Checker. - Check for errors and warnings in the event log. This is only supported through NRPE so if you plan to use only NSClient this wont help you at all. CheckEventLog = 1 ; Check External Scripts - A simple wrapper to run external scripts and batch files. CheckExternalScripts = 1 ; Helper function - Various helper function to extend other checks. This is also only supported through NRPE. CheckHelpers = 1 ; Check NSCP - Checkes the state of the agent CheckNSCP = 0 ; CheckSystem - Various system related checks, such as CPU load, process state, service state memory usage and PDH counters. CheckSystem = 1 ; CheckWMI - CheckWMI can check various file and disk related things. The current version has commands to check Size of hard drives and directories. CheckWMI = 1 ; NRPE server - A simple server that listens for incoming NRPE connection and handles them. NRPEServer = 1 ; NSClient server - A simple server that listens for incoming NSClient (check_nt) connection and handles them. ; Although NRPE is the preferred method NSClient is fully supported and can be used for simplicity or for compatibility. NSClientServer = 0 ; Undocumented section [/settings/default] ; ALLOWED HOSTS - A comaseparated list of allowed hosts. You can use netmasks (/ syntax) or * to create ranges. allowed hosts = 192.168.1.2 ; PASSWORD - Password used to authenticate againast server password = mypass ; A list of aliases available. An alias is an internal command that has been "wrapped" (to add arguments). ; Be careful so you don't create loops (ie check_loop=check_a, check_a=check_loop) [/settings/external scripts/alias] ; alias_cpu - Alias for alias_cpu. To configure this item add a section called: /settings/external scripts/alias/alias_cpu alias_cpu = checkCPU warn=80 crit=90 time=5m time=1m time=30s ; alias_cpu_ex - Alias for alias_cpu_ex. To configure this item add a section called: /settings/external scripts/alias/alias_cpu_ex ;alias_cpu_ex = checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s ; alias_disk - Alias for alias_disk. To configure this item add a section called: /settings/external scripts/alias/alias_disk alias_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ; alias_disk_loose - Alias for alias_disk_loose. To configure this item add a section called: /settings/external scripts/alias/alias_disk_loose ;alias_disk_loose = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable ; alias_event_log - Alias for alias_event_log. To configure this item add a section called: /settings/external scripts/alias/alias_event_log ; alias_event_log = CheckEventLog file=application file=system MaxWarn=1 MaxCrit=1 "filter=generated gt -2d AND ; severity NOT IN ('success', 'informational') AND source != 'SideBySide'" truncate=800 unique descriptions "syntax=%severity%: %source%: %message% (%count%)" ; alias_file_age - Alias for alias_file_age. To configure this item add a section called: /settings/external scripts/alias/alias_file_age ;alias_file_age = checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%" ; alias_file_size - Alias for alias_file_size. To configure this item add a section called: /settings/external scripts/alias/alias_file_size ;alias_file_size = CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10 ; alias_mem - Alias for alias_mem. To configure this item add a section called: /settings/external scripts/alias/alias_mem alias_mem = checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page ; alias_process - Alias for alias_process. To configure this item add a section called: /settings/external scripts/alias/alias_process alias_process = checkProcState "$ARG1$=started" ; alias_process_count - Alias for alias_process_count. To configure this item add a section called: /settings/external scripts/alias/alias_process_count alias_process_count = checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started" ; alias_process_hung - Alias for alias_process_hung. To configure this item add a section called: /settings/external scripts/alias/alias_process_hung ;alias_process_hung = checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung" ; alias_process_stopped - Alias for alias_process_stopped. To configure this item add a section called: /settings/external scripts/alias/alias_process_stopped ;alias_process_stopped = checkProcState "$ARG1$=stopped" ; alias_sched_all - Alias for alias_sched_all. To configure this item add a section called: /settings/external scripts/alias/alias_sched_all ;alias_sched_all = CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0 ; alias_sched_long - Alias for alias_sched_long. To configure this item add a section called: /settings/external scripts/alias/alias_sched_long ;alias_sched_long = CheckTaskSched "filter=status = 'running' AND most_recent_run_time <-$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0 ; alias_sched_task - Alias for alias_sched_task. To configure this item add a section called: /settings/external scripts/alias/alias_sched_task ;alias_sched_task = CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0 ; alias_service - Alias for alias_service. To configure this item add a section called: /settings/external scripts/alias/alias_service alias_service = checkServiceState CheckAll ; alias_service_ex - Alias for alias_service_ex. To configure this item add a section called: /settings/external scripts/alias/alias_service_ex alias_service_ex = checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc ; alias_up - Alias for alias_up. To configure this item add a section called: /settings/external scripts/alias/alias_up alias_up = checkUpTime MinWarn=1d MinWarn=1h ; alias_updates - Alias for alias_updates. To configure this item add a section called: /settings/external scripts/alias/alias_updates alias_updates = check_updates -warning 0 -critical 0 ; alias_volumes - Alias for alias_volumes. To configure this item add a section called: /settings/external scripts/alias/alias_volumes alias_volumes = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ; alias_volumes_loose - Alias for alias_volumes_loose. To configure this item add a section called: /settings/external scripts/alias/alias_volumes_loose alias_volumes_loose = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable ; default - Alias for default. To configure this item add a section called: /settings/external scripts/alias/default default =
Et voici le retour des tests du coté de Nagios :
OK CPU Load ok. OK: All drives within bounds. OK: physical memory:Total: 2.97G-Used: 376M(12%)-Free: 2.6G(88%),virtual memory:Total:2G-Used:250M(12%)-Free:1.76G(88%),page file:Total:4.81G-Used:266M(5%)-Free:4.55G(95%)
A l'exception de la dernière ligne qui est trop complète, les autres tests ne retournent pas grand chose de précis.
Ce format est utilisé par plusieurs applications, dont Nagios™, mais hélas pas par Gimp™. Il est nécessaire d'utiliser un paquet supplémentaire libgd-tools
.
Une fois ce paquet installé, vous avez accès à la commande pngtogd2
.
Voici un exemple :
pngtogd2 file.png file.gd2 0 1
Il est indiqué que l'utilisation du format GD2 est préférable pour Nagios? Ceci lui permet un traitement plus rapide.
Son utilisation possible hormis l'image de fond comprise dans le fichier cgi.cfg est faisable dans la définition des hosts
,
ce qui donne icon_image exemple.png
et statusmap_image exemple.gd2
Table of Contents
En se rendant sur le site de Nagios exchange-vmware exchange et en cherchant des plugins pour Vmware™ on peut percevoir qu'il en existe de nombreux. J'ai regardé avec attention tous les plugins intéressants. Un seul a vraiment attiré mon attention : il s'agit de ce projet : Vmware ESX & VM host; il a pour moi l'avantage de rassembler beaucoup de commandes. Le script est maintenu par la société OP5. Hélas pour moi faute d'un Vcenter proche, je n'ai pas pu le tester.
Ce n'est pas forcément le plugin le plus simple à installer, il est nécessaire d'installer tout çà :
apt-get install libmath-calc-units-perl libclass-methodmaker-perl libnagios-object-perl libnagios-plugin-perl libnet-ssleay-perl \ libcompress-zlib-perl libhtml-parser-perl liburi-perl libconfig-tiny-perl libparams-validate-perl libconvert-units-perl
Une fois ceci installé, il est temps d'aller chercher les sources du plugin via cette commande :
git clone git://git.op5.org/nagios/op5plugins.git op5plugins
Placez vous dans le répertoire op5plugins
: il suffit de récupérer le plugin check_vmware_api.pl
,
puis de le placer parmi les autres plugins. Il existe une page sur le site
d'OP5 qui explique tout cela : https://kb.op5.com/pages/viewpage.action?pageId=3801484
Usage: %s -D <data_center> | -H <host_name> [ -C <cluster_name> ] [ -N <vm_name> ] -u <user> -p <pass> | -f <authfile>" -l <command> [ -s <subcommand> ] [ -T <timeshift> ] [ -i <interval> ]" [ -x <black_list> ] [ -o <additional_options> ]" [ -t <timeout> ] [ -w <warn_range> ] [ -c <crit_range> ]" [ -V ] [ -h ]',
La version allongée de toutes ces commandes nous montrent ces vastes possibilités :
." VM specific :" * cpu - shows cpu info" + usage - CPU usage in percentage" + usagemhz - CPU usage in MHz" + wait - CPU wait time in ms" + ready - CPU ready time in ms" ^ all cpu info(no thresholds)" * mem - shows mem info" + usage - mem usage in percentage" + usagemb - mem usage in MB" + swap - swap mem usage in MB" + swapin - swapin mem usage in MB" + swapout - swapout mem usage in MB" + overhead - additional mem used by VM Server in MB" + overall - overall mem used by VM Server in MB" + active - active mem usage in MB" + memctl - mem used by VM memory control driver(vmmemctl) that controls ballooning" ^ all mem info(except overall and no thresholds)" * net - shows net info" + usage - overall network usage in KBps(Kilobytes per Second)" + receive - receive in KBps(Kilobytes per Second)" + send - send in KBps(Kilobytes per Second)" ^ all net info(except usage and no thresholds)" * io - shows disk I/O info" + usage - overall disk usage in MB/s" + read - read latency in ms (totalReadLatency.average)" + write - write latency in ms (totalWriteLatency.average)" ^ all disk io info(no thresholds)" * runtime - shows runtime info" + con - connection state" + cpu - allocated CPU in MHz" + mem - allocated mem in MB" + state - virtual machine state (UP, DOWN, SUSPENDED)" + status - overall object status (gray/green/red/yellow)" + consoleconnections - console connections to VM" + guest - guest OS status, needs VMware Tools" + tools - VMWare Tools status" + issues - all issues for the host" ^ all runtime info(except con and no thresholds)" Host specific :" * cpu - shows cpu info" + usage - CPU usage in percentage" o quickstats - switch for query either PerfCounter values or Runtime info" + usagemhz - CPU usage in MHz" o quickstats - switch for query either PerfCounter values or Runtime info" ^ all cpu info" o quickstats - switch for query either PerfCounter values or Runtime info" * mem - shows mem info" + usage - mem usage in percentage" o quickstats - switch for query either PerfCounter values or Runtime info" + usagemb - mem usage in MB" o quickstats - switch for query either PerfCounter values or Runtime info" + swap - swap mem usage in MB" o listvm - turn on/off output list of swapping VM's" + overhead - additional mem used by VM Server in MB" + overall - overall mem used by VM Server in MB" + memctl - mem used by VM memory control driver(vmmemctl) that controls ballooning" o listvm - turn on/off output list of ballooning VM's" ^ all mem info(except overall and no thresholds)" * net - shows net info" + usage - overall network usage in KBps(Kilobytes per Second)" + receive - receive in KBps(Kilobytes per Second)" + send - send in KBps(Kilobytes per Second)" + nic - makes sure all active NICs are plugged in" ^ all net info(except usage and no thresholds)" * io - shows disk io info" + aborted - aborted commands count" + resets - bus resets count" + read - read latency in ms (totalReadLatency.average)" + write - write latency in ms (totalWriteLatency.average)" + kernel - kernel latency in ms" + device - device latency in ms" + queue - queue latency in ms" ^ all disk io info" * vmfs - shows Datastore info" + (name) - free space info for datastore with name (name)" o used - output used space instead of free" o breif - list only alerting volumes" o regexp - whether to treat name as regexp" o blacklistregexp - whether to treat blacklist as regexp" x - blacklist VMFS's" T (value) - timeshift to detemine if we need to refresh" ^ all datastore info" o used - output used space instead of free" o breif - list only alerting volumes" o blacklistregexp - whether to treat blacklist as regexp" x - blacklist VMFS's" T (value) - timeshift to detemine if we need to refresh" * runtime - shows runtime info" + con - connection state" + health - checks cpu/storage/memory/sensor status" o listitems - list all available sensors(use for listing purpose only)" o blackregexpflag - whether to treat blacklist as regexp" x - blacklist status objects" + storagehealth - storage status check" o blackregexpflag - whether to treat blacklist as regexp" x - blacklist status objects" + temperature - temperature sensors" o blackregexpflag - whether to treat blacklist as regexp" x - blacklist status objects" + sensor - threshold specified sensor" + maintenance - shows whether host is in maintenance mode" + list(vm) - list of VMWare machines and their statuses" + status - overall object status (gray/green/red/yellow)" + issues - all issues for the host" x - blacklist issues" ^ all runtime info(health, storagehealth, temperature and sensor are represented as one value and no thresholds)" * service - shows Host service info" + (names) - check the state of one or several services specified by (names), syntax for (names):<service1>,<service2>,...,<serviceN>" ^ show all services" * storage - shows Host storage info" + adapter - list bus adapters" x - blacklist adapters" + lun - list SCSI logical units" x - blacklist LUN's" + path - list logical unit paths" x - blacklist paths" ^ show all storage info" * uptime - shows Host uptime" o quickstats - switch for query either PerfCounter values or Runtime info" * device - shows Host specific device info" + cd/dvd - list vm's with attached cd/dvd drives" o listall - list all available devices(use for listing purpose only)" DC specific :" * cpu - shows cpu info" + usage - CPU usage in percentage" o quickstats - switch for query either PerfCounter values or Runtime info" + usagemhz - CPU usage in MHz" o quickstats - switch for query either PerfCounter values or Runtime info" ^ all cpu info" o quickstats - switch for query either PerfCounter values or Runtime info" * mem - shows mem info" + usage - mem usage in percentage" o quickstats - switch for query either PerfCounter values or Runtime info" + usagemb - mem usage in MB" o quickstats - switch for query either PerfCounter values or Runtime info" + swap - swap mem usage in MB" + overhead - additional mem used by VM Server in MB" + overall - overall mem used by VM Server in MB" + memctl - mem used by VM memory control driver(vmmemctl) that controls ballooning" ^ all mem info(except overall and no thresholds)" * net - shows net info" + usage - overall network usage in KBps(Kilobytes per Second)" + receive - receive in KBps(Kilobytes per Second)" + send - send in KBps(Kilobytes per Second)" ^ all net info(except usage and no thresholds)" * io - shows disk io info" + aborted - aborted commands count" + resets - bus resets count" + read - read latency in ms (totalReadLatency.average)" + write - write latency in ms (totalWriteLatency.average)" + kernel - kernel latency in ms" + device - device latency in ms" + queue - queue latency in ms" ^ all disk io info" * vmfs - shows Datastore info" + (name) - free space info for datastore with name (name)" o used - output used space instead of free" o breif - list only alerting volumes" o regexp - whether to treat name as regexp" o blacklistregexp - whether to treat blacklist as regexp" x - blacklist VMFS's" T (value) - timeshift to detemine if we need to refresh" ^ all datastore info" o used - output used space instead of free" o breif - list only alerting volumes" o blacklistregexp - whether to treat blacklist as regexp" x - blacklist VMFS's" T (value) - timeshift to detemine if we need to refresh" * runtime - shows runtime info" + list(vm) - list of VMWare machines and their statuses" + listhost - list of VMWare esx host servers and their statuses" + listcluster - list of VMWare clusters and their statuses" + tools - VMWare Tools status" x - blacklist VM's" + status - overall object status (gray/green/red/yellow)" + issues - all issues for the host" x - blacklist issues" ^ all runtime info(except cluster and tools and no thresholds)" * recommendations - shows recommendations for cluster" + (name) - recommendations for cluster with name (name)" ^ all clusters recommendations" Cluster specific :" * cpu - shows cpu info" + usage - CPU usage in percentage" + usagemhz - CPU usage in MHz" ^ all cpu info" * mem - shows mem info" + usage - mem usage in percentage" + usagemb - mem usage in MB" + swap - swap mem usage in MB" o listvm - turn on/off output list of swapping VM's" + memctl - mem used by VM memory control driver(vmmemctl) that controls ballooning" o listvm - turn on/off output list of ballooning VM's" ^ all mem info(plus overhead and no thresholds)" * cluster - shows cluster services info" + effectivecpu - total available cpu resources of all hosts within cluster" + effectivemem - total amount of machine memory of all hosts in the cluster" + failover - VMWare HA number of failures that can be tolerated" + cpufainess - fairness of distributed cpu resource allocation" + memfainess - fairness of distributed mem resource allocation" ^ only effectivecpu and effectivemem values for cluster services" * runtime - shows runtime info" + list(vm) - list of VMWare machines in cluster and their statuses" + listhost - list of VMWare esx host servers in cluster and their statuses" + status - overall cluster status (gray/green/red/yellow)" + issues - all issues for the cluster" x - blacklist issues" ^ all cluster runtime info" * vmfs - shows Datastore info" + (name) - free space info for datastore with name (name)" o used - output used space instead of free" o breif - list only alerting volumes" o regexp - whether to treat name as regexp" o blacklistregexp - whether to treat blacklist as regexp" x - blacklist VMFS's" T (value) - timeshift to detemine if we need to refresh" ^ all datastore info" o used - output used space instead of free" o breif - list only alerting volumes" o blacklistregexp - whether to treat blacklist as regexp" x - blacklist VMFS's" T (value) - timeshift to detemine if we need to refresh" Copyright (c) 2008-2013 op5 AB,
Avant de tester tout cela avec Nagios™, il faut créer un compte dans le Vcenter en LECTURE uniquement(pour ce plugin).
Ces paramètres seront utilisés par les variables: u <user> -p <pass>
.
Il est possible d'ajouter dans Nagios $USER20$=supervision $USER21$=MotDePasse
depuis le fichier /etc/nagios/resource.cfg
pour faciliter la configuration.
A tester
define command { command_name check_esx_cpu command_line $USER1$/check_vmware_api.pl -H $ARG1$ -u $USER20$ -p $USER21$ -l cpu -s usage -w 80 -c 90 }
Autres commandes à traiter :
check_esx3_host_cpu_usage $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l cpu -s usage -w $ARG1$ -c $ARG2$ check_esx3_host_mem_usage $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l mem -s usage -w $ARG1$ -c $ARG2$ check_esx3_host_swap_usage $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l mem -s swap -w $ARG1$ -c $ARG2$ check_esx3_host_net_usage $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l net -s usage -w $ARG1$ -c $ARG2$ check_esx3_host_vmfs $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l vmfs -s $ARG1$ -w “$ARG2$:” -c “$ARG3$:” check_esx3_host_runtime_status $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l runtime -s status check_esx3_host_runtime_issues $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l runtime -s issues check_esx3_host_io_read $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l io -s read -w $ARG1$ -c $ARG2$ check_esx3_host_io_write $USER1$/check_esx3 -H $HOSTADDRESS$ -u $USER21$ -p $USER22$ -l io -s write -w $ARG1$ -c $ARG2$
Table of Contents
Nous avons maintenant un nouveau Nagios™. Il manque tout de même une option que Nagios ne fait pas d'origine, c'est la récupération des données des divers plugins pour en faire des graphiques.
Après maintes recherches, plusieurs projets existent, certains semblent ne plus être soutenus. J'ai retenu Nagiosgraph™, dans sa dernière version. Ce projet est bien coté, et les dernières mises à jour semblent ne pas être vieilles; le forum possède des dépôts très récents. Cette version est compatible avec mon Nagios en version 4.0.x.
En allant directement sur le site il est possible d'installer des versions adaptées à différentes distributions Gnu/Linux; hélas elles datent toutes de 2011. La solution, une fois de plus, consiste à récupérer les dernières sources avec un outil comme subversion™ ou gitub™. C'est gitub™ qui sera utilisé. Il suffit d'aller sur cette page : http://sourceforge.net/p/nagiosgraph/git/ci/master/tree/, puis de lancer cette commande : git clone git://git.code.sf.net/p/nagiosgraph/git nagiosgraph-git (expliqué sur le site).
Il est nécessaire de télécharger si besoin les dépendances suivantes :
apt-get install libcgi-pm-perl librrds-perl libgd-gd2-perl libgd-gd2-perl libnagios-object-perl
. Ensuite il faut se servir du fichier
INSTALL
. Tout est indiqué.
La commande ./install.pl est bien faite, pas-à-pas le script vous demande éventuellement de changer les paramètres. Une fois cette étape réalisée, ce programme vous fait un résumé dont voici les lignes les plus importantes :
configuration: ng_prefix /usr/local/nagiosgraph ng_etc_dir /etc/nagiosgraph ng_bin_dir /usr/local/nagiosgraph/bin ng_cgi_dir /usr/local/nagiosgraph/cgi ng_doc_dir /usr/local/nagiosgraph/doc ng_examples_dir /usr/local/nagiosgraph/examples ng_www_dir /usr/local/nagiosgraph/share ng_util_dir /usr/local/nagiosgraph/util ng_var_dir /usr/local/nagiosgraph/var ng_rrd_dir /usr/local/nagiosgraph/var/rrd ng_log_dir /var/log/nagiosgraph ng_log_file /var/log/nagiosgraph/nagiosgraph.log ng_cgilog_file /var/log/nagiosgraph/nagiosgraph-cgi.log ng_url /nagiosgraph ng_cgi_url /nagiosgraph/cgi-bin ng_css_url /nagiosgraph/nagiosgraph.css ng_js_url /nagiosgraph/nagiosgraph.js nagios_cgi_url /nagios/cgi-bin nagios_perfdata_file /tmp/perfdata.log nagios_user nagios www_user www-data
Warning | |
---|---|
Bien faire attention à la variable ng_etc_dir (2eme ligne) qui doit comporter le répertoire nagiosgraph .Sinon tout est posé là ou
on ne l'attend pas. |
Ce programme ne fait que créer des répertoires, copier des fichiers puis appliquer les droits nécessaires. Il est donc nécessaire d'adapter manuellement les divers fichiers de configuration et également de copier des fichiers.
Bien vérifier que vous avez un répertoire /etc/nagiosgraph
; celui ci comporte les fichiers de configuration essentiels.
Ensuite il suffit de faire les commandes suivantes, lesquelles sont toutes extraites du fichier INSTALL
.
Il faut copier les fichiers CSS et JavaScript vers les répertoires suivants:
cp share/nagiosgraph.css /usr/local/nagios/share cp share/nagiosgraph.js /usr/local/nagios/share
Il faut éditer le fichiers /etc/nagiosgraph/nagiosgraph.conf
et vérifier la cohérence des données suivantes:
logfile = /var/log/nagiosgraph.log cgilogfile = /var/nagiosgraph/log/nagiosgraph-cgi.log perflog = /var/nagios/perfdata.log rrddir = /var/nagiosgraph/rrd mapfile = /etc/nagiosgraph/map nagiosgraphcgiurl = /nagios3/cgi-bin javascript = /nagios3/nagiosgraph.js stylesheet = /nagios3/nagiosgraph.css
Il est nécessaire de modifier les droits sur les fichiers suivants. Le principe des droits est assez simple, c'est soit l'utilisateur/groupe nagios
ou
l'utilisateur/groupe www-data
(apache).
mkdir /var/nagiosgraph/rrd chown nagios /var/nagiosgraph/rrd chmod 755 /var/nagiosgraph/rrd touch /var/nagiosgraph/log/nagiosgraph.log chown nagios /var/nagiosgraph/log/nagiosgraph.log chmod 644 /var/nagiosgraph/log/nagiosgraph.log touch /var/nagiosgraph/log/nagiosgraph-cgi.log chown www-data /var/nagiosgraph/log/nagiosgraph-cgi.log chmod 644 /var/nagiosgraph/log/nagiosgraph-cgi.log chown nagios /var/nagiosgraph chmod 755 /var/nagiosgraph
Il faut adapter le fichier nagios.cfg
vis-à-vis de Nagiosgraph, en modifiant les lignes suivantes :
process_performance_data=1 service_perfdata_file=/var/nagios/perfdata.log service_perfdata_file_template=$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$ service_perfdata_file_mode=a service_perfdata_file_processing_interval=30 service_perfdata_file_processing_command=process-service-perfdata
Warning | |
---|---|
En théorie, les lignes précédentes sont incluses à la fin du fichier nagios.cfg, à vous de faire en sorte d'éviter des doublons dans ce fichier. |
Le fichier commands.cfg
doit également être modifié pour Nagiosgraph. Celle ci fonctionne très bien (il existe sur le NET plusieurs versions):
define command { command_name process-service-perfdata command_line /usr/local/nagios/libexec/insert.sh "$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$" }
A ce stade tout est presque fonctionnel; il est possible de lancer Nagios™, mais avec les paramètres actuels rien de visible ne sera perçu. Il est nécessaire pour cela de configurer les hôtes et surtout les services pour apprécier Nagiosgraph™. C'est l'étape suivante.
Avec la dernière version d'Ubuntu je n'ai plus les images qui apparaissent lors de la souris au dessus de l’icône Nagiosgraph (...).
Note | |
---|---|
Je ne montre aucun exemple de prise en compte d'un hôte par Nagiosgraph, je me suis focalisé sur les services, qui sont pour moi les plus importants pour les historiques et les statuts. De plus la supervision d'un hôte est simple à faire. |
Les manipulations précédentes étaient simples, nous allons attaquer une autre étape qui parfois peut se compliquer.
Nagiosgraph™ conseille de faire une déclaration d'un “template” à cet effet. Personnellement j'ai arrêté ce système car tous les services testés été pris en compte (erreur de ma part (?)). Ceci peut suffire pour certains. J'ai fait différemment.
Pour y parvenir via un template
“globale”, il suffit alors de rajouter dans cette situation les mots ,graphed-service
(exemple) à la suite de la ligne
use
appropriées. Les 2 services sont alors séparés par une virgule !
define service { name graphed-service ; cette ligne à été coupé volontairement pour ce document. action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$' onMouseOver='showGraphPopup(this)' onMouseOut='hideGraphPopup()' rel='/nagiosgraph/cgi-bin/showgraph.cgi?host =$HOSTNAME$&service=$SERVICEDESC$ register 0 }
Pour éviter une prise en compte globale des services par Nagiosgraph™, il suffit de rajouter uniquement la ligne action_url
dans la déclaration
du service.
Voici comment faire une prise en compte d'un service par Nagiosgraph™ de façon individuelle: la ligne concernée a été volontairement coupée pour s'adapter à la largeur du document :
define service { name NTP use local-service action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$' onMouseOver='showGraphPopup(this)' onMouseOut='hideGraphPopup()' rel='/nagiosgraph/cgi-bin/showgraph.cgi?host=$HOSTNAME$&service=$SERVICEDESC$ ... }
En principe, votre Nagios est désormais capable de vous montrer des graphiques; à ce titre la procédure pour créer les graphes est relativement longue. Par défaut, le cycle de création des graphiques est basé sur 5 minutes, donc ne rien attendre avant 2 cycles. Évidemment cette variable est réglable, mais c'est aussi vouloir paramétrer Nagiosgraph finement. De plus il est indispensable de bien connaître les méandres de rrdtool pour cela.
Il est nécessaire de modifier “encore” quelques fichiers pour finir.
Si nécessaire, il faut copier l’icône qui correspond aux graphiques de Nagiosgraph
dans le bon répertoire. Me concernant, cette opération n'était pas utile.
mv /usr/local/nagios/share/images/action.gif /usr/local/nagios/share/images/action.gif-orig cp share/graph.gif /usr/local/nagios/share/images/action.gif
Il faut apporter à Nagiosgraph de quoi prendre en compte les javascripts qui apportent un petit plus dans les graphiques, comme la sélection d'une zone.
vi share/nagiosgraph.ssi <script type="text/javascript" src="/nagiosgraph/nagiosgraph.js"></script> src="/nagiosgraph/nagiosgraph.js" -> src="" cp share/nagiosgraph.ssi /usr/local/nagios/share/ssi/common-header.ssi
Les modifications qui suivent apportent dans Nagios™ un menu supplémentaire pour Nagiosgraph; il sera situé du coté gauche comme les autres.
Il suffit d'éditer le fichier /usr/local/nagios/share/side.php
et de modifier/insérer les lignes suivantes :
Warning | |
---|---|
Il s'agit ici de mes paramètres personnalisés, les lignes de références à insérer sont présentes dans le fichier README de Nagiosgraph. |
<li><a href="<?php echo $cfg["cgi_base_url"];?>/outages.cgi" target="<?php echo $link_target;?>">Network Outages</a></li> </ul> </li> </ul> <div class="navsection"> <div class="navsectiontitle">Nagiosgraph</div> <div class="navsectionlinks"> <ul class="navsectionlinks"> <li><a href="<?php echo $cfg["cgi_base_url"];?>/trends.cgi" target="<?php echo $link_target;?>">Trends</a></li> <li><a href="/nagiosgraph/cgi-bin/show.cgi" target="main">Graphs++</a></li> <li><a href="/nagiosgraph/cgi-bin/showhost.cgi" target="main">Host</a></li> <li><a href="/nagiosgraph/cgi-bin/showservice.cgi" target="main">Service</a></li> <!-- <li><a href="/nagiosgraph/cgi-bin/showgroup.cgi" target="main">Group</a></li> --> </ul> <!-- ************* suppression de la recherche *************** <div class="navbarsearch"> <form method="get" action="<?php echo $cfg["cgi_base_url"];?>/status.cgi" target="<?php echo $link_target;?>"> <fieldset> <legend>Quick Search:</legend> <input type='hidden' name='navbarsearch' value='1'> <input type='text' name='host' size='15' class="NavBarSearchItem"> </fieldset> </form> </div> --> </div> <div class="navsection"> <div class="navsectiontitle">Reports</div>
Il est encore nécessaire de faire prendre en compte Nagiosgraph par Apache. Il suffit de rajouter dans le répertoire
conf.d
le fichier nagiosgraph.conf
avec les lignes suivantes :
ScriptAlias /nagiosgraph/cgi-bin /usr/local/nagiosgraph/cgi-bin <Directory "/usr/local/nagiosgraph/cgi-bin"> Options ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> Alias /nagiosgraph "/usr/local/nagiosgraph/share" <Directory "/usr/local/nagiosgraph/share"> Options None AllowOverride None Order allow,deny Allow from all </Directory>
A ce stade, Apache™ et Nagios™ doivent être relancés pour la prise en compte des diverses modifications.
Depuis l'interface graphique de Nagios vous devez apercevoir des icônes comportants un graphique ( ). Il suffit de placer la souris pour apercevoir en théorie un début de graphique. Il est également possible de cliquer sur ce même icône pour apercevoir plusieurs graphiques pour le service concerné.
Quoiqu'il en soit il est important de constater au moins la présence d'un icône “graphique”, ensuite c'est une excellente chose que de regarder l'ensemble des divers paramètres de Nagiosgraph™ au travers du lien suivant :
Note | |
---|---|
J'insiste une fois de plus sur l'importance du fichier README.html présent dans les sources, c'est la référence ! |
<li><a href="<?php echo $cfg["cgi_base_url"];?>/outages.cgi" target="<?php echo $link_target;?>">Network Outages</a></li> </ul> </li> </ul> <div class="navsection"> <div class="navsectiontitle">Nagiosgraph</div> <div class="navsectionlinks"> <ul class="navsectionlinks"> <li><a href="<?php echo $cfg["cgi_base_url"];?>/trends.cgi" target="<?php echo $link_target;?>">Trends</a></li> <li><a href="/nagiosgraph/cgi-bin/show.cgi" target="main">Graphs++</a></li> <li><a href="/nagiosgraph/cgi-bin/showhost.cgi" target="main">Host</a></li> <li><a href="/nagiosgraph/cgi-bin/showservice.cgi" target="main">Service</a></li> <!-- <li><a href="/nagiosgraph/cgi-bin/showgroup.cgi" target="main">Group</a></li> --> </ul> <!-- <div class="navbarsearch"> <form method="get" action="<?php echo $cfg["cgi_base_url"];?>/status.cgi" target="<?php echo $link_target;?>"> <fieldset> <legend>Quick Search:</legend> <input type='hidden' name='navbarsearch' value='1'> <input type='text' name='host' size='15' class="NavBarSearchItem"> </fieldset> </form> </div> --> </div> <div class="navsection"> <div class="navsectiontitle">Reports</div>
Ce fichier map
pour Nagiosgraph™ est un fichier de configuration essentiel. Néanmoins la prise en compte d'un service peut s'avérer
un calvaire. Je tiens à préciser que je ne mets pas en cause le programme ou même l'équipe de programmeurs. Ce programme est très bien fait, par
contre la prise en compte d'un service via ce fichier n'est pas toujours aisé.
Pour s'aider à paramétrer ce fichier, il existe sur le NET un excellent site avec de nombreux exemples:nagios.frank4dd.com
Voici à titre d'exemple mon fichier MAP, dont toutes les déclarations ne servent pas forcément.
# File: </path/to/nagiosgraph>/etc/map # Desc: Nagiosgraph map file, perl rules to extract graph data from Nagios # host and performance data sent to </path/to/nagiosgraph>/log/<file> # Last: 20100303 support@frank4dd.com ############################################################################### # INSTRUCTIONS: # # # # This file contains several examples of service types. Edit this file to # # add more service types. The data string from Nagios is in $_ . Use # # regular expressions to identify and extract data like the examples below # # below. Match on either output: or perfdata: . The code is pure perl, # # that will be run inside an eval{}. Results are expected in @s. The general # # format is: # # # # /output|perfdata:<servicetype> <key>=<value> <key2=value2> .../ # # and push @s, [ <databasename>, # # [ <key>, GAUGE|DERIVE, <value> ], # # [ <key2>, GAUGE|DERIVE, <value2> ], # # [ . . . ], # # [ . . . ] ]; # # # # More advanced code is possible, as long as the resulting data structure is # # correct. # ############################################################################### # 01 ------------------------------------------------------------------------ # # Data to graph: RoundTrip Time measured by Ping # # Service type: check-host-alive (ping) # # Nagios plugin: check_ping # # Nagios output: ||PING OK - Packet loss = 0%, RTA = 1.84 ms # # --------------------------------------------------------------------------- # /output:PING.*?(\d+)%.+?(\d+)\sms/ and push @s, [ 'ping', [ 'rta' , GAUGE, $2 ], [ 'Perte', GAUGE, $1 ] ]; # 03 ------------------------------------------------------------------------ # # Data to graph: Linux CPU load # # Service type: load-check # # Nagios plugin: check_snmp_load.pl # # Nagios output: ||Load : 0.48 0.62 0.40 : OK|| # # --------------------------------------------------------------------------- # /output:.*Charge moyenne: (\d+\.\d+), (\d+\.\d+), (\d+\.\d+)/ and push @s, [ 'CPU', [ '01mn', GAUGE, $1 ], [ '05mn', GAUGE, $2 ], [ '15mn', GAUGE, $3 ] ]; # 06 ------------------------------------------------------------------------ # # utilise : check_mem.sh # output: OK - Libre 60% Libre=2353MB Total=3895MB #Perfdata: total=3895MB free=2353MB # \d+ ne fonctionne pas (?) donc il faut \d\d ... /output:.*(\d\d)%/ and push @s, [ 'MEM' , [ 'Ram' , GAUGE, $1 ] ]; # 07 ------------------------------------------------------------------------ # # utilise : check_temp.pl # putput: TEMP OK - TEMP:35.0 C - temp1 Temperature OK 35.0 ### #Perfdata: /output:.*TEMP:([.0-9]+) C/ and push @s, [ 'TEMP' , [ 'Temp' , GAUGE, $1 ] ]; # 08 ------------------------------------------------------------------------ # # Data to graph: Linux swap check # # Service type: swap-memory-check # # Nagios plugin: check_swap.pl # # Nagios output: ||SWAP OK - 100% libre (517 MB sur un total de 517 MB) |swap=517MB;0;0;0;517 # --------------------------------------------------------------------------- # /output:SWAP.*(\d+)\% libre \((\d+)/ and push @s, [ 'SWAP', [ 'Max' , GAUGE, $2 ], [ 'swap', GAUGE, $1 ] ]; # 16 ------------------------------------------------------------------------ # # Data to graph: Check Apache sessions # # Service type: apache-load # # Nagios plugin: check_apachestatus.pl # # Nagios output: OK 0.038933 seconds response time. Idle 5, busy 3, \ # # open slots 142 # # Use perfdata: Waiting for Connection=5 Starting Up=0 Reading Request=0 \ # # Sending Reply=3 Keepalive (read)=0 DNS Lookup=0 Closing \ # # Connection=0 Logging=0 Gracefully finishing=0 Idle cleanup=0\# # Open slot=142 Requests/sec=0.0 B per sec=Ram109.0B B per \ # # Request=4851.0B # # --------------------------------------------------------------------------- # /output:.*([0-9]+\.?[0-9]+).* response time. Idle (\d+), busy (\d+), open slots (\d+)/ and push @s, [ 'sessions', [ 'idle', GAUGE, $2 ], [ 'busy', GAUGE, $3 ], [ 'avail', GAUGE, $4 ], ]; # 18 ------------------------------------------------------------------------ # # Data to graph: HP Temperature Sensors # # Service type: temperature_ambient # # Nagios plugin: check_snmp_temperature # # Nagios output: ||OK - Ambient_1 Temperature is 24C # # --------------------------------------------------------------------------- # /output:.* - (\S+) Temperature is (\d+)C/ and push @s, [ $1, [ 'Celsius', GAUGE, $2 ] ]; # 19 ------------------------------------------------------------------------ # # Data to graph: Check Network Bandwidth # # Nagios plugin: check_bandwidth3 # # Nagios output: ||OK Out: 1.29Kbps: In: 3.61Kbps|| # # Nagios output: ||OK Bandwidth Out: 458.41bps: In: 2.89Kbps|| # # Use perfdata: out=458.405063291139;2250000;2700000;0;3000000 \ # # in=2958.91139240506;2250000;2700000;0;3000000 # # --------------------------------------------------------------------------- # /perfdata:out=(\d+\.\d+);(\d+);(\d+);(\d+);(\d+) in=(\d+\.\d+)/ and push @s, [ 'bandwidth', [ 'out', GAUGE, $1 ], [ 'in', GAUGE, $6 ], [ 'sum', GAUGE, $1+$6 ], [ 'warn', GAUGE, $2 ], [ 'crit', GAUGE, $3 ], [ 'max', GAUGE, $5 ], ]; # 21 ------------------------------------------------------------------------ # # Data to graph: Check NTP Clock # # Service type: check_ntp_clock # # Nagios plugin: check_ntp_time # # Nagios output: NTP OK: Offset -0.003089785576 secs # # Use perfdata: offset=-0.003090s;5.000000;10.000000; (offset, warn and crit)# # --------------------------------------------------------------------------- # /output:NTP.*Offset ([-.0-9]+) secs/ and push @s, [ 'ntp', [ 'offset', GAUGE, $1 ] ]; # 22 ------------------------------------------------------------------------ # # Data to graph: Check SMTP Mail service # # Service type: check-mail-gw # # Nagios plugin: check_smtp # # Nagios output: ||SMTP OK - 5.279 sec. response time # # Use perfdata: ||time=5.278750s;;;0.000000 # # --------------------------------------------------------------------------- # /output:SMTP.*?(\d+\.\d+) sec/ and push @s, [ 'smtp', [ 'response', GAUGE, $1 ] ]; # 25 ------------------------------------------------------------------------ # # Data to graph: check_hp_enclosure power usage in Watt # # Nagios plugin: check_hp_bladechassis # # Nagios output: ||OK - System: BladeSystem c7000 Enclosure G2, SN: # # SGH018X9ES, Firmware: 3.00, hardware working fine, 4 blades, 2 i/o modules||# # Use perfdata: total_watt=1266W;0;0 # # --------------------------------------------------------------------------- # /perfdata:total_watt=(\d+)W/ and push @s, [ 'power', [ 'Watt', GAUGE, $1 ] ]; # 26 -------------------------------------------------------------------------# # Data de NSCA (window$) # # Nagios output : OK: physical memory: Total: 1.47G - Used: 357M (23%) - Free: 1.12G (77%), virtual memory: Total: 2G - Used: 252M (12%) - Free: 1.75G (88%), page file: Total: 3.32G - Used: 205M (6%) - Free: 3.12G (94%) # multiplier $1 par 1024 ne fonctionne pas (?) #-----------------------------------------------------------------------------# # /output:.*Total: ([.\d+]+)G - Used: (\d+)M/ /output:.*physical memory: Total: ([.0-9]+)\w. - Used: ([.0-9]+)\w \(([0-9]+)\%/ and push @s, [ 'ms-MEM', [ 'USE', GAUGE, $3 ] ];
Le fichier map
prend en compte les données pour faire les divers graphiques via une expression régulière en Perl.
Comme pour beaucoup de Linuxiens, Perl est un langage connu, c'est aussi mon préféré; donc je pars avec un peu de “bonus”,
néanmoins j'ai galéré. Voici comment faire en prendre en compte un service par nagiosgraph, en se basant sur le fait que vous n'avez pas trouvé une définition adéquate.
Chaque plugin nagios utilise 2 parties similaires, l'une s’appelle output
et l'autre perfdata
, voici ce que cela donne
concrètement, via mon test check_mem.sh
:
/usr/local/nagios/libexec/./check_mem1.sh -w90 -c95 OK - Utilisé 51% Libre=1987MB Total=3895MB | 51% total=3895MB free=1987MB
La partie output
est la première, elle se termine par le caractère “|”, elle est suivie par perfdata
.
La partie output
est utilisée par Nagios pour afficher un descriptif sur l'état du service. Et bien évidemment j'ai travaillé à récupérer des données via
la partie perfdata
sans comprendre pourquoi mes tests ne fonctionnaient pas. Pour moi, cette partie représente dans Nagios les données complémentaires
pour un traitement externe comme par nagiosgraph. En réalité non dans mon cas ! mais il existe des exemples qui prennent en compte cette partie, à l'heure actuelle je ne peux pas expliquer
pourquoi. Donc il suffit parfois de basculer d'un coté à l'autre pour enfin avoir des données.
Note | |
---|---|
Donc en fonction des paramètres de sorties, il faut bien faire attention de placer soit le mot “output” ou “perfdata”; et le tout est suivi de votre règles de sélection. Dans le même style, une règle qui ne compte pas un mot, une lettre particulière (pertinente !) est susceptible de provoquer des troubles vis-à-vis des autres tests. Donc une règle dans le style : “/output:.*:([.0-9]+)/” n'est correcte !. |
Note | |
---|---|
Pour la mise au point des règles d'extraction des données, il est possible d'utiliser le programme “testentry.py”, qui est inclus avec Nagiosgraph. Il est nécessaire de l'éditer et de placer les données (output et perfdata) à l’intérieur, puis de tester. Ce programme fait gagner du temps pour une situation difficile, si j'avais su plutôt... |
Il existe une autre solution: c'est de faire en sorte que Nagiosgraph™ soit en mode “debug”. Cette procédure est relativement efficace
néanmoins dans mon cas, elle n'explique pas forcément où est le problème. Il s'agit d'éditer le fichier nagiosgraph.conf
puis d'activer les multiples
paramètres debug
présents; ils ne manquent pas. A vous de régler au mieux les divers paramètres. Je conseille même de placer le nom du service concerné,
afin de ne pas polluer les données. Ensuite il faut scruter le fichier /var/nagiosgraph/log/nagiosgraph-cgi.log
pour essayer de comprendre.
Warning | |
---|---|
Notez bien que Nagios mémorise tout en mémoire dès son lancement, donc le changement d'un paramètre doit faire l'objet d'une relance de ce service. Et comme Nagiosgraph fait partie de Nagios, c'est pareil. A la moindre modification il faut tout relancer puis attendre. Si vous changez un paramètre qui touche une base (RRD) de Rrdtool il est nécessaire de supprimer le fichier concerné, il sera créé par la suite avec les données adéquates. |
Au final vous devriez avoir un Nagios similaire à cette image, certes avec un peu de temps passé à le configurer. Mais c'est un effort bien récompensé !
Table of Contents
C'est après de très nombreuses recherches et d'essais que j'ai enfin réussi à superviser ce que je voulais; ou presque. Il s'agit de superviser l'état d'un ou plusieurs VPN.
Les outils qui vont me servir sont Openssh, snmpwatch, le plugin nagios::plugin, puis Perl pour finir.
Le produit snmpwalk ne sert uniquement que pour comprendre, voir même pour essayer à comprendre. A ce titre Netasq fournit plein de fichiers MIB dont les fichiers :
NETASQ-VPNSA-MIB: Table of negotiated IPSEC SA
et NETASQ-IPSEC-STATS-MIB: Table of IPSEC statistics
, sauf que je n'ai pas à réussi à extraire des données intéressantes avec ces 2
définitions. Ne pas hésiter à me dire comment les utiliser sinon; je lance un appel, j'aimerais comprendre. Donc il m'a fallu trouver une autre solution. Les produits Netasq de la série U comme un U70 offrent
certaines commandes shell qui peuvent être très utiles. Il s'agit de : showSAD
et de showPID
. La première commande est celle que je vais utilisée, elle permet de faire
ressortir des données pertinentes. De là mon script filtre uniquement la ligne contenant le mot mature
. Le reste est facile à faire il suffit de compter les lignes pour chacun des VPN.
A savoir qu'un VPN, comme on le conçoit, pour le script c'est 2 lignes(!), c'est important sinon vous serez dans le rouge par la suite.
Ce plugin est encore en test actuellement, il est disponible ici Exchange.nagios.
Les paramètres nécessaires sont simples. Je regrette néanmoins de ne pas avoir réussi à me loguer sur un U70 via SSH au travers des certificats. C'est pas faute d'avoir essayer, donc il va falloir hélas utiliser un login et un mot de passe, puis les laisser en clair dans Nagios. C'est à mon avis le seul point critique.
Voici comment l'intégrer dans Nagios, sa compréhension est simple, il faut noter que l'option warning
est équivalente à critical
. C'est normal, car le
plugin nagios::plugin
impose les deux, mais dans ma situation un VPN est actif ou mort. Donc il prend les états OK ou CRITICAL.
define command{ command_name check_vpn command_line sudo $USER1$/check_vpn_netasq.pl -H 192.168.1.254 -u user -p mot_de_passe -w 2 -c 2 }
Note | |
---|---|
Pour un bon fonctionnement je ne peux que vous conseiller de placer l'instruction “sudo”, sinon vous risquez de rencontrer un problème de droit pour enregistrer des données SSH. Voici ce que cela donne : ERROR: ctl_dir /usr/local/nagios/.libnet-openssh-perl/ is not secure. |
Maintenant que la formule est prête avec le script précédent, rien de plus simple pour en faire un autre. C'est le cas avec ce script, sa mission est de récupérer le nombre d'octets transmis sur une interface. Après maintes recherches, rien ne dit que c'est que c'est l'interface ETH0 qui est concerné. Mais en prenant un Netasq avec uniquement cette interface d'activée, seuls ces paramètres remontent, donc j'en conclu que c'est pour cette ci, ou pour la globalité des interfaces. Les données sont envoyées au Netasq, il doit être configuré pour répondre aux requêtes SNMP. Cette étape est simple à réalisé sur cette machine. Ensuite il ne reste plus qu'à tester le script. Si le script fonctionne bien il doit renvoyer ce type de données :
ETH_NETASQ OK - in11455669c out15579283c
Donc et conformément aux directives MIB/SNMP il s'agit du nombre d'octets envoyés et reçus depuis une interface. La lettre “c” est une indication pour Nagios, elle indique qu'il faut traiter ce chiffre en mode “COUNTER”. Ce type de test est important à mes yeux, au même titre que celui des VPN, car il confirme que le Netasq fonctionne bien, ou pas.
Pour aller encore un peu plus loin avec, il est possible d'utiliser Nagiosgraph
pour réaliser des graphes à propos de cet interface. Pour y arriver il suffit de faire tout çà :
Il faut ajouter une règle d'extraction dans le fichier MAP, bien prendre l'option COUNTER
(!) :
# 27 -------------------------------------------------------------------------# # Data ETH pour Netasq # Nagios output: ETH_NETASQ OK - IN 135536 OUT 85816 Octets #-----------------------------------------------------------------------------# /output:.*IN ([0-9]+) OUT ([0-9]+) Octets/ and push @s, [ 'eth0', [ 'In', COUNTER, $1 ] , [ 'Out', COUNTER, $2 ] ];
Il ne reste plus qu'à ajouter la ligne qui va bien au niveau des services Nagios, et d'attendre l'apparition des graphes. Voir ici sinon : ajout-graph.
Table of Contents
Même si Gmail est parfois critiqué, elle n'en reste pas moins pour moi une excellente solution gratuite de messagerie. Donc maintenant; il faut que notre Nagios" soit en mesure de nous envoyer des méls dans une boite dédiée. Après plusieurs recherches, les projets ne manquent, bien qu'ils ne soient tout de même pas très nombreux. La solution d'activer Postfix reste une solution viable, néanmoins je cherche à limiter l'installation de composants au maximum.
Note | |
---|---|
Le choix de prendre un service distant peut faire en sorte que le service de notifications est dépendant de la liaison entre Nagios et le serveur. C'est un risque à prendre, sinon il reste la solution d'installer Postfix qui lui transmettra les notifications une fois que la liaison est revenue. |
La solution retenue vient de ce projet Nagios Alerts via gmail and python. Après plusieurs tests et des modifications, celui ci est simple à installer et à configurer, voici comment faire :
Dans les sources su programme, il faut ajouter les paramètres de votre compte Gmail dédié, en remplaçant les valeurs YOUR_ADDRESS_HERE@gmail.com
,
et le paramètre YOUR_PASSWORD_HERE
par les bonnes valeurs.
server = smtplib.SMTP('smtp.gmail.com', 587) server.set_debuglevel(1) #0 for quiet or 1 for verbosity server.ehlo('YOUR_ADDRESS_HERE@gmail.com') server.starttls() server.ehlo('YOUR_ADDRESS_HERE@gmail.com') # say hello again server.login('YOUR_ADDRESS_HERE@gmail.com', 'YOUR_PASSWORD_HERE') server.sendmail('YOUR_ADDRESS_HERE@gmail.com', Addresses, "Subject: " + subject + '\nTo:' + address + '\n\n' + body)
Ensuite, il ne reste plus qu'à attendre un mél, puis à modifier éventuellement les paramètres suivants pour une meilleure présentation.
#notify host via gmail using python script. \\nnn will insert return, use for body of mssg define command{ command_name notify-host-by-email command_line /usr/local/nagios/libexec/send_gmail.py -a $CONTACTEMAIL$ -s "[NAGIOS-HOST] $NOTIFICATIONTYPE$" -b "Alerte pour hote:\\ttt $HOSTNAME$ dans l'etat:\\ttt $HOSTSTATE$\\nnnType de Notification :\\ttt$NOTIFICATIONTYPE$\\nnn Hote est:\\ttt$HOSTNAME$\\nnnEtat:\\ttt$HOSTSTATE$\\nnnInfos:\\ttt$HOSTOUTPUT$\\nnnDate/Time:\\ttt$TIME$ $DATE$\\nnn -- FIN --" } #notify service via gmail using python script. \\nnn will insert return, use for body of mssg define command{ command_name notify-service-by-email command_line /usr/local/nagios/libexec/send_gmail.py -a $CONTACTEMAIL$ -s "[NAGIO-SVC] $SERVICESTATE$" -b "Type de notification:\\ttt$NOTIFICATIONTYPE$\\nnnPour le service:\\ttt\\ttt $SERVICEDESC$\\nnn Hôte est:\\ttt\\ttt($HOSTALIAS$)\\ttt\\nnnEn mode:\\ttt$SERVICESTATE$ depuis le: $TIME$ $DATE$\\nnn\\nnn Informations complementaire :\\ttt$SERVICEOUTPUT$ ($NOTIFICATIONTYPE$)\\nnn Alerte pour:\\ttt ($HOSTALIAS$) $SERVICEDESC$ est dans l'etat : $SERVICESTATE$\\nnn -- FIN --" }
Note | |
---|---|
Dans le script seul le retour de chariot est pris en compte, pour utiliser les tabulations il suffit de rajouter cette ligne à coté de l'autre :“ body = '\t'.join(body.split('\\ttt'))” |
Une fois toutes les modifications faites, voici ce que cela peut donner :
Type de notification: PROBLEM Pour le service: PING Hôte est: (RT-1-Gab.T) En mode: CRITICAL depuis : 10:59:57 05-10-2013 Informations complementaire : - PING CRITICAL - Paquets perdus = 0%, RTA = 915.30 ms (PROBLEM) - Alerte pour: (RT-1-Gab.T) le service PING est dans l'état : CRITICAL -- FIN --
Table of Contents
Sans critiquer Nagiosgraph toutefois, ce produit ne m'a pas apporté exactement ce que je voulais. De plus, il faut modifier le fichier map
au moindre changement.
J'ai choisi d'essayer PNP4Nagios dans sa dernière version à ce jour (pnp4nagios-0.6.21 [ 03-24-2013 ]). La documentation sur le site de PNPNagios est très complète,
seule la compilation mérite d'être notée, voici ce que j'ai fait :
./configure Options --prefix=/usr/local/pnp4nagios --exec-prefix=/usr/local/pnp4nagios --bindir=/usr/loccal/pnp4nagios \ --sysconfdir=/etc/pnp4nagios --localstatedir=/var/pnp4nagios --with-layout=debian --with-nagios-user=nagios \ --with-nagios-group=nagios --with-perfdata-logfile=perfdata.log --with-perfdata-dir=/var/pnp4nagios \ --with-perfdata-spool-dir=/var/pnp4nagios --with-debug --with-httpd-conf=/etc/apache2/conf.d \ --with-init-dir=/etc/init.d
Donc rien d'extraordinaire, toutefois j'ai du intervenir pour ajuster presque tous les fichiers de configurations. Il faut ajouter à cela les modifications imposées vis-à-vis en particulier de Nagios.
Il existe 3 modes de fonctionnement pour pnp4nagios qui va du plus classique au plus performant; en réalité il en existe 5. Ces 3 modes sont une fois de plus clairement expliqué, ils dépendent en particulier de votre architecture, du nombre
de hôtes/services à tester. J'ai choisi le mode bulk
, et celui ci me donne entière satisfaction.
Il est important de lancer un script pour tester votre configuration avant de lancer PNP4Nagios, voici la commande qui est modifiée par rapport à la documentation officielle :
/usr/local/pnp4nagios/libexec/verify_pnp_config_v2.pl -c /etc/nagios/nagios.cfg -p /etc/pnp4nagios/ -m bulk
Il existe une autre solution pour superviser et graphiquement le tout. Une fois dans l'interface graphique, il suffit de cliquer sur l'image correspondant au sigle information
.
Plusieurs graphes apparaissent en vous donnant un état du système détaillé.
Ceci n'est pas forcément notifier dans la documentation disponible sur le site PNP4Nagios, mais il faut installer ceci :
apt-get install libcrypt-rijndael-perl
En théorie ceci ne doit pas être forcément installé, mais dans mon rôle de testeur...désormais il est indispensable. Il s'agit des 2 scripts suivants : npcd et pnp_gearman_worker
.
Ces 2 scripts ont fait l'objet d'adaptations par rapport à mes besoins et à ma configuration générale. Au final il est nécessaire d'avoir des historiques similaires à ceci :
2013-10-29 18:27:05 [26360] [0] process_perfdata.pl-0.6.21 Gearman Worker Daemon 2013-10-29 18:27:05 [26361] [0] Pidfile (/var/log/pnp4nagios/pnp_gearman_worker.pid) created 2013-10-29 18:27:05 [26362] [0] connecting to gearmand 'localhost:4730'
Voilà qui est clair, néanmoins je ne connais avec certitude son rôle exacte entre lui et npcd
...si jamais une personne connait, ne pas hésiter.
Certains plugins refusaient d'être pris en compte, pour une raison très simple. Il est clairement expliqué sur le site de PNP4nagios que cette application respecte les normes des plugins Nagios. Il est donc important que chaque plugin adopte cette méthode. J'ai adapté 2 plugins en me référant à cette méthode et d'un seul coup les graphiques sont apparus. Pour aider à mieux comprendre pourquoi un blocage peut arriver, il est possible de visualiser sous Nagios les données reçues. Pour cela il suffit de cliquer sur l'hôte ou le service, et non sur le plugin (!), et vous devriez apercevoir ce type de données :
Status Information: TEMP OK - temp= 40 C Performance Data: temp=40;65;75
La 2eme ligne est la plus importante elle doit être basée sur ce modèle : 'label'=value[UOM];[warn];[crit];[min];[max]
, les valeurs min et max
ne sont pas
obligatoires.
Une fois de plus c'est très bien expliqué, il existe des exemples plus ou moins compliqués de modèles(template) pour PNP4nagios. C'est l'un des avantages de PNP4nagios, pouvoir modifier à souhait une série de graphiques en se servant d'un modèle. Néanmoins avant de se lancer, il est nécessaire que PNP4Nagios prenne en compte votre plugin, et surtout vous génère un fichier XML. Ce fichier sera pour votre votre template la référence.
Et au final vous devez avoir des graphes aussi beau que celui là :
J'espère que la lecture de document vous a permis d'installer Nagios sans problème, vous permettant d'être en mesure de superviser beaucoup d'équipements en tout genre. Il reste encore beaucoup de points à traiter, comme la redondance via un autre serveur Nagios en mode “esclave” via NRPE. Ce même plugin mérite également de s'y arrêter, il fera peut-être l'objet d'un ajout dans ce document ultérieurement.
Installer Nagios n'est pas forcément une chose facile et rapide, mais il existe une étape qui mérite un soin particulier. C'est organiser la structure de Nagios avant de commencer la supervision, en se posant certaines questions comme : qui doit être superviser; quel service à prendre en compte, y compris pour Nagiosgraph, quelles sont les dépendances, comment je vais organiser mes fichiers de conf, quelles sont les plugins à utiliser(et à tester !), les contacts...etc.
Si jamais Nagios vous fait peur, il existe sur le NET de nombreuses entreprises en mesure de faire le travail à votre place. Il existe également des formations. Nagios reste à mes yeux une formidable application; il existe également le projet Centréon™. Au final, vous aurez une solution libre, performante et souple, et même plus performante qu'une application payante parfois.
Nagios™ : Le site de référence : http://www.nagios.org/
Exchange Nagios : Vmware : C'est le site de référence pour les plugins Vmware : http://exchange.nagios.org/directory/Plugins/Operating-Systems/*-Virtual-Environments/VMWare
Nagios Plugins : http://nagiosplugins.org/
Vmware ESX & VM host : Vmware ESX VM host
Nagiosgraph - C'est mon préféré : http://nagiosgraph.sourceforge.net/
check_esxi_hardware.py : Sur ce site il est possible de récupérer le script et de la documentation. Ce script est maintenue à ce jour régulièrement; hélas je regrette des tests plus précis sur les processeurs, la mémoire...DRAFT Secure Domain Name System (DNS) Deployment Guide
OP5 : le site op5.com Cette même société propose également une interface de supervision un peu comme Nagios, très beau travail !
FAN pour “Fully Automated Nagios”, il s'agit d'une distribution (Centos) prête à l'emploi.http://www.fullyautomatednagios.org/wordpress/
Un projet toujours d’actualisé apparemment, encoder Nagios en PHP : http://sourceforge.net/projects/nagios-php/
La FAQ Nagios : http://support.nagios.com/knowledgebase/faqs/
Formations Nagios chez Linagora http://formation.linagora.com/formation-nagios-supervision-et-gestion-performance"
RRDTOOL : Le site de Rrdtool
Ce site comporte beaucoup de choses, uniquement pour les plugins ! https://www.nagios-plugins.org/download.html
Il s'agit d'une démo de Nagios par un particulier apparemment. Il faut cliquer sur l'icone Nagiosgraph pour aller vers la page où il est possible de récupérer des définitions pour le fichier “map”, il faut utiliser le menu “Nagios-graphs” pour y accéder.http://nagios.frank4dd.com/nagios/
La documentation en ligne est très complète pour Nagios (GB) : http://nagios.sourceforge.net/docs/3_0/toc.html
Voici un lien vers l'ensemble des variables utilisées par Nagios: celles ci peuvent servir pour vos macros. macrolist.html
GitHub est un service web d'hébergement et de gestion de développement de logiciels, utilisant le programme Git. Ce logiciel permet de télécharger les dernières sources d'une application facilement.
Le projet Nagios est composé de 2 parties en ce qui concerne le cœur de Nagios. Le plus connu “Nagios” qui est un projet Open-source, et “Nagios XI” qui est un projet commercial.
Licence GNU de documentation libre est disponible ici : http://www.gnu.org/licenses/fdl.html
Dans les réseaux informatiques et les télécommunications, le réseau privé virtuel (Virtual Private Network en anglais, abrégé en VPN) est vu comme une extension des réseaux locaux et préserve la sécurité logique que l'on peut avoir à l'intérieur d'un réseau local. Il correspond en fait à une interconnexion de réseaux locaux via une technique de « tunnel ». On parle de VPN lorsqu'un organisme interconnecte ses sites via une infrastructure partagée avec d'autres organismes. (source wikipedia)