Description

“centreon-plugins” est un projet gratuit et open source de supervision des systèmes. Ce projet peut être utilisé avec Centreon, Icinga et tout autre logiciel de supervision compatible avec les plugins Nagios.

La dernière version est disponible sur le dépôt git suivant: https://github.com/centreon/centreon-plugins.git

Installation

Debian Wheezy

Télécharger la dernière version de “centreon-plugins” depuis le dépôt :

# aptitude install git
# git clone https://github.com/centreon/centreon-plugins.git

Pour superviser les systèmes SNMP, vous devez installer les paquets suivants :

# aptitude install perl libsnmp-perl

Vous pouvez installer d’autres paquets pour utiliser plus de plugins :

# aptitude install libxml-libxml-perl libjson-perl libwww-perl libxml-xpath-perl libnet-telnet-perl libnet-ntp-perl libnet-dns-perl libdbi-perl libdbd-mysql-perl libdbd-pg-perl

Pour utiliser la fonctionnalité ‘memcached’, vous devez installer le module CPAN suivant (pas de paquet debian): http://search.cpan.org/~wolfsage/Memcached-libmemcached-1.001702/libmemcached.pm

Centos/Rhel 6

Télécharger la dernière version de “centreon-plugins” depuis le dépôt :

# yum install git
# git clone https://github.com/centreon/centreon-plugins.git

Pour superviser les systèmes SNMP, vous devez installer les paquets suivants :

# yum install perl net-snmp-perl

Vous pouvez installer d’autres paquets pour utiliser plus de plugins :

# yum install perl-XML-LibXML perl-JSON perl-libwww-perl perl-XML-XPath perl-Net-Telnet perl-Net-DNS perl-DBI perl-DBD-MySQL perl-DBD-Pg

Pour utiliser la fonctionnalité ‘memcached’, vous devez installer le module CPAN suivant (paquet disponible dans ‘rpmforge’): http://search.cpan.org/~wolfsage/Memcached-libmemcached-1.001702/libmemcached.pm

Utilisation basique

Nous allons utiliser un exemple basique pour montrer comment superviser un système. J’ai terminé partie installation et je veux superviser un système Linux par SNMP. Tout d’abord, j’ai besoin de trouver le plugin à utiliser dans la liste :

$ perl centreon_plugins.pl --list-plugin | grep -i linux | grep 'PLUGIN'
PLUGIN: os::linux::local::plugin
PLUGIN: os::linux::snmp::plugin

Il semblerait que ‘os::linux::snmp::plugin’ est le bon donc je vérifie avec l’option --help pour être sûr :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --help
...
Plugin Description:
  Check Linux operating systems in SNMP.

C’est exactement ce dont j’ai besoin. Maintenant je vais utiliser l’option --list-mode pour connaître ce que je peux faire avec celui-ci :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --list-mode
...
Modes Available:
 cpu
 cpu-detailed
 disk-usage
 diskio
 inodes
 interfaces
 list-diskspath
 list-interfaces
 list-storages
 load
 memory
 processcount
 storage
 swap
 tcpcon
 time
 uptime

J’aimerais tester le mode ‘load’:

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load
UNKNOWN: Missing parameter --hostname.

Il ne fonctionne pas car certaines options sont manquantes. Je peux avoir une description du mode et ses options avec l’option --help :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load --help

Je dois éventuellement configurer certaines options SNMP :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public
OK: Load average: 0.00, 0.00, 0.00 | 'load1'=0.00;;;0; 'load5'=0.00;;;0; 'load15'=0.00;;;0;

Je peux spécifier des seuils avec les options --warning et --critical:

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --warning=1,2,3 --critical=2,3,4
OK: Load average: 0.00, 0.00, 0.00 | 'load1'=0.00;0:1;0:2;0; 'load5'=0.00;0:2;0:3;0; 'load15'=0.00;0:3;0:4;0;

FAQ

Qu’est ce que je peux superviser ?

L’option --list-plugin peut être utilisée pour obtenir la liste des plugins, ainsi qu’une courte description.

Les en-têtes du tableau signifient :

  • Transport : Le point de contrôle a des options internes pour le transport.
  • Protocole : qu’est-ce qui est utilisé pour obtenir les informations de supervision ?
  • Expérimental : Le point de contrôle est en cours de développement.
Categorie Contrôle Transport Protocole Experimental Comment Dépendances Perl
SSH TELNET WSMAN SNMP HTTP WMI JMX custom
Application Active Directory              
  Utilise la commande ‘dcdiag’. Doit être installée sur Windows. Win32::Job
Apache        
        Requiert le module Apache ‘mod_status’. LWP::UserAgent, URI, HTTP::Cookies
Apc        
          LWP::UserAgent, URI, HTTP::Cookies
Apcupsd
           
  UUtilise les commandes ‘apcupsd’.  
Bluemind        
        Utilise l’API ‘influxdb’. JSON, LWP::UserAgent, URI, HTTP::Cookies
Checkmyws        
          JSON, LWP::UserAgent, URI, HTTP::Cookies
Elasticsearch        
          JSON, LWP::UserAgent, URI, HTTP::Cookies
Exchange              
  Utilise un script powershell. Doit être installé sur Windows. Win32::Job
Github        
        Utilise l’API ‘github’. JSON, LWP::UserAgent, URI, HTTP::Cookies, DateTime
Hddtemp              
  Ouvre une connexion TCP personnalisée.  
IIS          
      Doit être installé sur Windows. Win32::OLE
   
   
   
  openwsman, MIME::Base64
Jenkins        
          JSON, LWP::UserAgent, URI, HTTP::Cookies
