|
|
Software version |
Nagios 3 |
Operating System |
Debian 6 |
Website |
|
Last Update |
08/09/2014 |
Others |
|
1 Introduction
Nagios est un utilitaire très puissant permettant de tester via des plugins divers services tel que le SMTP, le PING et bien d'autres choses. Ca vous permet de savoir si vos plateformes sont toujours en service.
Bref, il est capable de vous alerter sous différentes formes. Essayez, vous allez voir, c'est magique :-)
2 Installation
Pour l'installation c'est assez simple :
aptitude
|
aptitude install nagios3
|
3 Configuration
La configuration par contre ça se complique. Il faut savoir que Nagios est difficile à abordé, mais une fois que vous avez compris, vous gagnez beaucoup de temps et pouvez déployer de nouveaux services avec facilité.
3.1 apache2.conf
Ceci est la configuration qui est fourni en standard Debian pour apache2. Ca vous permet d'accéder à Nagios via http://serveur/nagios3. A vous de voir si vous souhaitez modifier la configuration ou pas :
/etc/nagios3/apache2.conf
|
# apache configuration for nagios 3.x
# note to users of nagios 1.x and 2.x:
# throughout this file are commented out sections which preserve
# backwards compatibility with bookmarks/config for older nagios versios.
# simply look for lines following "nagios 1.x:" and "nagios 2.x" comments.
ScriptAlias /cgi-bin/nagios3 /usr/lib/cgi-bin/nagios3
ScriptAlias /nagios3/cgi-bin /usr/lib/cgi-bin/nagios3
# nagios 1.x:
#ScriptAlias /cgi-bin/nagios /usr/lib/cgi-bin/nagios3
#ScriptAlias /nagios/cgi-bin /usr/lib/cgi-bin/nagios3
# nagios 2.x:
#ScriptAlias /cgi-bin/nagios2 /usr/lib/cgi-bin/nagios3
#ScriptAlias /nagios2/cgi-bin /usr/lib/cgi-bin/nagios3
# Where the stylesheets (config files) reside
Alias /nagios3/stylesheets /etc/nagios3/stylesheets
# nagios 1.x:
#Alias /nagios/stylesheets /etc/nagios3/stylesheets
# nagios 2.x:
#Alias /nagios2/stylesheets /etc/nagios3/stylesheets
# Where the HTML pages live
Alias /nagios3 /usr/share/nagios3/htdocs
# nagios 2.x:
#Alias /nagios2 /usr/share/nagios3/htdocs
# nagios 1.x:
#Alias /nagios /usr/share/nagios3/htdocs
<DirectoryMatch (/usr/share/nagios3/htdocs|/usr/lib/cgi-bin/nagios3|/etc/nagios3/stylesheets)>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride AuthConfig
Order Allow,Deny
Allow From All
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /etc/nagios3/htpasswd.users
# nagios 1.x:
#AuthUserFile /etc/nagios/htpasswd.users
require valid-user
</DirectoryMatch>
# Enable this ScriptAlias if you want to enable the grouplist patch.
# See http://apan.sourceforge.net/download.html for more info
# It allows you to see a clickable list of all hostgroups in the
# left pane of the Nagios web interface
# XXX This is not tested for nagios 2.x use at your own peril
#ScriptAlias /nagios3/side.html /usr/lib/cgi-bin/nagios3/grouplist.cgi
# nagios 1.x:
#ScriptAlias /nagios/side.html /usr/lib/cgi-bin/nagios3/grouplist.cgi
|
3.2 cgi.cfg
Je vous épargne tous les commentaires de ce fichier et vous montre la configuration que j'utilise. Ceci est la configuration pour l'interface web de Nagios :
/etc/nagios3/cgi.cfg
|
main_config_file=/etc/nagios3/nagios.cfg
physical_html_path=/usr/share/nagios3/htdocs
url_html_path=/nagios3
show_context_help=1
use_pending_states=1
nagios_check_command=/usr/lib/nagios/plugins/check_nagios /var/cache/nagios3/status.dat 5 '/usr/sbin/nagios3'
use_authentication=1
use_ssl_authentication=0
authorized_for_system_information=deimos
authorized_for_configuration_information=deimos
authorized_for_system_commands=deimos
authorized_for_all_services=deimos
authorized_for_all_hosts=deimos
authorized_for_all_service_commands=deimos
authorized_for_all_host_commands=deimos
default_statusmap_layout=5
default_statuswrl_layout=4
ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$
refresh_rate=90
escape_html_tags=1
action_url_target=_blank
notes_url_target=_blank
lock_author_names=1
|
3.3 commands.cgi
Ce fichier permet de définir des commandes particiulières pour des check particuliers. Par exemple si vous avez développé des plugins, vous devrez créer une commande associée :
/etc/nagios3/commands.cfg
|
###############################################################################
# COMMANDS.CFG - SAMPLE COMMAND DEFINITIONS FOR NAGIOS
###############################################################################
################################################################################
# NOTIFICATION COMMANDS
################################################################################
# '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$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
################################################################################
# HOST CHECK COMMANDS
################################################################################
# On Debian, check-host-alive is being defined from within the
# nagios-plugins-basic package
################################################################################
# PERFORMANCE DATA COMMANDS
################################################################################
# '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/lib/nagios3/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/lib/nagios3/service-perfdata.out
}
|
3.4 htpasswd.users
Voici le htpasswd de Nagios. Pour changer le login nagiosadmin qui existe par défaut, faite :
htpasswd
|
htpasswd -c htpasswd.users deimos
|
A vous de remplacer deimos par l'utilisateur que vous souhaitez. Attention toute fois, ceci va créer un fichier vierge et créer cet utilisateur unique.
3.5 nagios.cfg
Ceci est la configuration du serveur Nagios, mais pas la configuration des hosts et services :
/etc/nagios3/nagios.cfg
|
log_file=/var/log/nagios3/nagios.log
cfg_file=/etc/nagios3/commands.cfg
cfg_dir=/etc/nagios-plugins/config
cfg_dir=/etc/nagios3/conf.d
object_cache_file=/var/cache/nagios3/objects.cache
precached_object_file=/var/lib/nagios3/objects.precache
resource_file=/etc/nagios3/resource.cfg
status_file=/var/cache/nagios3/status.dat
status_update_interval=10
nagios_user=nagios
nagios_group=nagios
check_external_commands=1
command_check_interval=-1
command_file=/var/lib/nagios3/rw/nagios.cmd
external_command_buffer_slots=4096
lock_file=/var/run/nagios3/nagios3.pid
temp_file=/var/cache/nagios3/nagios.tmp
temp_path=/tmp
event_broker_options=-1
log_rotation_method=d
log_archive_path=/var/log/nagios3/archives
use_syslog=1
log_notifications=1
log_service_retries=1
log_host_retries=1
log_event_handlers=1
log_initial_states=0
log_external_commands=1
log_passive_checks=1
service_inter_check_delay_method=s
max_service_check_spread=30
service_interleave_factor=s
host_inter_check_delay_method=s
max_host_check_spread=30
max_concurrent_checks=0
check_result_reaper_frequency=10
max_check_result_reaper_time=30
check_result_path=/var/lib/nagios3/spool/checkresults
max_check_result_file_age=3600
cached_host_check_horizon=15
cached_service_check_horizon=15
enable_predictive_host_dependency_checks=1
enable_predictive_service_dependency_checks=1
soft_state_dependencies=0
auto_reschedule_checks=0
auto_rescheduling_interval=30
auto_rescheduling_window=180
sleep_time=0.25
service_check_timeout=60
host_check_timeout=30
event_handler_timeout=30
notification_timeout=30
ocsp_timeout=5
perfdata_timeout=5
retain_state_information=1
state_retention_file=/var/lib/nagios3/retention.dat
retention_update_interval=60
use_retained_program_state=1
use_retained_scheduling_info=1
retained_host_attribute_mask=0
retained_service_attribute_mask=0
retained_process_host_attribute_mask=0
retained_process_service_attribute_mask=0
retained_contact_host_attribute_mask=0
retained_contact_service_attribute_mask=0
interval_length=60
check_for_updates=1
bare_update_check=0
use_aggressive_host_checking=0
execute_service_checks=1
accept_passive_service_checks=1
execute_host_checks=1
accept_passive_host_checks=1
enable_notifications=1
enable_event_handlers=1
process_performance_data=0
obsess_over_services=0
obsess_over_hosts=0
translate_passive_host_checks=0
passive_host_checks_are_soft=0
check_for_orphaned_services=1
check_for_orphaned_hosts=1
check_service_freshness=1
service_freshness_check_interval=60
check_host_freshness=0
host_freshness_check_interval=60
additional_freshness_latency=15
enable_flap_detection=1
low_service_flap_threshold=5.0
high_service_flap_threshold=20.0
low_host_flap_threshold=5.0
high_host_flap_threshold=20.0
date_format=iso8601
p1_file=/usr/lib/nagios3/p1.pl
enable_embedded_perl=1
use_embedded_perl_implicitly=1
illegal_object_name_chars=`~!$%^&*|'"<>?,()=
illegal_macro_output_chars=`~$&|'"<>
use_regexp_matching=0
use_true_regexp_matching=0
admin_email=root@localhost
admin_pager=pageroot@localhost
daemon_dumps_core=0
use_large_installation_tweaks=0
enable_environment_macros=1
debug_level=0
debug_verbosity=1
debug_file=/var/log/nagios3/nagios.debug
max_debug_file_size=1000000
|
3.6 resource.cfg
/etc/nagios3/nagios.cfg
|
...
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/lib/nagios/plugins
...
|
3.7 conf.d/contacts.cfg
Les contacts servent à définir les contacts et groupes de contact
/etc/nagios3/conf.d/contacts
|
define contact{
contact_name deimos
alias Deimos
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email deimos@deimos.fr
}
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members deimos
}
|
3.8 conf.d/custom-commands.cfg
Je parlais plus haut des commandes personnalisées. En voici une que j'ai réaliser pour tester la réplication MySQL. Ceci me permettra de lancer la réplication via la commande check_mysqlrep :
/etc/nagios3/conf.d/custom-commands.cfg
|
##############################
# CUSTOM NAGIOS COMMANDS #
##############################
define command{
command_name check_mysqlrep
command_line /usr/lib/nagios/plugins/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -w $ARG3$ -c $ARG4$ -S
}
|
3.9 conf.d/generic-host.cfg
Ce fichier sert à donner la configuration générique pour les hosts, les intervales de notification etc... je vous laisse regarder la documentation officielle :
/etc/nagios3/conf.d/generic-host.cfg
|
# Generic host definition template - This is NOT a real host, just a template!
define host{
name generic-host ; The name of this host template
notifications_enabled 1 ; Host notifications are enabled
event_handler_enabled 1 ; Host event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
failure_prediction_enabled 1 ; Failure prediction is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
check_command check-host-alive
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!
_PROCWARN 150
_PROCCRIT 200
}
|
3.10 conf.d/generic_service.cfg
Ce fichier sert à donner la configuration générique pour les services, les intervales de notification etc... je vous laisse regarder la documentation officielle :
/etc/nagios3/conf.d/generic_service.cfg
|
define service{
name generic-service ; The 'name' of this service template
active_checks_enabled 1 ; Active service checks are enabled
passive_checks_enabled 1 ; Passive service checks are enabled/accepted
parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems)
obsess_over_service 1 ; We should obsess over this service (if necessary)
check_freshness 0 ; Default is to NOT check service 'freshness'
notifications_enabled 1 ; Service notifications are enabled
event_handler_enabled 1 ; Service event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
failure_prediction_enabled 1 ; Failure prediction is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
notification_interval 0 ; Only send notifications on status change by default.
is_volatile 0
check_period 24x7
normal_check_interval 3
retry_check_interval 1
max_check_attempts 3
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!
}
|
3.11 conf.d/timeperiods.cfg
Ce fichier sert à définir des template pour les périodes de notification :
/etc/nagios3/conf.d/timeperiods.cfg
|
###############################################################################
# timeperiods.cfg
###############################################################################
# This defines a timeperiod where all times are valid for checks,
# notifications, etc. The classic "24x7" support nightmare. :-)
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
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
}
# Here is a slightly friendlier period during work hours
define timeperiod{
timeperiod_name workhours
alias Standard Work Hours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}
# The complement of workhours
define timeperiod{
timeperiod_name nonworkhours
alias Non-Work Hours
sunday 00:00-24:00
monday 00:00-09:00,17:00-24:00
tuesday 00:00-09:00,17:00-24:00
wednesday 00:00-09:00,17:00-24:00
thursday 00:00-09:00,17:00-24:00
friday 00:00-09:00,17:00-24:00
saturday 00:00-24:00
}
# This one is a favorite: never :)
define timeperiod{
timeperiod_name never
alias Never
}
# end of file
|
3.12 conf.d/hostgroups/unix-srv.cfg
Voici un exemple de configuration pour un hostgroup. Il suffira ensuite d'associer un host à ce hostgroup pour qu'il récupère tous les services décrit ci dessous :
/etc/nagios3/conf.d/hostgroups/unix-srv.cfg
|
# Some generic hostgroup definitions
define hostgroup {
hostgroup_name unix-srv
alias Unix servers
}
# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition.
define service{
use generic-service
hostgroup_name unix-srv
service_description Disk Space
check_command check_nrpe!check_all_disks!20%!10%
}
# Define a service to check the number of currently logged in
# users on the local machine. Warning if > 20 users, critical
# if > 50 users.
define service{
use generic-service ; Name of service template to use
hostgroup_name unix-srv
service_description Current Users
check_command check_nrpe!check_users!2!3
}
# Define a service to check the number of currently running procs
# on the local machine. Warning if > 250 processes, critical if
# > 400 processes.
define service{
use generic-service ; Name of service template to use
hostgroup_name unix-srv
service_description Total Processes
check_command check_nrpe!check_procs!$_HOSTPROCWARN$!$_HOSTPROCCRIT$
}
# Check Zombie process
define service{
use generic-service ; Name of service template to use
hostgroup_name unix-srv
service_description Zombie Processes
check_command check_nrpe!check_zombie_procs!2!3
}
# Define a service to check the load on the local machine.
define service{
use generic-service ; Name of service template to use
hostgroup_name unix-srv
service_description Current Load
check_command check_nrpe!check_load!5.0,4.0,3.0!10.0,6.0,4.0
}
# check that ssh services are running
define service{
use generic-service
hostgroup_name unix-srv
service_description SSH Servers
check_command check_ssh
}
|
3.13 conf.d/hosts/serveur.cfg
Et ici je déclare un host et associe unix-srv déclaré plus haut pour qu'il hérite des services ci dessus :
/etc/nagios3/conf.d/hosts/serveur.cfg
|
define host{
use generic-host
host_name server.deimos.fr
alias server
address server.deimos.fr
hostgroups unix-srv
_PROCWARN 280
_PROCCRIT 350
}
|
Ici j'utilise des variables (_PROCWARN et _PROCCRIT) qui passent à travers les valeurs par défaut (Voir la documentation pour plus d'infos). Vous devez ajouter comme dans la documentation HOST ($_HOSTPROCWARN$ et $_HOSTPROCCRIT$) uniquement pour la partie déclaration de commande.
Si vous souhaitez une configuration plus complète, je vous joint une archive avec une configuration Nagios3 plus complète : Nagios configuration
4 Addons
4.1 NRPE
Nous devons configurer le check NRPE pour qu'il prenne en compte plusieurs arguments. Sinon de base, nous serons limités à 1. Editez le fichier suivant et ajouter y le nombre nécessaire d'arguments :
/etc/nagios-plugins/config/check_nrpe.cfg
|
# this command runs a program $ARG1$ with arguments $ARG2$
define command {
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$ $ARG7$ $ARG8$ $ARG9$
}
# this command runs a program $ARG1$ with no arguments
define command {
command_name check_nrpe_1arg
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
|
Ici je suis allé jusqu'à 9, mais de mémoire vous pouvez aller jusqu'à 32 arguments.
4.2 Cacher des alertes "non OK"
Il existe une solution simple pour ne pas afficher certaines alertes qui vous pourissent un peu l'existance, comme par exemple si comme moi vous avez pas loin de 1500 alertes, que vous avez un écran 107cm juste pour Nagios et que certaines alertes vous prennent trop de place et ne peuvent être résolues rapidement (ex un check de backup par semaine qui a foiré).
Donc la solution se fait via l'interface graphique en acknoledgeant (oui, du verbe acknoledger !) les services que vous le voulez plus voir. Ainsi, elles seront cachés et lorsqu'elles reviendront OK, elles s'afficheront de nouveau et l'acknoledge disparaitra.
Ensuite dans l'url de votre navigateur, il va falloir la modifier un peu afin de lui demander de ne pas afficher les alertes acknoledgées. En parcourant les sources du cgi, on peut trouver ce type d'infos :
grep SERVICE_ include/cgiutils.h.in
|
#define SERVICE_SCHEDULED_DOWNTIME 1
#define SERVICE_NO_SCHEDULED_DOWNTIME 2
#define SERVICE_STATE_ACKNOWLEDGED 4
#define SERVICE_STATE_UNACKNOWLEDGED 8
#define SERVICE_CHECKS_DISABLED 16
#define SERVICE_CHECKS_ENABLED 32
#define SERVICE_EVENT_HANDLER_DISABLED 64
#define SERVICE_EVENT_HANDLER_ENABLED 128
#define SERVICE_FLAP_DETECTION_ENABLED 256
#define SERVICE_FLAP_DETECTION_DISABLED 512
#define SERVICE_IS_FLAPPING 1024
#define SERVICE_IS_NOT_FLAPPING 2048
#define SERVICE_NOTIFICATIONS_DISABLED 4096
#define SERVICE_NOTIFICATIONS_ENABLED 8192
#define SERVICE_PASSIVE_CHECKS_DISABLED 16384
#define SERVICE_PASSIVE_CHECKS_ENABLED 32768
#define SERVICE_PASSIVE_CHECK 65536
#define SERVICE_ACTIVE_CHECK 131072
#define SERVICE_HARD_STATE 262144
#define SERVICE_SOFT_STATE 524288
|
PS : j'ai pris ces lignes des sources de Nagios 3, il y a quelques petites choses en moins pour la version 2 et 1.
Voici un exemple d'url avec les correspondances :
http://nagioshost/cgi-bin/nagios3/status.cgi?host=all&servicestatustypes=28&serviceprops=8
- servicestatustypes=28 : tous les états sauf OK
- serviceprops=8 : Enlève les états d'acknoledge
Et un petit + maintenant, si vous souhaitez ne pas voir le résumé des infos situé en haut de la page (cacher le header), voici l'option '&noheader' :
http://nagioshost/cgi-bin/nagios3/status.cgi?host=all&servicestatustypes=28&serviceprops=8&noheader
4.3 Ajouter un CGI personnalisé
Dans certains cas, vous pouvez avoir certains checks qui stockent temporairement des informations sur le serveur Nagios et vous souhaitez pouvoir exécuter des actions depuis l'interface Nagios. Pour cela, il existe l'option 'action_url' sur lequel nous allons pouvoir lui donner une URL ou se trouve un cgi qui exécutera ce que l'on veut, avec pourquoi pas des options.
Pour commencer, nous allons créer notre CGI. Voici un exemple minimaliste ou je supprime un fichier temporaire :
/usr/lib/cgi-bin/nagios3/remove.cgi
|
#!/usr/bin/perl
use CGI;
$query = CGI::new();
$host = $query->param("host");
# Avoid inputing special characters that would crash the program
if ( $h =~ /\`|\~|\@|\#|\$|\%|\^|\&|\*|\(|\)|\:|\=|\+|\"|\'|\;|\<|\>/ ) {
print "Illegal special chars detected. Exit\n";
exit(1);
}
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><Title>Removing $host temporary file</Title>\n";
print "<LINK REL='stylesheet' TYPE='text/css' HREF='/nagios/stylesheets/common.css'><LINK REL='stylesheet' TYPE='text/css' HREF='/nagios/stylesheets/status.css'>\n";
print "</HEAD><BODY>\n";
print "Removing $host Interface Network Flapping temporary file...";
if (-f "/tmp/iface_state_$host.txt")
{
unlink("/tmp/iface_state_$host.txt") or print "FAIL<br />/tmp/iface_state_$host.txt : $!\n" and exit(1);
print "OK\n";
}
else
{
print "FAIL<br />/tmp/iface_state_$host.txt : No such file or directory\n";
}
print "</body></html>\n";
|
Et puis dans la configuration du service en question, j'insère mon 'action_url' :
nagios_config.cfg
|
define service{
use generic-services-ulsysnet
hostgroup_name network
service_description Interface Network Flapping
check_period 24x7
notification_period 24x7
_SNMP_PORT 161
_SNMP_COMMUNITY public
_DURATION 86400
check_command check_interface_flapping
# For Thruk & Nagios # action_url ../../cgi-bin/nagios3/remove.cgi?host=$HOSTADDRESS$ # For Nagios only action_url remove.cgi?host=$HOSTADDRESS$}
|
Il ne vous reste plus qu'à reloader Nagios.
4.4 Envoyer des alertes SMS via Free Mobile
Merci à Free Mobile de nous offrir la possibilité d'envoyer des SMS via une API (activable depuis l'interface web de son compte). Comment cela fonctionne ? Il suffit de créer dans le dossier de configuration un dossier scripts et mettre le contenu de ce script dedans:
/etc/nagios3/scripts/send_sms.sh
|
#!/bin/bash
message="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "Naemon $1: $2 on $3 $4 ($5)")"
curl --insecure "https://smsapi.free-mobile.fr/sendmsg?user=<userid>&pass=<password>&msg=$message"
|
Adaptez les champs 'userid' et 'password' avec vos paramètres personnels (ces identifiants sont disponible depuis l'interface web Free Mobile). Maintenant créez les contacts et contactgroups associés:
/etc/nagios3/conf.d/contacts.cfg
|
define contact {
contact_name oncall-sms ; Short name of user
alias oncall-sms ; Full name of user
use contact-sms ; Inherit default values from generic-contact template (defined above)
}
define contactgroup {
contactgroup_name admins-sms
alias Nagios Administrators SMS
members oncall-sms
}
|
Ajoutez les commandes nécessaires, capable d'appeler le script:
/etc/nagios3/conf.d/commands.cfg
|
# 'notify-host-by-sms' command definition
define command {
command_name notify-host-by-sms
command_line /etc/naemon/scripts/send_sms.sh $SHORTDATETIME$ $NOTIFICATIONTYPE$ $HOSTNAME$/$SERVICEDESC$ $HOSTSTATE$ $HOSTOUTPUT$
}
# 'notify-service-by-sms' command definition
define command {
command_name notify-service-by-sms
command_line /etc/naemon/scripts/send_sms.sh $SHORTDATETIME$ $NOTIFICATIONTYPE$ $HOSTNAME$/$SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$
}
|
/etc/nagios3/conf.d/templates/contacts.cfg
|
define contact {
name contact-sms ; The name of this contact template
host_notification_commands notify-host-by-sms ; send host notifications via email
host_notification_options d,u,r ; send notifications for all host states, flapping events, and scheduled downtime events
host_notification_period 24x7 ; host notifications can be sent anytime
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
service_notification_commands notify-service-by-sms ; send service notifications via email
service_notification_options u,c,r ; send notifications for all service states, flapping events, and scheduled downtime events
service_notification_period 24x7 ; service notifications can be sent anytime
}
|
Et pour finir le service escalation, afin de notifier tout le monde par SMS s'il n'y a pas eu d'action assez rapide:
/etc/nagios3/conf.d/escalation.cfg
|
define serviceescalation {
host_name *
service_description *
first_notification 3
last_notification 4
notification_interval 0
contact_groups admins,admins-sms
}
|
Bien entendu, tout ceci n'est qu'un exemple et il faudra certainement adapter à vos besoins.
5 FAQ
5.1 No output returned from plugin
5.1.1 Solution 1
Si vous rencontrez ce type d'erreurs, c'est que vous n'avez pas activé les arguments au niveau de la configuration d'NRPE. Dans le fichier de configuration d'nrpe /etc/nagios/nrpe.cfg, passez cette valeur :
/etc/nagios/nrpe.cfg
|
dont_blame_nrpe=0
|
à 1 :
/etc/nagios/nrpe.cfg
|
dont_blame_nrpe=1
|
Ensuite redémarrez nrpe et c'est parti :-)
5.1.2 Solution 2
J'ai eu ce problème et ai chercher un moment avant de trouver. Cela vient d'NRPE et pour la configuration de l'hôte en question, remplacez par exemple ceci :
check_nrpe!check_disk_c
par
check_nrpe_1arg!check_disk_c
La différence c'est que :
- check_nrpe : prends des arguements
- check_nrpe_1arg : ne prends pas d'arguments
5.2 Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!
5.2.1 Solution 1
Ce genre d'erreur existe parceque tout simplement vous n'avez pas les droits, donc pour résoudre ce problème :
chmod
|
chmod -Rf a+rx /var/lib/nagios3
|
Ou sinon :
chown
|
chown nagios.www-data /var/lib/nagios3/rw/nagios.cmd
|
5.2.2 Solution 2
Petit problème de droits sous Debian généralement, voici la solution ! Exécutez en root ces commandes :
dpkg-statoverride
|
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
chmod -Rf a+rx /var/lib/nagios3
chown nagios.www-data /var/lib/nagios3/rw/nagios.cmd
|
5.3 Je ne recoit pas de mails
Il faut vérifier si la commande mail est bien présente command.cfg et surtout avec le bon PATH. Par exemple avec Debian, j'ai rencontré un petit problème et ce simple lien symbolique a résolu le problème :
ln
|
ln -s /usr/bin/mail /bin/mail
|
5.4 return code of 127 is out of bounds
C'est certainement du à une erreur de droit (exécution du plugins) ou bien parceque vous n'indiquez pas le path complet de l'éxécutable que vous souhaitez lancer. Oubliez $USER1$, pour moi ça ne fonctionne pas très bien. Après quelques reload de Nagios, ça se remet à déconner, donc utilisez le full path.
5.5 CHECK_NRPE: Error - Could not complete SSL handshake.
Je parie que c'est parce que vous n'avez pas les droits ! Un petit telnet sur le port 5666 de votre serveur en dira long. Modifiez ensuite la ligne allowed_hosts du nrpe.cfg et tout devrait rentrer dans l'ordre :-)
5.6 Monitorer Wordpress
Wordpress a une petite particularité avec le check_http, c'est qu'il faut lui faire suivre les liens (option "follow"). Voici un exemple de check :
commands.cfg
|
define command{
command_name check_blog
command_line /usr/lib/nagios/plugins/check_http -H 'www.deimos.fr' -u '/blog/index.php' -s 'Parce que la mémoire humaine ne fait pas des Go' -f follow
}
|
5.7 You don't have permission to access /nagios3/ on this server
Si comme moi après une msie à jour de Debian (5 -> 6) vous avez ce message, il faut remplacer "index.html" par "index.php" :
/etc/apache2/conf.d/nagios3.conf
|
...
DirectoryIndex index.php
...
|
Puis on redémarre le service :
|
/etc/init.d/apache2 restart
|
5.8 Mes checks en attente sont toujours là même après un reboot
Il peut arriver d'avoir des soucis sur sa machine Nagios et les checks qui doivent être fait, restent actifs, même après un reboot. C'est tout simplement du au fait que Nagios les garde en mémoire pour pouvoir les réexécuter plus tard. Pour purger cette queue, modifiez ceci dans la configuration de Nagios, redémarrez le, puis repassez le paramètre à 1 :
/etc/nagios3/nagios.cfg
|
[...]
retain_state_information=0
[...]
|
6 Ressources
Documentation Nagios sur OpenBSD
http://www.mail-archive.com/nagios-users@lists.sourceforge.net/msg04394.html
Documentation Nagios