Voici un petit tuto pour vous aider dans l'utilisation du mode service du plugin centreon_windows_snmp.pl.
1 le plugin centreon_windows_snmp.pl
Tout d’abord nous allons explorer les paramètres de ce mode en utilisant la commande help en ligne de commande. Nous ferons l'impasse sur les paramètre SNMP qui font l'objet d'autres articles. Voici les principaux paramètres :
--warning
Seuil warning (nombre de service). Ce seuil sera utile lorsqu'il y aura plusieurs services à superviser dans la même commande.
--critical
Seuil critique (nombre de service). Le seuil le plus utilisé. Généralement sa valeur sera 1:
--service
Nom du service, normalement c'est la colonne Nom de la fenêtre service Windows. Nous verrons que l'on peut filtrer avec des expressions régulières. Cette option peut être répétée pour superviser plusieurs services à la fois.
--regexp
On utilisera cette option pour utiliser les motifs des expressions régulières.
--state
Etat du service. Nous pouvons avoir l'état active et paused.
--warning
Seuil warning (nombre de service). Ce seuil sera utile lorsqu'il y aura plusieurs services à superviser dans la même commande.
--critical
Seuil critique (nombre de service). Le seuil le plus utilisé. Généralement sa valeur sera 1:
--service
Nom du service, normalement c'est la colonne Nom de la fenêtre service Windows. Nous verrons que l'on peut filtrer avec des expressions régulières. Cette option peut être répétée pour superviser plusieurs services à la fois.
--regexp
On utilisera cette option pour utiliser les motifs des expressions régulières.
--state
Etat du service. Nous pouvons avoir l'état active et paused.
1.1 Visualiser les services Windows en ligne de commande
Le plugin permet la visualisation des services Windows actif sur un serveur. Nous allons utiliser la ligne de commande, prenez l'habitude de vous connecter en tant que centreon-engine. Même si le mode service n'utilise pas de fichier temporaire dans le dossier centplugins, c'est une bonne pratique qui vous évitera quelques soucis de droit sur ces fichiers temporaires. Voici la ligne de commande :
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='.*' --regexp --verbose
Nous utilisons une expression régulière constitué d’une chaine de caractères appelé motifs. Le premier caractère remplace n’importe quel caractère et le second est un quantificateur qui accepte zéro ou plusieurs fois donc n’importe quelle chaîne de caractère. Il faut ajouter l’option regexp et verbose pour afficher tous les services actifs. Voici un extrait de résultat :
OK: All service states are ok |
Service 'Server' match (pattern: '.*') [operating state = active, installed state = installed]
Service 'Diagnostic Policy Service' match (pattern: '.*') [operating state = active, installed state = installed]
………….
Service pattern '.*': service list Server, Diagnostic Policy Service, Plug and Play, Network Store Interface Service,…..
1.2 Premier test
Pour réaliser notre premier test, nous utiliserons le spouleur d'impression sur un serveur Windows version US.
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='.*' --regexp --verbose | grep "Spooler"
Voici la ligne recherchée
Service 'Print Spooler' match (pattern: '.*') [operating state = active, installed state = installed]
Attention le service doit être démarré pour le découvrir sinon l’agent SNMP ne retourne aucune valeur. Si vous démarrer le service, il faut attendre que l’agent SNMP réalise une mise à jour de sa MIB, cela peut prendre 1 minutes. Pour accélérer le processus, redémarrez l’agent SNMP.
Le nom du service est normalement celui affiché dans la colonne Name de la liste des services Windows.
Le nom du service est normalement celui affiché dans la colonne Name de la liste des services Windows.
Attention, il faudra respecter la casse donc pour superviser ce service, voici la ligne de commande :
/usr/lib/centreon/plugins/centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='Print Spooler' --warning= --critical=1:
OK: All service states are ok |
le seuil critical 1: est nécessaire pour détecter l’état du service. Pour le seuil, il faut comprendre que l’état devient critique si le seuil est plus petit que 1. Lorsque le service est à l’arrêt voici le message
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='Print Spooler' --warning= --critical=1:
CRITICAL: Service problem 'Print Spooler' |
1.3 Configuration de Centreon
Maintenant, il est temps de configurer notre service dans Centreon. Dans l’interface, nous utiliserons le modèle OS-Windows-Service-Generic-SNMP-custom du plugin-pack windows.
Nous saisissons Print Spooler dans la macro SERVICENAME. Le service est associé à l'hôte windows. Appliquez la configuration.
Les services du serveurs Windows sont opérationnels. Si le service spooler s'arrête, vous obtiendrez un état critique de votre service.
1.4 Supervisez plusieurs service Windows avec la même commande
Vous avez la possibilité de superviser plusieurs services avec la même commande. Deux techniques vous sont proposées en fonction de vos besoins.
1.4a Utilisation de paramètres multiples
Vous voulez superviser plusieurs services ayant des noms totalement différents avec la même commande sans utiliser les expressions régulières. Il est possible d'utiliser plusieurs paramètres service. Dans cet exemple nous allons superviser le spouleur d'impression et l'assistance IP.
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='Print Spooler' --service='IP Helper' --regexp --critical=1: OK: All service states are ok |
Le seuil reste le même pour chaque service unitairement. Voici deux exemples de seuil critique avec un service et deux services arrêtés.
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='Print Spooler' --service='IP Helper' --regexp --critical=1: CRITICAL: Service problem 'Print Spooler' | /usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='Print Spooler' --service='IP Helper' --regexp --critical=1: CRITICAL: Service problem 'Print Spooler' - Service problem 'IP Helper' |
Dans l'interface Centreon, on ajoutera le deuxième paramètre dans la macro EXTRAOPTIONS comme ci-dessous :
Voici différents exemples d'état du service.
1.4b Utilisation des expressions régulières
Nous pouvons utiliser les regexp pour réaliser des opérations sur la macro SERVICENAME. Par exemple sur un serveur 2016, vous avez deux services Connected User Experiences and Telemetry et Connected Devices Platform Service.
Nous pouvons agréger ces deux services Windows sur le même service Centreon comme ceci
Nous pouvons agréger ces deux services Windows sur le même service Centreon comme ceci
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='Connected' --regexp –warning=2: --critical=1: OK: All service states are ok |
Vous remarquerez que j’ai ajouté le seuil Warning à 2: pour pouvoir détecter un des services qui serait défaillant mais le mettre en Warning. Si vous voulez un état critique seulement, il faudra mettre le seuil Critique à 2: Dans l'exemple suivant, on arrête le service Connected User Experience and Telemetry.
Voici le résultat
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='Connected' --regexp --warning=2: --critical=1: WARNING: Service problem 'Connected' |
Attention tout de même, sans délimiteur, le résultat peut-être erroné. Voici un cas, ou la recherche de la chaine Task vous donnera deux services où le mot task est trouvé.
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='.*' --regexp --verbose | grep Task
Service 'Task Scheduler' match (pattern: '.*') [operating state = active, installed state = installed]
Service 'Background Tasks Infrastructure Service' match (pattern: '.*') [operating state = active, installed state = installed]
Si vous voulez le service commençant par Task, il faut ajouter un délimiteur ^ (début) indiquant que l’on veut Task au début de la chaine.
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='^Task' --regexp --warning= --critical=1:
Si vous voulez une chaine exact comme la chaine « Print Spooler », il faudra ajouter les délimiteurs ^ (début) et $ (fin) comme ceci
/usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='^Print Spooler$' --regexp --warning= --critical=1:
Attention lorsqu’on utilise des motifs regexp, il faudra protéger les caractères pouvant être considéré comme des motifs comme les parenthèses, le point, le dollar, etc..
exemple :
usr/lib/centreon/plugins//centreon_windows_snmp.pl --plugin=os::windows::snmp::plugin --mode=service --hostname=10.0.3.18 --snmp-version='2c' --snmp-community='public' --service='^Remote Procedure Call \(RPC\)$' --regexp --critical=1:
2 La problématique de la localisation (paramètres régionaux)
Nous allons voir maintenant la problématique de l’OS Windows version FR. Nous prenons par exemple le service « Remote Procedure Call (RPC) » ou « Appel de procédure distante (RPC) en français.
Nous utilisons la commande suivante
Nous utilisons la commande suivante
/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' --regexp --critical=1: CRITICAL: Service problem 'Appel de procédure distante' |
Alors que le service existe et est fonctionnel, nous avons droit à un état CRITICAL à cause du caractère accentué qui n’est pas pris en compte. Nous devrons utiliser un motif de base, le point remplaçant n’inporte quel caractère
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' --regexp --critical=1: OK: All service states are ok |
Autre problématique, les caractères spéciaux correspondants à des motifs regexp, il faudra les protéger comme cet exemple :
/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: CRITICAL: Service problem 'Appel de proc.dure distante (RPC)' |
Nous devons protéger les parenthèses pour qu’elles soient prises comme des caractères. La protection se réalise avec des anti-slash.
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: OK: All service states are ok |
Notre plugin fonctionne sans problème, mais dans l’interface graphique vous avez droit à ceci.
Il faudra aussi protéger l’anti-slash par un autre-antislash dans l’interface graphique.
SERVICENAME = Appel de proc.dure distante \\(RPC\\)
2.1 Gérer les localisations Windows avec les modèles de services
Nous allons utiliser un modèle de service pour gérer les différents comportements des services Windows en fonction de la langue. Les expressions régulières vont nous aider pour choisir le bon nommage de service.
Nous reprenon notre exemple précédent. La version US se nomme Remote Procedure Call (RPC) et la version FR se nomme Appel de procédure distante (RPC). Notre expression régulière sera de cette forme :
^Remote Procedure Call \(RPC\)$|^Appel de proc.dure distante \(RPC\)$
et par conséquence on initialisera la macro du modèle comme ceci
Nous reprenon notre exemple précédent. La version US se nomme Remote Procedure Call (RPC) et la version FR se nomme Appel de procédure distante (RPC). Notre expression régulière sera de cette forme :
^Remote Procedure Call \(RPC\)$|^Appel de proc.dure distante \(RPC\)$
et par conséquence on initialisera la macro du modèle comme ceci
SERVICENAME = ^Remote Procedure Call \\(RPC\\)$|^Appel de proc.dure distante \\(RPC\\)$
Nota : il faudra aussi protéger les parenthères pour le service en version US pour éviter que celles-ci soient prises pour des motifs regexp.
Création du modèle OS-Windows-Service-rpc-SNMP-custom basé sur le modèle OS-Windows-Service-Generic-SNMP-custom
Création du modèle OS-Windows-Service-rpc-SNMP-custom basé sur le modèle OS-Windows-Service-Generic-SNMP-custom
Ce modèle de service sera en relation avec un modèle d’hôte Windows. Après déploiement, le service s'adaptera automatiquement pour les différents serveurs windows FR et US.
Dans un prochain tutoriel, nous verrons la supervision des services Windows avec l'agent NSClient ++