Kayako        
        Utilise l’API ‘kayako’. XML::XPath, Digest::SHA, LWP::UserAgent, URI, HTTP::Cookies
Lmsensors      
             
Msmq              
Doit être installé sur Windows. Pas encore développé.  
Nginx        
        Requiert le module ‘HttpStubStatusModule’. LWP::UserAgent, URI, HTTP::Cookies
Pacemaker
           
  Utilise la commande ‘crm_mon’.  
Pfsense      
             
Selenium              
  Se connecte à un serveur Selenium pour jouer un scenario. XML::XPath, WWW::Selenium
Tomcat        
        Requiert tomcat webmanager. XML::XPath, LWP::UserAgent, URI, HTTP::Cookies
Varnish
           
  Utilise les commandes varnish.  
VMWare              
  Requiert le connecteur ‘centreon-vmware’ de Centreon.  
Pfsense      
             
Protocoles Bgp      
             
Dhcp              
    Net::DHCP::Packet, Net::Subnet
Dns              
    Net::DNS
Ftp              
    Net::FTP, Net::FTPSSL
Http        
          LWP::UserAgent, URI, HTTP::Cookies, JSON, JSON::Path, XML::XPath
Ftp              
    Net::FTP, Net::FTPSSL
Imap              
    Net::IMAP::Simple
Jmx            
      JSON::Path, JMX::Jmx4Perl
Ldap              
    Net::LDAP
Ntp              
    Net::NTP
Radius              
    Authen::Radius
Smtp              
    Email::Send::SMTP::Gmail
Tcp              
    IO::Socket::SSL
Udp              
     
x509              
    IO::Socket::SSL
Bases de données Informix              
    DBI, DBD::Informix
Firebird              
    DBI, DBD::Firebird
MS SQL              
    DBI, DBD::Sybase
MySQL              
    DBI, DBD::mysql
Oracle              
    DBI, DBD::oracle, DateTime
Postgres              
    DBI, DBD::Pg
Matériel ATS Apc      
       
   
PDU Apc      
             
PDU Eaton      
       
   
PDU Raritan      
             
Standard Printers      
             
Hwgste      
             
Sensorip      
             
Sensormetrix Em01        
          LWP::UserAgent, URI, HTTP::Cookies
Serverscheck      
             
Cisco UCS      
             
Dell CMC      
             
Dell iDrac      
             
Dell Openmanage      
          Requiert “l’agent openmanage” sur le système d’exploitation.  
HP Proliant      
          Requiert “l’agent HP Insight” sur le système d’exploitation.  
HP Blade Chassis      
             
IBM BladeCenter      
             
IBM HMC
           
   
IBM IMM      
             
Sun hardware
 
     
  Peut superviser plusieurs types de matériel Sun. Net::Telnet, SNMP
UPS APC      
             
UPS Mge      
             
UPS Standard      
             
UPS Powerware      
             
Réseau 3com      
             
Alcatel Omniswitch      
             
Arkoon      
             
Aruba      
             
Bluecoat      
             
Brocade      
             
Checkpoint      
             
Cisco      
          Many cisco (2800, Nexus, Wlc, Ironport,...)  
Citrix Netscaler      
             
Dell Powerconnect      
             
Dlink      
             
Extreme      
             
F5 Big-Ip      
             
Fortinet Fortigate      
             
Fritzbox      
             
H3C      
             
Hirschmann      
             
HP Procurve      
             
HP Virtual Connect      
             
Juniper      
          Peut superviser: ‘SSG’, ‘SA’, ‘SRX’, ‘MAG’, ‘EX’, ‘Ggsn’.  
Palo Alto      
             
Netasq      
             
Oneaccess      
             
Radware Alteon      
       
   
Redback      
             
Riverbed      
             
Ruggedcom      
             
Securactive      
             
Stonesoft      
             
Systèmes AIX
           
  Utilise les commandes AIX.  
         
         
Freebsd      
          Utilise l’agent ‘bsnmpd’.  
Linux
           
  Utilise les commandes Linux.  
     
             
Solaris
           
  Utilise les commandes Solaris.  
         
         
Windows      
             
   
   
   
   
Stockage Dell EqualLogic      
             
Dell MD3000              
  Requiert la commande ‘SMcli’.  
Dell TL2000      
             
Dell ML6000      
             
EMC Celerra
           
  Utilise les commandes de l’appliance.  
EMC Clariion              
  Requiert la commande ‘navisphere’.  
EMC DataDomain      
             
EMC Recoverypoint
           
  Utilise les commandes de l’appliance.  
EMC Vplex          
      Utilise l’API JSON. JSON, LWP::UserAgent, URI, HTTP::Cookies
EMC Xtremio          
      Utilise l’API JSON. JSON, LWP::UserAgent, URI, HTTP::Cookies
Fujitsu Eternus DX
           
  Utilise les commandes de l’appliance.  
HP 3par
           
  Utilise les commandes de l’appliance.  
HP Lefthand      
             
HP MSA2000      
             
HP p2000          
      Utilise l’API XML. XML::XPath, LWP::UserAgent, URI, HTTP::Cookies
IBM DS3000              
  Utilise la commande ‘SMcli’.  
IBM DS4000              
  Utilise la commande ‘SMcli’.  
IBM DS5000              
  Utilise la commande ‘SMcli’.  
IBM TS3100      
             
IBM TS3200      
             
Netapp      
            DateTime
Nimble      
             
Panzura      
             
Qnap      
             
Synology      
             
Violin 3000      
             

Comment puis-je supprimer les données de performance ?

