Les RegEx ou plus précisément les Expressions Régulières sont utilisées sans modération avec les plugins Centreon. Ce tutoriel a été réalisé dans un but didactique pour vous démontrer la puissance des RegEx. Les RegEx vont nous servir à créer des modèles de caractères afin de filtrer des chaînes pour les besoins de paramétrage des plugins Centreon. Je vais utiliser des schémas et un maximum d'exemples pour vous faire aimer les RegEx 😉!
1 Les RegEx simples
Pour commencer, nous découvrirons les RegEx simples.
Voici la liste des exemples des RegEx simples.
-
Caractère de début de chaîne : ^
- Le caractère ^ représente le début d'une chaîne de caractère. Il sera souvent utilisé pour les noms des filesystem ou des interfaces réseaux par exemple.Exemple storage
/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^/var/lib' --name --regexp --display-transform-src='' --display-transform-dst='' --warning-usage='80' --critical-usage='90' --verbose --filter-perfdata='storage.space|used|free'
Résultat, tous les filesystem commençant par /var/libOK: All storages are ok | 'used_/var/lib/centreon-broker'=33800192B;0:4286578688;0:4822401024;0;5358223360 'used_/var/lib/mysql'=8530968576B;0:17171480576;0:19317915648;0;21464350720 'used_/var/lib/centreon'=888238080B;0:8581545984;0:9654239232;0;10726932480 Storage '/var/lib/centreon-broker' Usage Total: 4.99 GB Used: 32.23 MB (0.63%) Free: 4.96 GB (99.37%) Storage '/var/lib/mysql' Usage Total: 19.99 GB Used: 7.95 GB (39.74%) Free: 12.05 GB (60.26%) Storage '/var/lib/centreon' Usage Total: 9.99 GB Used: 847.09 MB (8.28%) Free: 9.16 GB (91.72%)
Utilisé avec le caractère fin de chaine $, il permet de rechercher une chaine exacte.Exemple storage/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^/var/lib/mysql$' --name --regexp --display-transform-src='' --display-transform-dst='' --warning-usage='80' --critical-usage='90' --verbose --filter-perfdata='storage.space|used|free'
Exemple interface réseau/usr/lib/centreon/plugins/centreon_h3c.pl --plugin=network::h3c::snmp::plugin --mode=interfaces --host=192.168.1.151 --snmp-version=2c --snmp-community='public' --warning-in-traffic=50 --critical-in-traffic=70 --warning-out-traffic=50 --critical-out-traffic=70 --interface='^Ethernet1/0/2$' --name --add-traffic --add-status --nagvis-perfdata
-
Caractère de fin de chaîne : $
- Le caractère $ représente la fin d'une chaîne de caractère. Il sera souvent utilisé de concert avec le caractère ^ de début de chaîne pour représenter une chaîne exacte.Exemple storage
/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='backup$' --name --regexp
Résultat, un seul filesystem finissant par backupOK: Storage '/var/cache/centreon/backup' Usage Total: 4.99 GB Used: 32.22 MB (0.63%) Free: 4.96 GB (99.37%) | 'count'=1;;;0; 'used'=33783808B;;;0;5358223360
-
Caractère OU : |
- Le caractère | ( barre vertical ou pipe ) permet de d'ajouter plusieurs occurrences. On pourra utiliser ce caractères avec les autres vu précédemment.Exemple service windows
usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.88 --snmp-version='2c' --snmp-community='public' --service='$spooler|$spouleur' --regexp --critical=1: OK: All service states are ok |
Exemple storage/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^/var/lib' --name --regexp --display-transform-src='' --display-transform-dst='' --warning-usage='80' --critical-usage='90' --verbose --filter-perfdata='storage.space|used|free'
2 les ensembles de caractères
Continuons avec les ensembles de caractères.
Vous trouverez les exemples ci-dessous.
-
Ensemble inclus : [ ]
- Les ensembles de caractère permet de réaliser des recherches plus complexes. Tous les caractères compris entre le crochets seront acceptés pour la recherche. Ainsi la RegEx suivante :
buts|bats|bits
pourra être remplacé par cette RegExb[uai]ts
Exemple storage/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='/var/l[io]' --name --regexp --verbose
Résultat, tous les filesystem commençant par /var/li* ou /var/lo*OK: All storages are ok | 'count'=4;;;0; 'used_/var/lib/centreon-broker'=33800192B;;;0;5358223360 'used_/var/lib/mysql'=8775528448B;;;0;21464350720 'used_/var/lib/centreon'=896962560B;;;0;10726932480 'used_/var/log'=257449984B;;;0;10726932480 Storage '/var/lib/centreon-broker' Usage Total: 4.99 GB Used: 32.23 MB (0.63%) Free: 4.96 GB (99.37%) Storage '/var/lib/mysql' Usage Total: 19.99 GB Used: 8.17 GB (40.88%) Free: 11.82 GB (59.12%) Storage '/var/lib/centreon' Usage Total: 9.99 GB Used: 855.41 MB (8.36%) Free: 9.15 GB (91.64%) Storage '/var/log' Usage Total: 9.99 GB Used: 245.52 MB (2.40%) Free: 9.75 GB (97.60%)
-
Ensemble exclus : [^ ]
- L'ensemble exclus est le contraire de l'ensemble inclus.Exemple storage
/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='/var/l[^i]' --name --regexp --verbose
Résultat, on excluera tout les filesystem commençant par /var/li*OK: Storage '/var/log' Usage Total: 9.99 GB Used: 245.50 MB (2.40%) Free: 9.75 GB (97.60%) | 'count'=1;;;0; 'used'=257421312B;;;0;10726932480 Storage '/var/log' Usage Total: 9.99 GB Used: 245.50 MB (2.40%) Free: 9.75 GB (97.60%)
On peut utiliser plusieurs ensemble à la suite.Exemple storage/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='/var/[cl][^o]' --name --regexp --verbose
Résultat, on excluera tout les filesystem commençant par /var/lo* et par /var/co*OK: All storages are ok | 'count'=4;;;0; 'used_/var/cache/centreon/backup'=33783808B;;;0;5358223360 'used_/var/lib/centreon-broker'=33800192B;;;0;5358223360 'used_/var/lib/mysql'=8775528448B;;;0;21464350720 'used_/var/lib/centreon'=896962560B;;;0;10726932480 Storage '/var/cache/centreon/backup' Usage Total: 4.99 GB Used: 32.22 MB (0.63%) Free: 4.96 GB (99.37%) Storage '/var/lib/centreon-broker' Usage Total: 4.99 GB Used: 32.23 MB (0.63%) Free: 4.96 GB (99.37%) Storage '/var/lib/mysql' Usage Total: 19.99 GB Used: 8.17 GB (40.88%) Free: 11.82 GB (59.12%) Storage '/var/lib/centreon' Usage Total: 9.99 GB Used: 855.41 MB (8.36%) Free: 9.15 GB (91.64%)
-
Ensemble préconçu : .
- Le point est un ensemble préconçu qui représente n'importe quel caractère. Avec les plugins Centreon, il est souvent utilisé conjointement avec quantifieur préconçus *. Avec celui-ci il indique que l'on prendra toutes les recherches possibles.Exemple pour le service windows en français Registre à distance
/usr/lib/centreon/plugins/centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=192.168.1.175 --snmp-version='2c' --snmp-community='maison72' --service='Registre . distance' --regexp --verbose OK: All service states are ok | Service 'Registre � distance' match (pattern: 'Registre . distance') [operating state = active, installed state = installed] Service pattern 'Registre . distance': service list Registre � distance
le point remplace le caractère accentué à, si nous avions laissé le caractère accentué, le plugin ne fonctionnerait pas./usr/lib/centreon/plugins/centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=192.168.1.175 --snmp-version='2c' --snmp-community='maison72' --service='Registre à distance' --regexp --verbose OK: All service states are ok | Service pattern 'Registre à distance': service list
Malgré le retour du plugin à OK, le plugin n'a pas trouvé l'information dans la MIB SNMP.
3 les RegExp complexes
Voici un petit exemple, parmi les nombreuses solutions, de quelques RegEx complexes
Vous trouverez les exemples ci-dessous.
-
Regroupement
- Les parenthèse permettent de regrouper des motifs (chaîne de caractère) afin d'effectuer une même recherche.Exemple storage
/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='(lib|log)' --name --regexp --verbose
Résultat, tous les filesystem contenant lib et logOK: All storages are ok | 'count'=4;;;0; 'used_/var/lib/centreon-broker'=33800192B;;;0;5358223360 'used_/var/lib/mysql'=8792289280B;;;0;21464350720 'used_/var/lib/centreon'=896962560B;;;0;10726932480 'used_/var/log'=242814976B;;;0;10726932480 Storage '/var/lib/centreon-broker' Usage Total: 4.99 GB Used: 32.23 MB (0.63%) Free: 4.96 GB (99.37%) Storage '/var/lib/mysql' Usage Total: 19.99 GB Used: 8.19 GB (40.96%) Free: 11.80 GB (59.04%) Storage '/var/lib/centreon' Usage Total: 9.99 GB Used: 855.41 MB (8.36%) Free: 9.15 GB (91.64%) Storage '/var/log' Usage Total: 9.99 GB Used: 231.57 MB (2.26%) Free: 9.76 GB (97.74%)
On peut associer le caractère de début de chaîne comme cet exemple./usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^(/run|/sys)' --name --regexp --verbose
Résultat, tous les filesystem commençant par /run et /sysOK: All storages are ok | 'count'=2;;;0; 'used_/run'=134770688B;;;0;1492017152 'used_/sys/fs/cgroup'=0B;;;0;1492017152 Storage '/run' Usage Total: 1.39 GB Used: 128.53 MB (9.03%) Free: 1.26 GB (90.97%) Storage '/sys/fs/cgroup' Usage Total: 1.39 GB Used: 0.00 B (0.00%) Free: 1.39 GB (100.00%)
-
Condition : Exclusion
- Ce RegEx permet d'exclure un motif. Dans les plugins Centreon, il faudra respecter un minimum de syntaxe. Le caractère débute de chaîne et le regroupement semble obligatoire pour son fonctionnement.Exemple storage
/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^(?!/var)' --name --regexp --verbose
Résultat, on excluera tout les filesystem commençant par /varOK: All storages are ok | 'count'=5;;;0; 'used_/'=4641710080B;;;0;21464350720 'used_/dev/shm'=0B;;;0;1492017152 'used_/run'=134770688B;;;0;1492017152 'used_/sys/fs/cgroup'=0B;;;0;1492017152 'used_/boot'=332738560B;;;0;1063256064 Storage '/' Usage Total: 19.99 GB Used: 4.32 GB (21.63%) Free: 15.67 GB (78.37%) Storage '/dev/shm' Usage Total: 1.39 GB Used: 0.00 B (0.00%) Free: 1.39 GB (100.00%) Storage '/run' Usage Total: 1.39 GB Used: 128.53 MB (9.03%) Free: 1.26 GB (90.97%) Storage '/sys/fs/cgroup' Usage Total: 1.39 GB Used: 0.00 B (0.00%) Free: 1.39 GB (100.00%) Storage '/boot' Usage Total: 1014.00 MB Used: 317.32 MB (31.29%) Free: 696.68 MB (68.71%)
Autre exemple sur l'argument filter-perfdata, actuellement le plugin ajoute une métrique count pas toujours pertinente./usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^/boot' --name --regexp OK: Storage '/boot' Usage Total: 1014.00 MB Used: 317.32 MB (31.29%) Free: 696.68 MB (68.71%) | 'count'=1;;;0; 'used'=332738560B;;;0;1063256064
Il est possible de supprimer cette métrique en utilisant la RegEx suivante/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^/boot' --name --regexp —filter-perfdata='^(?!count)' OK: Storage '/boot' Usage Total: 1014.00 MB Used: 317.32 MB (31.29%) Free: 696.68 MB (68.71%) | 'used'=332738560B;;;0;1063256064
-
Condition : Exclusion avec regroupement
- On peut ajouter un regroupement pour ajouter des exclusions supplémentairesExemple storage
/usr/lib/centreon/plugins//centreon_linux_snmp.pl --plugin=os::linux::snmp::plugin --mode=storage --hostname=127.0.0.1 --snmp-version='2c' --snmp-community='public' --storage='^(?!(/boot|/var))' --name --regexp --verbose
Résultat, on excluera tout les filesystem commençant par /var et /bootOK: All storages are ok | 'count'=4;;;0; 'used_/'=4641730560B;;;0;21464350720 'used_/dev/shm'=0B;;;0;1492017152 'used_/run'=134770688B;;;0;1492017152 'used_/sys/fs/cgroup'=0B;;;0;1492017152 Storage '/' Usage Total: 19.99 GB Used: 4.32 GB (21.63%) Free: 15.67 GB (78.37%) Storage '/dev/shm' Usage Total: 1.39 GB Used: 0.00 B (0.00%) Free: 1.39 GB (100.00%) Storage '/run' Usage Total: 1.39 GB Used: 128.53 MB (9.03%) Free: 1.26 GB (90.97%) Storage '/sys/fs/cgroup' Usage Total: 1.39 GB Used: 0.00 B (0.00%) Free: 1.39 GB (100.00%)
4 Protéger les caractères spéciaux
Il est indispensable de protéger certains caractères spéciaux comme les parenthèses. Exemple avec le plugin suivant :
usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.88 --snmp-version='2c' --snmp-community='public' --service='Appel de proc.dure distante \(RPC\)' --regexp --critical=1:
Pour éviter que le plugin interprète la chaîne (RPC) comme un regroupement RegEx, on protège les parenthèses par un anti-slash. Attention, dans l'IHM Centreon, il faudra protéger l'anti-slash par un autre anti-slash, voir la page des services Windows. Ce tutoriel est terminé, il reste encore beaucoup d'autres possibilités, n'hésitez pas à me contacter pour l'améliorer.