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é la 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 %)

Tip

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

Quel est l’usage de l’option --dyn-mode ?

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 ^
--link=%PERL_INSTALL_DIR%\c\bin\libcrypto-1_1-x64__.dll ^
--link=%PERL_INSTALL_DIR%\c\bin\libssl-1_1-x64__.dll ^
-M IO::Socket::SSL ^
-M Win32::Job ^
-M Email::Send::SMTP::Gmail ^
-M HTTP::ProxyPAC ^
-M JE ^
-M Tie::RefHash::Weak ^
-M XML::LibXML::SAX ^
-M Net::FTPSSL ^
-M Authen::NTLM ^
-M JSON::XS ^
-M centreon::plugins::script ^
-M centreon::plugins::backend::http::lwp ^
-M centreon::plugins::backend::http::curl ^
-M centreon::plugins::backend::http::useragent ^
-M centreon::plugins::backend::http::curlconstants ^
-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::backup::veeam::local::plugin ^
-M apps::backup::veeam::local::mode::jobstatus ^
-M apps::backup::veeam::local::mode::listjobs ^
-M apps::activedirectory::local::plugin ^
-M apps::activedirectory::local::mode::dcdiag ^
-M apps::activedirectory::local::mode::dfsrbacklog ^
-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::cmdreturn ^
-M os::windows::local::mode::ntp ^
-M os::windows::local::mode::pendingreboot ^
-M os::windows::local::mode::sessions ^
-M os::windows::local::mode::liststorages ^
-M centreon::common::powershell::windows::liststorages ^
-M storage::dell::compellent::local::plugin ^
-M storage::dell::compellent::local::mode::hbausage ^
-M storage::dell::compellent::local::mode::volumeusage ^
-M hardware::devices::safenet::hsm::protecttoolkit::plugin ^
-M hardware::devices::safenet::hsm::protecttoolkit::mode::hardware ^
-M hardware::devices::safenet::hsm::protecttoolkit::mode::components::temperature ^
-M hardware::devices::safenet::hsm::protecttoolkit::mode::components::hwstatus ^
-M hardware::devices::safenet::hsm::protecttoolkit::mode::components::memory ^
-M apps::centreon::local::plugin ^
-M apps::centreon::local::mode::downtimetrap ^
-M apps::centreon::local::mode::centreonpluginsversion ^
-M apps::hyperv::2012::local::plugin ^
-M apps::hyperv::2012::local::mode::listnodevms ^
-M apps::hyperv::2012::local::mode::scvmmintegrationservice ^
-M apps::hyperv::2012::local::mode::scvmmsnapshot ^
-M apps::hyperv::2012::local::mode::scvmmvmstatus ^
-M apps::hyperv::2012::local::mode::nodeintegrationservice ^
-M apps::hyperv::2012::local::mode::nodereplication ^
-M apps::hyperv::2012::local::mode::nodesnapshot ^
-M apps::hyperv::2012::local::mode::nodevmstatus ^
-M centreon::common::powershell::hyperv::2012::listnodevms ^
-M centreon::common::powershell::hyperv::2012::nodeintegrationservice ^
-M centreon::common::powershell::hyperv::2012::nodereplication ^
-M centreon::common::powershell::hyperv::2012::nodesnapshot ^
-M centreon::common::powershell::hyperv::2012::nodevmstatus ^
-M centreon::common::powershell::hyperv::2012::scvmmintegrationservice ^
-M centreon::common::powershell::hyperv::2012::scvmmsnapshot ^
-M centreon::common::powershell::hyperv::2012::scvmmvmstatus ^
-M apps::protocols::http::plugin ^
-M apps::protocols::http::mode::expectedcontent ^
-M apps::protocols::http::mode::response ^
-M apps::protocols::tcp::plugin ^
-M apps::protocols::tcp::mode::responsetime ^
-M apps::protocols::ftp::plugin ^
-M apps::protocols::ftp::mode::commands ^
-M apps::protocols::ftp::mode::date ^
-M apps::protocols::ftp::mode::filescount ^
-M apps::protocols::ftp::mode::login ^
-M apps::backup::veeam::local::plugin ^
-M apps::backup::veeam::local::mode::jobstatus ^
-M apps::backup::veeam::local::mode::listjobs ^
-M centreon::common::powershell::veeam::jobstatus ^
-M centreon::common::powershell::veeam::listjobs ^
-M centreon::common::powershell::wsus::computersstatus ^
-M centreon::common::powershell::wsus::updatesstatus ^
-M centreon::common::powershell::wsus::synchronisationstatus ^
-M centreon::common::powershell::wsus::serverstatistics ^
-M apps::wsus::local::plugin ^
-M apps::wsus::local::mode::computersstatus ^
-M apps::wsus::local::mode::updatesstatus ^
-M apps::wsus::local::mode::synchronisationstatus ^
-M apps::wsus::local::mode::serverstatistics ^
-M centreon::common::powershell::functions ^
--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:~1,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, renseignez alors 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 voir 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 de manière globale. 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 aggregations 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 vérifier 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 choisi, 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 à host/service. (Exemple avec deux aggregations logiques “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) : Contient 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