Par exemple, je vérifie les connexions TCP d’un serveur Linux par SNMP avec la commande suivante :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=tcpcon --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public
OK: Total connections: 1 | 'total'=1;;;0; 'con_closed'=0;;;0; 'con_closeWait'=0;;;0; '  con_synSent'=0;;;0; 'con_established'=1;;;0; 'con_timeWait'=0;;;0; 'con_lastAck'=0;;;0  ; 'con_listen'=5;;;0; 'con_synReceived'=0;;;0; 'con_finWait1'=0;;;0; 'con_finWait2'=0;  ;;0; 'con_closing'=0;;;0;

Il y a trop de données de performances et je veux seulement garder la donnée de performance ‘total’. J’utilise l’option --filter-perfdata='total' :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=tcpcon --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --filter-perfdata='total'
OK: Total connections: 1 | 'total'=1;;;0;

Je peux utiliser une expression régulière dans l’option --filter-perfdata. Donc je peux exclure les données de performance commençant par ‘total’ :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=tcpcon --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --filter-perfdata='^(?!(total))'
OK: Total connections: 1 | 'con_closed'=0;;;0; 'con_closeWait'=0;;;0; 'con_synSent'=0;;;0; 'con_established'=1;;;0; 'con_timeWait'=0;;;0; 'con_lastAck'=0;;;0; 'con_listen'=5;;;0; 'con_synReceived'=0;;;0; 'con_finWait1'=0;;;0; 'con_finWait2'=0;;;0; 'con_closing'=0;;;0;

Comment puis-je ajuster un seuil: critique si valeur < X ?

“centreon-plugins” gère les seuils Nagios : https://nagios-plugins.org/doc/guidelines.html#THRESHOLDFORMAT Par exemple, je veux vérifier que ‘crond’ fonctionne (s’il y a moins de 1 processus, critique). J’ai deux solutions :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=processcount --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --process-name=crond --critical=1:
CRITICAL: Number of current processes running: 0 | 'nbproc'=0;;1:;0;

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=processcount --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --process-name=crond --critical=@0:0
CRITICAL: Number of current processes running: 0 | 'nbproc'=0;;@0:0;0;

Comment puis-je vérifier des équipements ipv6 en SNMP ?

Vous pouvez vérifier des équipements ipv6 en SNMP via la syntaxe suivante (udp6:[xxxx]):

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --hostname='udp6:[fe80::250:56ff:feb5:6ae0]' --mode=storage --snmp-version=2c --snmp-community=public

Comment puis-je vérifier la valeur d’un OID SNMP générique ?

Il y a un plugin SNMP générique pour vérifier cela. Voici un exemple pour obtenir l’OID SNMP ‘SysUptime’ :

$ perl centreon_plugins.pl --plugin=apps::protocols::snmp::plugin --mode=numeric-value --oid='.1.3.6.1.2.1.1.3.0' --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public

Comment utiliser un serveur memcached pour la rétention des données ?

Quelques plugins ont besoin de stocker des données. Il y a deux solutions pour cela :

  • Un fichier sur le disque (par defaut).
  • Un serveur memcached.

Pour utiliser ‘memcached’, vous devez avoir un serveur memcached et le module CPAN ‘Memcached::libmemcached’ installé. Vous pouvez renseigner le serveur memcached avec l’option --memcached:

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=interfaces --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --verbose --add-traffic --memcached=127.0.0.1
OK: All traffic are ok | 'traffic_in_lo'=197.40b/s;;;0;10000000 'traffic_out_lo'=197.40b/s;;;0;10000000 'traffic_in_eth0'=14539.11b/s;;;0;1000000000 'traffic_out_eth0'=399.59b/s;;;0;1000000000 'traffic_in_eth1'=13883.82b/s;;;0;1000000000 'traffic_out_eth1'=1688.66b/s;;;0;1000000000
Interface 'lo' Traffic In : 197.40b/s (0.00 %), Out : 197.40b/s (0.00 %)
Interface 'eth0' Traffic In : 14.54Kb/s (0.00 %), Out : 399.59b/s (0.00 %)
Interface 'eth1' Traffic In : 13.88Kb/s (0.00 %), Out : 1.69Kb/s (0.00 %)

Astuce

Un fichier local est utilisé si le serveur memcached ne répond pas.

Qu’est-ce que l’option --dyn-mode fait ?

Avec cette option, vous pouvez utiliser un mode avec un plugin. Cela est couramment utilisé pour les bases de données. Par exemple, j’ai une application qui stocke des informations de supervision dans une base de données. Le développeur peut utiliser un autre plugin pour créer le point de contrôle (pas besoin de faire les connexions SQL,... cela fait gagner du temps) :

$ perl centreon_plugins.pl --plugin=database::mysql::plugin --dyn-mode=apps::centreon::mysql::mode::pollerdelay --host=10.30.3.75 --username='test' --password='testpw' --verbose
OK: All poller delay for last update are ok | 'delay_Central'=2s;0:300;0:600;0; 'delay_Poller-Engine'=2s;0:300;0:600;0;
Delay for last update of Central is 2 seconds
Delay for last update of Poller-Engine is 2 seconds

Warning

Un mode utilisant le système suivant doit le notifier (dans l’aide associée). Donc vous devriez ouvrir un fichier dans éditeur et lire à la fin de la description.

Comment puis-je vérifier la version du plugin ?

Vous pouvez vérifier la version des plugins et des modes avec l’option --version :

$ perl centreon_plugins.pl --version
Global Version: 20160524
$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --version
Plugin Version: 0.1
$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=storage --version
Mode Version: 1.0

Vous pouvez également utiliser l’option --mode-version pour exécuter le mode seulement s’il est dans la bonne version. Par exemple, nous voulons exécuter le mode seulement si sa version >= 2.x :

