Voici un dépoussiérage de la supervision de scénario Web avec certaines préconisations Centreon. Nous allons dédier un poller Centreon avec Sélénium. L'avantage de ce montage est d'éviter d'augmenter le temps d'exécution des services sur les pollers existants. Nous utiliserons une distribution Debian Stretch car il n'y aura pas de restriction avec la version du PHP contrairement avec un serveur Central. Les nouveaux plugins Centreon seront mis aussi à contribution pour utiliser les nouveaux scénarios en XML du plugin Katalon.
1 Configuration du poller Selenium
Nous utiliserons une ISO debian 9 en 64 bits équipée d'un serveur SSH, de la version open source de java, du serveur virtuel X xvfb et du navigateur iceweasel (firefox). Attention, n'hésitez pas à augmenter la RAM disponible, Selenium tourne sous Java, donc très gourmand en mémoire.
1.1 Installation du poller
Pour installer notre poller Centreon, nous utiliserons pour cet exemple la procédure d'installation automatisée que j'ai réalisée. Vous pouvez utiliser aussi le dépôt Centreon pour Debian ou si vous êtes plus courageux, la procédure d'installation des sources. Installez git.
apt-get install git-core -y
Récupérez le script sur mon GitHub et exécutez-le.
git clone https://github.com/kermith72/auto_install.git cd auto_install/debian9/ bash centreon_poller.sh
L'installation doit se dérouler comme ceci :
================| Centreon Poller Install details v 1.16 |============= Clib : 1.4.2 Connector : 1.1.3 Engine : 1.8.1 Plugin : 2.2 Broker : 3.0.14 Centreon : 2.8.24 Install dir: /usr/share Source dir : /usr/local/src ====================================================================== Step1 => repo non-free on Stretch Install [ OK ] Step2 => Clib install [ OK ] Step3 => Centreon Perl and SSH connectors install [ OK ] Step4 => Centreon Engine install [ OK ] Step5 => Monitoring plugins install [ OK ] Step6 => Centreon plugins install [ OK ] Step7 => Centreon Broker install [ OK ] Step8 => Centreon template generation [ OK ] Step9 => Centreon web interface install [ OK ] Step10 => Post install [ OK ] Go to Central Server for configuration
Attention, avec cette installation, tous les plugins sont installés dans /usr/lib/centreon/plugins. Vous devrez adapter votre configuration Centreon en fonction de ce paramètre.
1.2 Installation de selenium
Nous allons continuer avec Sélénium
apt-get install openjdk-8-jre xvfb iceweasel libtest-www-selenium-perl -y
Vérifiez la version de firefox, elle ne doit pas être supérieure à la version 52
dpkg -l | grep firefox ii firefox-esr 52.9.0esr-1~deb9u1 amd64 Mozilla Firefox web browser - Extended Support Release (ESR)
Créons un utilisateur selenium
useradd selenium -s /bin/bash -d /home/selenium -m selenium
Ensuite nous devrons télécharger le moteur du serveur Selenium (archive jar) dans le dossier /opt/selenium créé préalablement. Pour récupérer l'archive, visitez le site de Selenium. Pour faciliter la maintenance, créez un lien symbolique.
mkdir /opt/selenium chown selenium: /opt/selenium cd /opt/selenium wget http://selenium-release.storage.googleapis.com/2.52/selenium-server-standalone-2.52.0.jar ln -s selenium-server-standalone-2.52.0.jar selenium-server-standalone.jar
On peut vérifier le bon fonctionnement du serveur selenium
cd /opt/selenium java -jar selenium-server-standalone.jar
Vous devriez avoir ces messages suivants
15:16:51.393 INFO - Launching a standalone Selenium Server 15:16:51.456 INFO - Java: Oracle Corporation 25.171-b11 15:16:51.457 INFO - OS: Linux 4.9.0-3-amd64 amd64 15:16:51.507 INFO - v2.52.0, with Core v2.52.0. Built from revision 4c2593c 15:16:51.667 INFO - Driver provider org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS}] does not match the current platform LINUX 15:16:51.672 INFO - Driver provider org.openqa.selenium.edge.EdgeDriver registration is skipped: registration capabilities Capabilities [{browserName=MicrosoftEdge, version=, platform=WINDOWS}] does not match the current platform LINUX 15:16:51.673 INFO - Driver class not found: com.opera.core.systems.OperaDriver 15:16:51.674 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered 15:16:51.676 INFO - Driver provider org.openqa.selenium.safari.SafariDriver registration is skipped: registration capabilities Capabilities [{browserName=safari, version=, platform=MAC}] does not match the current platform LINUX 15:16:51.843 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 15:16:51.844 INFO - Selenium Server is up and running
Quittez l'application (CTRL+C). Nous allons créer les scripts pour les services. Editons le premier service xvfb.
vi /etc/systemd/system/xvfb.servicesaisir les lignes suivantes
[Unit] Description=X Virtual Frame Buffer Service After=network.target [Service] Type=simple User=selenium ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24 [Install] WantedBy=multi-user.target
Editez le deuxième service selenium.
vi /etc/systemd/system/selenium.servicesaisir les lignes suivantes
[Unit] Description=Selenium After=xvfb.target [Service] Type=simple User=selenium PIDFile=/var/spool/selenium/pid/master.pid EnvironmentFile=-/etc/sysconfig/network Environment=DISPLAY=:99 Environment=DBUS_SESSION_BUS_ADDRESS=/dev/null ExecStart=/usr/bin/java -Dselenium.LOGGER=/opt/selenium/selenium.log -jar /opt/selenium/selenium-server- standalone.jar ExecStop=kill `cat /var/spool/selenium/pid/master.pid` [Install] WantedBy=multi-user.target
Activez les services
systemctl enable xvfb systemctl enable selenium
Démarrez les services.
systemctl start xvfb systemctl start selenium
Vérifiez que selenium écoute sur le port 4444, il faudra installer le paquet net-tools
netstat -an | grep 4444 tcp6 0 0 :::4444 :::* LISTEN
Les bonnes pratiques de Selenium préconisent la désactivation de la mise à jour automatique de Firefox pour éviter la formation de processus zombie lors de l'exécution des tests. Dans notre cas sous Debian, ce problème est réglé puisque les mises à jour sont réalisées par le processus apt-get.
1.3 Vérification du serveur Selenium
Il est possible de tester le fonctionnement du serveur Selenium en saisissant l'url suivante
http://[ip serveur selenium]:4444/wd/hub/static/resource/hub.html
Vous devriez visualiser l'écran suivant.
Il est possible de vérifier la création de session. Cliquez sur Create Session
Au bout de quelques secondes, une session est créée
1.4 Test du plugin Centreon
Préparons un dossier pour stocker les scénarios.
mkdir /var/lib/centreon_waa chown centreon-engine:centreon-engine /var/lib/centreon_waa
Créer un scénario simple avec le plugin katalon. Notre exemple sera l'ouverture de l'interface web de Centreon
Ensuite cliquez sur le bouton Export et choisissez le format XML.
Copiez les lignes et insérez-les dans le fichier /var/lib/centreon_waa/testcentreon.xml. Nous allons tester notre scénario avec la commande suivante.
/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=apps::selenium::plugin --mode=scenario-katalon --selenium-hostname=127.0.0.1 --selenium-port=4444 --directory=/var/lib/centreon_waa --scenario=testcentreon
Le serveur selenium étant sur le poller nous indiquons la boucle locale avec la variable --selenium-hostname. Le scénario doit être mentionné sans l'extension. Le résultat est le suivant.
OK: Successful steps : 6/6 (100.00%), Failed steps : 0/6 (0.00%), Total execution time : 1910.89 ms - All steps state are ok | 'successful'=6;;;0;6 'successful_prct'=100.00%;;;0;100 'failed'=0;;;0;6 'failed_prct'=0.00%;;;0;100 'time_scenario'=1910.89ms;;;0; 'time_step_1'=1315.33ms;;;0; 'time_step_2'=57.94ms;;;0; 'time_step_3'=34.42ms;;;0; 'time_step_4'=436.25ms;;;0; 'time_step_5'=29.29ms;;;0; 'time_step_6'=33.21ms;;;0;
Nous avons le nombre d'étape et le temps d'exécution. Vous pouver ajoutez des seuils --warning-time-scenario et --critical-time-scenario. Il y a aussi une option --debug qui peut être utile.
/usr/lib/centreon/plugins/centreon_plugins.pl --plugin=apps::selenium::plugin --mode=scenario-katalon --selenium-hostname=127.0.0.1 --selenium-port=4444 --directory=/var/lib/centreon_waa --scenario=testcentreon --debug OK: Successful steps : 6/6 (100.00%), Failed steps : 0/6 (0.00%), Total execution time : 846.64 ms - All steps state are ok | 'successful'=6;;;0;6 'successful_prct'=100.00%;;;0;100 'failed'=0;;;0;6 'failed_prct'=0.00%;;;0;100 'time_scenario'=846.64ms;;;0; 'time_step_1'=629.99ms;;;0; 'time_step_2'=36.16ms;;;0; 'time_step_3'=66.30ms;;;0; 'time_step_4'=27.88ms;;;0; 'time_step_5'=44.48ms;;;0; 'time_step_6'=39.13ms;;;0; Step '1' [command: open, target: http://172.16.209.80/centreon/index.php] state is 'OK', Execution time : 629.99 ms Step '2' [command: click, target: name=useralias] state is 'OK', Execution time : 36.16 ms Step '3' [command: type, target: name=useralias, value: admin] state is 'OK', Execution time : 66.30 ms Step '4' [command: click, target: name=password] state is 'OK', Execution time : 27.88 ms Step '5' [command: type, target: name=password, value: password] state is 'OK', Execution time : 44.48 ms Step '6' [command: click, target: name=submitLogin] state is 'OK', Execution time : 39.13 ms
1.5 Intégration dans l'IHM de Centreon
Vous avez intégré votre poller selenium dans votre Central. Nous allons maintenant passer à la configuration des commandes et templates. Commençons par la commande App-Selenium-Scenario-katalon
La commande sera la suivante :
$CENTREONPLUGINS$/centreon_plugins.pl --plugin=apps::selenium::plugin --mode=scenario-katalon --selenium-hostname=$HOSTADDRESS$ --selenium-port=$_HOSTSELENIUMPORT$ --directory=$_HOSTSCENARIODIR$ --scenario=$_SERVICESCENARIONAME$ --timeout=$_SERVICETIMEOUT$ --warning-time-scenario=$_SERVICEWARNING$ --critical-time-scenario=$_SERVICECRITICAL$
Nous créons le template de service App-Selenium-Scenario-Katalon
Finissons par le template d'hôte App-Selenium-Katalon qui contiendra le service App-Selenium-Scenario-Katalon. Il faudra ajouter deux macros SCENARIODIR et SELENIUMPORT.
N'oubliez pas la relation.
Maintenant, il nous reste à créer notre hôte avec le scénario. Ajoutez un hôte.
Modifiez le service pour l'adapter au scénario. Si vous avez d'autres scénarios à rajouter, il suffira d'ajouter un service.
Mes seuils sont très hauts pour pallier le manque de puissance de mes machines ;). Appliquez la configuration et après quelques secondes, vous pouvez visualiser le résultat.