Rôle | Nom |
---|---|
Créateur | Floppy84 |
La supervision applicative Sikuli consiste à venir tester le ressenti utilisateur sur les applications métiers. Pour cela un script est charger de mener des actions de tests tels que le ferait un user devant son écran.
C’est assez simple en soit.
Il existe un outil appelé SIKULI qui est capable de faire de la reconnaissance screen “ecran”. Cet outil permet de développer des scripts permettant de mener des actions de cliques, de saisie de texte, de reconnaissance d’affichage etc … en bref tout ce qu’un user pourrait faire est scriptable dans SIKULI “ et super facilement”.
L’avantage c’est que Sikuli permet de faire des scripts assez facilement m^me pour des personnes comme moi (non dev) l’outil permet de scripter en respectant une algorithmie simple et des captures d’écrans.
Une fois ce script développé il convient de l’interfacer avec Shinken.
Pour cela on utilise check_nrpe.
Nrpe est un agent responsable de réaliser les actions de vérification à la place de snmp. Nrpe permet de soulager la supervision et de faire faire les actions de vérification par le serveur distant.
En gros le fonctionnement est le suivant:
Le poller de la supervision va lancer un check_nrpe sur la machine distante avec l’instruction du script à faire executer par l’agent NRPE (Par exemple Check_Neo). Ensuite NRPE prend le relais et vient exécuter le script demandé check_neo qui correspond dans le fichier de configuration NSc.ini à check_neo.bat Dans ce fichier .bat il y a les instructions d’éxécution du script SIKULI
Une fois installer, sachez qu’il ne faut pas lancer le service nsclient++ sinon les instructions ne parviennent pas jusqu’a l’interpreteur. Ensuite il vous faudra configuer nsclient en éditant le fichier NSC.INI
Il faut ajouter tous les modules suivant dans le fichier en tout début:
[modules] NRPEListener.dll NSClientListener.dll FileLogger.dll CheckSystem.dll CheckDisk.dll CheckEventLog.dll CheckHelpers.dll CheckExternalScripts.dll
Il vous faudra définit la machine ayant droit a exécuter le script
allowed_hosts=monserveurdesup
Dans la section NRPE il vous faudra editer:
Le port NRPE :
[NRPE] ;# NRPE PORT NUMBER ; This is the port the NRPEListener.dll will listen to. port=5666 string_lenght=18096 Le timeout: command_timeout=180 socket_timeout=180
Dans le section external script il vous faudra y ajouter les commandes a exécuter par NRPE.
[External Scripts] command_timeout=120 check_neo=scripts\check_neo.bat
Ici on voit que la commande check_neo execute le script check_neo.bat placé dans c:\Program Files\NSClient++\scripts\
Il faudra donc installer les scripts d’exécution .BAT et d’appel dans le dossier scripts
c:\Program Files\NSClient++\scripts\
Exemple de contenu du fichier d’exécution :
Seul le chemin du script Sikuli doit être modifié. “D:\neo-login.sikuli”
Dans la logique Shinken appel check_nrpe =⇒ avec l’instruction de lancer la commande check_neo.
Ensuite Nrpe reçoit l’instruction et sait qu’il faut qu’il lance la commande check_neo.
Il va donc chercher dans le fichier de conf NSC.INI la ligne correspondant à la commande Check_neo.
Il sait de ce fait qu’il faut qu’il lance scripts\check_neo.bat
Ce .bat lance le scipt Sikuli D:\neo-login.sikuli qui est responsable du test de l’application.
Une fois le test applicatif terminé sikuli renvoi l’information d’état et de performance à NRPE qui le retourne à son tour à Nagios.
Il est nécessaire de faire exécuter l’application Nsclient++(win32,test) Il faut donc prévoir de mettre l’exécutable dans le démarrage système.
Ne jamais démarrer Nsclient en tant que service
Ici il s’agit d’un script qui fait juste une action de login sur mon portail en gros il vous suffit de modifier les screenshots pour que ca fonctionne chez vous sur votre site
évidemment ici vous ne voyez pas mes screenshots il apparaissent uniquement dans l’interface de dev de Sikuli
Copiez le contenu de mon script dans sikuli et remplacez chacune de mes captunes .png par les vôtres “ avec l’outil photo de sikuli”
def status(err_code): if err_code == 0: fin_test=time.time() difftime="%.1f"%(fin_test-debut_test) logfile.write(time.strftime('%d/%m/%y %H:%M:%S',time.localtime())+" [INFO] OK: Durée d'execution du test =>"+str(difftime)+"s"+el) logfile.close fichier = open(mydir +"/fichier.txt", "w") closeApp ("Mozilla Firefox") fichier.write("libre\n") fichier.close() print ("OK:"+"|"+"duree_lancement="+str(difflancement)+" duree_execution="+str(difftime)) sys.exit(err_code) exit(err_code) elif err_code == 1: fin_test=time.time() difftime="%.1f"%(fin_test-debut_test) logfile.write(time.strftime('%d/%m/%y %H:%M:%S',time.localtime())+" [INFO] Warning: Superpostion du scripts de test =>"+str(difftime)+"s"+" erreur N°"+str(err_code)+el) logfile.close print ("WARNING:"+"|"+str(difftime)) sys.exit(1) exit(err_code) else: fin_test=time.time() difftime="%.1f"%(fin_test-debut_test) closeApp("Mozilla Firefox") print ("CRITICAL:"+"|"+str(difftime)) logfile.write(time.strftime('%d/%m/%y %H:%M:%S',time.localtime())+" [ERROR] CRITICAL: Durée d'execution du test =>"+str(difftime)+"s"+" erreur N°"+str(err_code)+el) logfile.close fichier = open(mydir + "/fichier.txt", "w") fichier.write("libre\n") fichier.close() sys.exit(2) closeApp ("Mozilla Firefox") exit(err_code)
Dans Shinken il suffit de configurer un nouveau service sur un hote dummy virtuel puis d’y reporter l’équivalent des informations suivantes:
define service{
service_description neo-login-Sikuli use generic-service host_name Neo-Application check_command check_neo_login business_impact 2 normal_check_interval 11 service_dependencies mamachinedesupervisionapplicative,nrpe retry_interval 1 ; Re-check the service every one minutes until a hard state can be determined max_check_attempts 4 }
Il faudra aussi creer dans le fichier command.cfg la commande en question :
define command { command_name check_neo_login command_line $PLUGINSDIR$/check_nrpe -H ipdemamachinesupapplicative -c "$check_neo" -t 120} Après l'option -H il faut spécifier l'ip de la vm supervision applicative et après le -c le nom de la commande que vous avez rentré dans le fichier NSC.INI et qui fait référence à votre script ici c'est check_neo
Les scripts de check applicatif sont ordonnancés par Shinken. Seulement il peut arriver que Shinken exécute en même temps plusieurs scripts lorsque se produit une erreur de check ou autre “ rechargement de sup ou forcage ”
Pour éviter tout plantage du serveur de test applicatif, il y a des locks qui sont placés dans les scripts Sikuli pour éviter la superposition des checks.
Sur la supervision applicative exemple ces fichiers se situent sur le bureau du serveur, dans le dossier Sikuli. Il existe deux fichiers :
Le fichier =⇒ fichier.txt =⇒ qui contient l’état du serveur applicative ( libre ou occupe)
le fichier =⇒ lock.txt =⇒ qui contient une série de chiffres (3 ou 33 ) =⇒ ce fichier sert à certains script à vérifier depuis combien de temps le serveur est verrouillé ( en status occupe)