$  perl  centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --verbose --mode-version='2.x'
UNKNOWN: Not good version for plugin mode. Excepted at least: 2.x. Get: 1.0

Comment puis-je avoir un seul fichier Perl ?

Nous avons réalisé des tests et le temps d’éxecution est augmenté d’environ 4%. Nous allons créer un fichier unique pour la sonde Linux SNMP.

Télécharger le module Perl App::FatPacker sur metacpan:

# tar zxvf App-FatPacker-0.010005.tar.gz
# cd App-FatPacker-0.010005
# perl Makefile.PL && make && make install

Créer un répertoire de construction:

# mkdir -p build/plugin
# cd build

Cloner centreon-plugins:

# git clone https://github.com/centreon/centreon-plugins.git

fatpack inclut les fichiers pm présent dans le répertoire lib:

# mkdir plugin/lib && cd centreon-plugins

Copier les fichiers communs à l’ensemble des sondes:

# find . -name "*.pm" -exec sed -i ' /__END__/d' \{\} \;
# cp -R --parent centreon/plugins/{misc,mode,options,output,perfdata,script,statefile,values}.pm centreon/plugins/templates/ centreon/plugins/alternative/ ../plugin/lib/
# cp centreon_plugins.pl ../plugin
# sed -i 's/alternative_fatpacker = 0/alternative_fatpacker = 1/' ../plugin/lib/centreon/plugins/script.pm

Copier les fichiers pour la sonde Linux SNMP:

# cp -R --parent centreon/plugins/{script_snmp,snmp}.pm os/linux/snmp/ snmp_standard/mode/{cpu,cpudetailed,diskio,diskusage,inodes,interfaces,loadaverage,listdiskspath,listinterfaces,liststorages,memory,processcount,storage,swap,ntp,tcpcon,uptime}.pm ../plugin/lib/

Construire le fichier Perl unique:

# cd ../plugin
# fatpack file centreon_plugins.pl > centreon_linux_snmp.pl

La sonde fonctionne de la même façon:

# perl centreon_linux_snmp.pl --plugin os::linux::snmp::plugin --mode=processcount --snmp-community public --snmp-version 2c --hostname=127.0.0.1  --process-name='' --process-status='' --process-args=''

Comment puis-je créer un binaire Windows ?

Cette procédure permet d’utiliser les sondes sans installer installer Perl sur le système Windows.

Après les installations, installer le module PAR::Packer (remplacer <PERL_INSTALL_DIR>):

cmd> <PERL_INSTALL_DIR>\perl\bin\cpan.bat
cpan> install PAR::Packer

L’installation peut prendre plusieurs minutes.

Dans un dossier contenant le répertoire centreon-plugins, créer un fichier build.bat (remplacer <PERL_INSTALL_DIR>). Nous excluons le module IO::Socket::INET6 (Perl 5.14 intègre la fonctionnalité IPv6 en natif).

set PERL_INSTALL_DIR=<PERL_INSTALL_DIR>

chdir /d %~dp0
set PAR_VERBATIM=1

cmd /C %PERL_INSTALL_DIR%\perl\site\bin\pp --lib=centreon-plugins\ -o centreon_plugins.exe centreon-plugins\centreon_plugins.pl ^
--unicode ^
-X IO::Socket::INET6 ^
--link=%PERL_INSTALL_DIR%\c\bin\libxml2-2__.dll ^
--link=%PERL_INSTALL_DIR%\c\bin\libiconv-2__.dll ^
--link=%PERL_INSTALL_DIR%\c\bin\liblzma-5__.dll ^
--link=%PERL_INSTALL_DIR%\c\bin\zlib1__.dll ^
-M Win32::Job ^
-M centreon::plugins::script ^
-M centreon::plugins::alternative::Getopt ^
-M apps::backup::netbackup::local::plugin ^
-M apps::backup::netbackup::local::mode::dedupstatus ^
-M apps::backup::netbackup::local::mode::drivecleaning ^
-M apps::backup::netbackup::local::mode::drivestatus ^
-M apps::backup::netbackup::local::mode::jobstatus ^
-M apps::backup::netbackup::local::mode::listpolicies ^
-M apps::backup::netbackup::local::mode::tapeusage ^
-M apps::activedirectory::local::plugin ^
-M apps::activedirectory::local::mode::dcdiag ^
-M apps::activedirectory::local::mode::netdom ^
-M apps::citrix::local::plugin ^
-M apps::citrix::local::mode::license ^
-M apps::citrix::local::mode::session ^
-M apps::citrix::local::mode::zone ^
-M apps::citrix::local::mode::folder ^
-M apps::iis::local::plugin ^
-M apps::iis::local::mode::listapplicationpools ^
-M apps::iis::local::mode::applicationpoolstate ^
-M apps::iis::local::mode::listsites ^
-M apps::iis::local::mode::webservicestatistics ^
-M apps::exchange::2010::local::plugin ^
-M apps::exchange::2010::local::mode::activesyncmailbox ^
-M apps::exchange::2010::local::mode::databases ^
-M apps::exchange::2010::local::mode::listdatabases ^
-M apps::exchange::2010::local::mode::imapmailbox ^
-M apps::exchange::2010::local::mode::mapimailbox ^
-M apps::exchange::2010::local::mode::outlookwebservices ^
-M apps::exchange::2010::local::mode::owamailbox ^
-M apps::exchange::2010::local::mode::queues ^
-M apps::exchange::2010::local::mode::replicationhealth ^
-M apps::exchange::2010::local::mode::services ^
-M centreon::common::powershell::exchange::2010::powershell ^
-M apps::cluster::mscs::local::plugin ^
-M apps::cluster::mscs::local::mode::listnodes ^
-M apps::cluster::mscs::local::mode::listresources ^
-M apps::cluster::mscs::local::mode::networkstatus ^
-M apps::cluster::mscs::local::mode::nodestatus ^
-M apps::cluster::mscs::local::mode::resourcestatus ^
-M apps::cluster::mscs::local::mode::resourcegroupstatus ^
-M os::windows::local::plugin ^
-M os::windows::local::mode::ntp ^
-M os::windows::local::mode::rdpsessions ^
-M storage::dell::compellent::local::plugin ^
-M storage::dell::compellent::local::mode::hbausage ^
-M storage::dell::compellent::local::mode::volumeusage ^
--verbose

pause

Lancer le fichier “build.bat” pour créer le binaire “centreon_plugins.exe”.

Pour changer la version et l’icône du binaire, ajouter le code suivant après PERL_INSTALL_DIR (première ligne) :

set ICO_FILE=centreon.ico
set RC_FILE=centreon.rc

chdir /d %~dp0

for /f "tokens=4 delims= " %%i in ('type centreon-plugins\centreon\plugins\script.pm ^| findstr global_version ^| findstr my') do set "VERSION_PLUGIN=%%i"
set VERSION_PLUGIN=%VERSION_PLUGIN:~0,8%

(
echo #define PP_MANIFEST_FILEFLAGS 0
echo #include ^<windows.h^>
echo.
echo CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "winres\\pp.manifest"
echo.
echo VS_VERSION_INFO VERSIONINFO
echo    FILEVERSION        0,0,0,0
echo    PRODUCTVERSION     0,0,0,0
echo    FILEFLAGSMASK      VS_FFI_FILEFLAGSMASK
echo    FILEFLAGS          PP_MANIFEST_FILEFLAGS
echo    FILEOS             VOS_NT_WINDOWS32
echo    FILETYPE           VFT_APP
echo    FILESUBTYPE        VFT2_UNKNOWN
echo BEGIN
echo    BLOCK "StringFileInfo"
echo    BEGIN
echo        BLOCK "000004B0"
echo        BEGIN
echo            VALUE "CompanyName", "Centreon\0"
echo            VALUE "FileDescription", " \0"
echo            VALUE "FileVersion", "1.0.0.0\0"
echo            VALUE "InternalName", " \0"
echo            VALUE "LegalCopyright", " \0"
echo            VALUE "LegalTrademarks", " \0"
echo            VALUE "OriginalFilename", " \0"
echo            VALUE "ProductName", "centreon-plugins\0"
echo            VALUE "ProductVersion", "%VERSION_PLUGIN%.0\0"
echo        END
echo    END
echo    BLOCK "VarFileInfo"
echo    BEGIN
echo        VALUE "Translation", 0x00, 0x04B0
echo    END
echo END
echo.
echo WINEXE ICON winres\\pp.ico
)> %RC_FILE%

for /f "delims=" %%i in ('dir /ad /B %PERL_INSTALL_DIR%\cpan\build\PAR-Packer-*') do set "PAR_PACKER_DIRNAME=%%i"
SET PAR_PACKER_SRC=%PERL_INSTALL_DIR%\cpan\build\%PAR_PACKER_DIRNAME%

copy /Y %ICO_FILE% %PAR_PACKER_SRC%\myldr\winres\pp.ico
copy /Y centreon.rc %PAR_PACKER_SRC%\myldr\winres\pp.rc
del %PAR_PACKER_SRC%\myldr\ppresource.coff
cd /D %PAR_PACKER_SRC%\myldr\ && perl Makefile.PL
cd /D %PAR_PACKER_SRC%\myldr\ && dmake boot.exe
cd /D %PAR_PACKER_SRC%\myldr\ && dmake Static.pm
attrib -R %PERL_INSTALL_DIR%\perl\site\lib\PAR\StrippedPARL\Static.pm
copy /Y %PAR_PACKER_SRC%\myldr\Static.pm %PERL_INSTALL_DIR%\perl\site\lib\PAR\StrippedPARL\Static.pm

Il est possible de compiler un binaire 32 bits depuis une version 64 bits Windows :

  • Installer Strawberry Perl 5.24.x version 32 bits sur un Windows (Télécharger sur http://strawberryperl.com/)
  • Installer le module cpan “PAR::Packer”
  • Ajouter la ligne suivante au début du script : PATH=%PERL_INSTALL_DIR%cbin;%PERL_INSTALL_DIR%perlbin;C:WindowsSystem32

Dépannage

SNMP

J’ai l’erreur SNMP: ‘UNKNOWN:.* (tooBig).*’

L’erreur suivante peut se produire avec certains équipements. Vous pouvez la résoudre si vous paramétrez les options suivantes :

  • --subsetleef=20 --maxrepetitions=20

J’ai l’erreur SNMP: ‘UNKNOWN:.*Timeout’

L’erreur suivante signifie :

  • Pas d’accès réseau vers le serveur SNMP cible (un pare-feu peut bloquer le port UDP 161).
  • La communauté ou la version SNMP paramétrées n’est pas correcte.

J’ai l’erreur SNMP: ‘UNKNOWN:.*Cant get a single value’

L’erreur suivante signifie: l’accès SNMP fonctionne mais vous ne pouvez pas récupérer les valeurs SNMP. Plusieurs raisons possibles :

  • La valeur SNMP n’est pas encore renseignée (peut se produire lorsqu’un serveur SNMP vient juste de démarrer).
  • La valeur SNMP n’est pas implémentée par le constructeur.
  • La valeur SNMP est renseignée sur un firmware ou OS spécifique.

Il semblerait que le contrôle de processus ne fonctionne pas avec certains filtres sur les arguments

Avec le SNMP, il y a une limite pour la longueur des arguments qui est fixée à 128 caractères. Donc, si vous essayez de filtrer avec un argument après 128 caractères, cela ne fonctionnera pas. Cela peut arriver avec les arguments Java. Pour résoudre le problème, vous devez privilégier le contrôle via NRPE.

Pas d’accès en SNMP v3

Tout d’abord, vous devez valider la connexion SNMP v3 avec snmpwalk. Lorsque cela fonctionne, vous renseignez les options SNMP v3 en ligne de commande. L’association entre les options ‘snmpwalk’ et les options “centreon-plugins” :

  • -a => --authprotocol
  • -A => --authpassphrase
  • -u => --snmp-username
  • -x => --privprotocol
  • -X => --privpassphrase
  • -l => non nécessaire (automatique)
  • -e => --securityengineid
  • -E => --contextengineid

Divers

J’ai l’erreur: “UNKNOWN: Need to specify ‘–custommode’.”

Certains plugins ont besoin de renseigner l’option --custommode. Vous pouvez connaître la valeur à renseigner avec l’option --list-custommode. Un exemple :

$ perl centreon_plugins.pl --plugin=storage::ibm::DS3000::cli::plugin --list-custommode
...
Custom Modes Available:
 smcli

$ perl centreon_plugins.pl --plugin=storage::ibm::DS3000::cli::plugin --custommode=smcli --list-mode

J’ai l’erreur: “UNKNOWN: Cannot write statefile .*”

Vous devez créer le dossier (avec les droits d’écriture) pour autoriser le plugin à stocker certaines données sur le disque.

J’ai l’erreur: “UNKNOWN: Cannot load module ‘xxx’.”

Le problème peut être:

  • Un module CPAN prérequis est manquant. Vous devez l’installer.
  • Le module CPAN ne peut pas être chargé en raison de son chemin d’accès. Les modules Perl doivent être installés dans des chemins spécifiques.

Je ne peux pas vois les messages d’aide

Les fichiers “centreon-plugins” doivent être sous format Unix (pas de retour à la ligne Windows). Vous pouvez les modifier avec la commande suivante :

$ find . -name "*.p[ml]" -type f -exec dos2unix \{\} \;

Warning

Exécuter cette commande dans le dossier “centreon-plugins”.

Examples de commandes

Windows

Contrôler tous les disques en SNMP

Dégradé si l’espace utilisé > 80% et critique sur l’espace utilisé > 90% :

$ perl centreon_plugins.pl --plugin=os::windows::snmp::plugin --mode=storage --hostname=xxx.xxx.xxx.xxx --snmp-version=2c --snmp-public=community  --verbose --storage='.*' --name --regexp --display-transform-src='(..).*' --display-transform-dst='$1' --warning=80 --critical=90
OK: All storages are ok. | used_C:'=38623698944B;0:108796887040;0:122396497920;0;135996108800 used_D:'=38623698944B;0:108796887040;0:122396497920;0;135996108800
Storage 'C:' Total: 126.66 GB Used: 35.97 GB (28.40%) Free: 90.69 GB (71.60%)
Storage 'D:' Total: 126.66 GB Used: 35.97 GB (28.40%) Free: 90.69 GB (71.60%)

Dégradé si l’espace disponible < 5G et critique si l’espace disponible < 2G :

$ perl centreon_plugins.pl --plugin=os::windows::snmp::plugin --mode=storage --hostname=xxx.xxx.xxx.xxx --snmp-version=2c --snmp-public=community  --verbose --storage='.*' --name --regexp --display-transform-src='(..).*' --display-transform-dst='$1' --warning=5497558138880: --critical=2199023255552: --units='B' --free
OK: All storages are ok. | 'free_C:'=97372344320B;0:5497558138880;0:2199023255552;0;135996108800 'free_D:'=97372344320B;0:5497558138880;0:2199023255552;0;135996108800
Storage 'C:' Total: 126.66 GB Used: 35.97 GB (28.40%) Free: 90.69 GB (71.60%)
Storage 'D:' Total: 126.66 GB Used: 35.97 GB (28.40%) Free: 90.69 GB (71.60%)

Linux

Contrôler le trafic de toutes les interfaces en SNMP

Dégradé si le trafic entrant/sortant utilisé > 80% et critique si le trafic entrant/sortant utilisé > 90% :

$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=interfaces --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --verbose --interface='.*' --name --add-traffic --warning-in-traffic=80 --critical-in-traffic=90 --warning-out-traffic=80 --critical-out-traffic=90
OK: All traffic are ok | 'traffic_in_lo'=126.58b/s;0.00:8000000.00;0.00:9000000.00;0;10000000 'traffic_out_lo'=126.58b/s;0.00:8000000.00;0.00:9000000.00;0;10000000 'traffic_in_eth0'=1872.00b/s;0.00:800000000.00;0.00:900000000.00;0;1000000000 'traffic_out_eth0'=266.32b/s;0.00:800000000.00;0.00:900000000.00;0;1000000000 'traffic_in_eth1'=976.65b/s;0.00:800000000.00;0.00:900000000.00;0;1000000000 'traffic_out_eth1'=1021.68b/s;0.00:800000000.00;0.00:900000000.00;0;1000000000
Interface 'lo' Traffic In : 126.58b/s (0.00 %), Out : 126.58b/s (0.00 %)
Interface 'eth0' Traffic In : 1.87Kb/s (0.00 %), Out : 266.32b/s (0.00 %)
Interface 'eth1' Traffic In : 976.65b/s (0.00 %), Out : 1.02Kb/s (0.00 %)

Protocole HTTP

Contrôler l’authentification à une application (requête POST)

Voici un exemple pour le formulaire d’authentification de demo.centreon.com :

$ perl centreon_plugins.pl --plugin=apps::protocols::http::plugin --mode=expected-content --hostname=demo.centreon.com  --method='POST' --post-param='useralias=admin' --post-param='password=centreon'  --cookies-file='/tmp/lwp_cookies.dat' --urlpath='/centreon/index.php' --expected-string='color_UNREACHABLE'
OK: 'color_UNREACHABLE' is present in content. | 'time'=0.575s;;;0; 'size'=20708B;;;0;

Protocole Modbus

Contrôler 3 registres holding

Le contenu du fichier modbus.json peut être spécifié directement dans l’option --config (exemple: --config='{ "selection": { "metric1":{...'). L’attribut type peut avoir les valeurs suivantes :

  • holding (défaut)
  • coils
  • discrete
  • input
{
    "selection":{
        "metric1":{
            "address": 1,
            "quantity": 1,
            "type": "holding",
            "display": true
        },
        "metric2":{
            "address": 2,
            "quantity": 1,
            "type": "holding",
            "display": true
        },
        "metric3":{
            "address": 3,
            "quantity": 1,
            "type": "holding",
            "display": true
        }
    }
}

Le résultat de la commande :

$ perl centreon_plugins.pl --plugin=apps/protocols/modbus/plugin.pm --mode=numeric-value --tcp-host=10.0.0.1 --config=modbus.json --verbose
OK: All metrics are OK | 'metric1'=0;;;; 'metric2'=41291;;;; 'metric3'=42655;;;;
Metric 'metric1' value is '0'
Metric 'metric2' value is '41291'
Metric 'metric3' value is '42655'

Comment modifier la sortie ?

Il existe une section pour modifier la sortie globallement. Il est aussi possible de surcharger une métrique spécifiquement :

{
    "selection":{
        "metric1":{
            "address": 1,
            "quantity": 1,
            "type": "holding",
            "display": true
        },
        "metric2":{
            "address": 2,
            "quantity": 1,
            "type": "holding",
            "display": true
        },
        "metric3":{
            "address": 3,
            "quantity": 1,
            "type": "holding",
            "display": true,
            "formatting": {
                "printf_msg": "Override '%s' value is %.2f",
                "printf_var": "$self->{result_values}->{instance}, $self->{result_values}->{value}"
            }
        }
    },
    "formatting": {
        "printf_msg": "My metric '%s' value is %.2f",
        "printf_var": "$self->{result_values}->{instance}, $self->{result_values}->{value}"
    }
}

Le résultat de la commande :

$ perl centreon_plugins.pl --plugin=apps/protocols/modbus/plugin.pm --mode=numeric-value --tcp-host=10.0.0.1 --config=modbus.json --verbose
OK: All metrics are OK | 'metric1'=0;;;; 'metric2'=41291;;;; 'metric3'=42655;;;;
My Metric 'metric1' value is 0.00
My Metric 'metric2' value is 41291.00
Override 'metric3' value is 42655.00

Comment moyenner 4 registres ?

Nous créons les valeurs moyennées suivantes : [x1 + x2 / 2 = y] [x3 + x4 / 2 = z]. Avec l’attribut pattern, il est possible de sélectionner les valeurs. Dans notre cas, nous récupérons 4 valeurs en 1 seule sélection. Les valeurs sélectionnées se nomment : metrics.0, metrics.1, metrics.2, metrics.3 (order is preserved).

L’attribut aggregation peut avoir les valeurs suivantes :

  • avg: retourne la moyenne des valeurs.
  • sum: retourne la somme des valeurs.
  • min: retourne la plus petite valeur numérique des valeurs.
  • max: retourne la plus grande valeur numérique des valeurs.
{
    "selection":{
        "metrics":{
            "address": 1,
            "quantity": 4,
            "type": "holding",
            "display": false
        }
    },
    "virtualcurve":{
        "avg1":{
            "pattern": "metrics\\.[01]$",
            "aggregation": "avg",
            "unit": "con"
        },
        "avg2":{
            "pattern": "metrics\\.[23]$",
            "aggregation": "avg",
            "unit": "con"
        }
    }
}

Le résultat de la commande :

$ perl centreon_plugins.pl --plugin=apps/protocols/modbus/plugin.pm --mode=numeric-value --tcp-host=10.0.0.1 --config=modbus.json --verbose
OK: Global metrics are OK | 'avg1'=42192con;;;; 'avg2'=40574con;;;;
Metric 'avg1' value is '42192'
Metric 'avg2' value is '40574'

Appliquer un calcul spécifique

L’attribut custom permet d’appliquer des modifications à la valeur :

{
    "selection":{
        "metrics":{
            "address": 1,
            "quantity": 4,
            "type": "holding",
            "display": false
        }
    },
    "virtualcurve":{
        "avg":{
            "aggregation": "avg",
            "custom": " / 10",
            "unit": "con"
        }
    }
}

Le résultat de la commande :

$ perl centreon_plugins.pl --plugin=apps/protocols/modbus/plugin.pm --mode=numeric-value --tcp-host=10.0.0.1 --config=modbus.json --verbose
OK: Metric 'avg' value is '3072.3' | 'avg'=3072.3con;;;;
Metric 'avg' value is '3072.3'

Multi-service plugin

Ce mode permet de compiler/aggréger le résultat de plusieurs checks dans un seul. Il peut aussi être utilisé pour réaliser des aggregation dans des groupes logiques, il a été pensé pour récupérer au travers de réseaux bas débit des résultats de contrôle sur des Centreon distants, mais il peut aussi permettre d’éviter de checker deux fois les ressources dans deux Centreon différents.

Format du fichier de configuration

{
    "mode":"sqlmatching",
    "selection":{
        "ESX":{
            "host_name_filter":"%clus-esx-n%",
            "service_name_filter":"Esx-Status"
        },
        "XIVO":{
            "host_name_filter":"%xivo%",
            "service_name_filter":"Ping"
        }
    },
    "counters":{
        "totalservices":true,
        "totalhosts":true,
        "groups":true
    },
    "formatting":{
        "groups_global_msg":"Nothing special on groups",
        "host_service_separator":"/",
        "display_details":true
    }
}
  • mode (obligatoire) : valeurs possibles: ‘sqlmatching’ or ‘exactmatch’. Liés au format du bloc “selection” ;
  • selection (obligatoire) : Lorsque le mode ‘sqlmatching’ est choisis, on va alors définir les filtres comme ci-dessus (host/service_name_filter). Au contraire, si l’on utilise le mode “exactmatch”, alors on passe des clés valeurs correspondant à la correspondant host/service. (Exemple avec deux aggregation logqies “groups” esx-status/load ci-dessous)
"selection":{
    "esx-status":{
        "esx-n1":"Esx-Status",
        "esx-n2":"Esx-Status",
        "esx-n3":"Esx-Status"
    },
    "esx-load":{
        "esx-n1":"Esx-Memory",
        "esx-n2":"Esx-Memory",
        "esx-n3":"Esx-Memory",
        "esx-n1":"Esx-Cpu",
        "esx-n2":"Esx-Cpu",
        "esx-n3":"Esx-Cpu"
    }
},
  • counters (optionnel) : Contiens trois booléens, à configurer en ‘true’ ou ‘false’ selon les compteurs que l’on veut utiliser et considérer (totalservices, totalhosts, groups).
  • formatting (optionnel) : Contiens trois clés/valeurs, ‘groups_global_msg’ pour définir un statut global lorsque tout va bien, ‘host_service_separator’ pour choisir le séparateur entre le nom de l’hôte et celui du service dans les éléments de l’output, ‘display_details’ afin de définir si le plugin doit détailler les hôtes et/ou services en erreur dans l’output étendu (mode verbose)

Ligne de commande, output, seuils

Exemple de commande :

/usr/lib/nagios/plugins/centreon_plugins.pl --plugin database::mysql::plugin --dyn-mode apps::centreon::sql::mode::multiservices --host localhost --username centreon --password c3ntreon --config-file '/root/global-services.json' --verbose

Example de sortie :

OK: Hosts state summary [up:4][down:2][unreachable:0] - Services state summary [ok:4][warning:0][critical:2][unknown:0] - Nothing special on groups |

Données de performance :

'total_host_up'=4;;;0; 'total_host_down'=2;;;0; 'total_host_unreachable'=0;;;0; 'total_host_ok'=4;;;0; 'total_host_warning'=0;;;0; 'total_host_critical'=2;;;0; 'total_host_unknown'=0;;;0; 'host_up_ESX'=4;;;0; 'host_down_ESX'=0;;;0; 'host_unreachable_ESX'=0;;;0; 'service_ok_ESX'=4;;;0; 'service_warning_ESX'=0;;;0; 'service_critical_ESX'=0;;;0; 'service_unknown_ESX'=0;;;0; 'host_up_XIVO'=0;;;0; 'host_down_XIVO'=2;;;0; 'host_unreachable_XIVO'=0;;;0; 'service_ok_XIVO'=0;;;0; 'service_warning_XIVO'=0;;;0; 'service_critical_XIVO'=2;;;0; 'service_unknown_XIVO'=0;;;0;

Mode verbeux (avec l’affichage détaillé d’activé) :

Group 'ESX': HOSTS: [up: 4 (clus-esx-n1.com - clus-esx-n2.com - clus-esx-n3.com - clus-esx-n4.com)][down: 0][unreachable: 0] -      SERVICES: [ok: 4 (clus-esx-n1.com/Esx-Status - clus-esx-n2.com/Esx-Status - clus-esx-n3.com/Esx-Status - clus-esx-n4.com/Esx-Status)][warning: 0][critical: 0][unknown: 0]
Group 'XIVO': HOSTS: [up: 0][down: 2 (srvi-xivo-n1 - srvi-xivo-n2)][unreachable: 0] - SERVICES: [ok: 0][warning: 0][critical: 2 (srvi-xivo-n1/Ping - srvi-xivo-n2/Ping)][unknown: 0]

Voici la manière de définir les seuils (total_statut pour les warning/critical-total et définition de l’instance et du décompte du nombre de statut pour les seuils par “groupes logiques”) :

--critical-total '%{total_down} > 4' --critical-groups '%{instance} eq 'ESX' && %{unknown} > 5'

NSClient

Vous pouvez superviser des systèmes Windows/Linux via l’API Rest de NSClient. Les commandes et arguments sont les mêmes que via NRPE (veuillez lire la documentation NSClient pour plus d’informations) :

$ perl centreon_plugins.pl --plugin=apps::nsclient::restapi::plugin --mode=query --hostname="10.30.2.10" --port=443 --legacy-password=centreon --command=check_drivesize --arg="drive=*" --arg="perf-config=used(unit:B)used %(ignored:true)" --arg="filter=type = 'fixed' and name not regexp '.*yst.*'" --arg="warning=total_used>80%" --arg="critical=total_used>90%"
OK All 2 drive(s) are ok | '\\?\Volume{7cd2d555-9868-11e7-8199-806e6f6e6963}\ used'=289468416.000B;293598003.000;330297753.000;0.000;366997504.000 'C:\ used'=23285907456.000B;42654390681.000;47986189516.000;0.000;53317988352.000