Le module d'exemple pour le Receiver de réception d'actions avec Worker a été modifié en V02.08.01.09, ainsi que son protocole d'installation ( En raison de la migration en Python3 de Shinken ). Si vous utilisez une version de Shinken supérieure ou égale à la V02.08.01.09, veuillez vous référer à la documentation correspondante ( Voir la page Module d'exemple pour le Receiver de réception d'actions avec Worker pour une version de Shinken inférieure à la V02.08.01.09 ( Python 2.7 ) ). Si votre version de Shinken est inférieure à la V02.08.01.09, veuillez rester sur cette documentation pour créer votre module. |
Shinken est un ensemble de démons travaillant de manière autonome pour collecter les statuts des équipements supervisés. Mais dans certains cas, Shinken ne peut pas accéder aux équipements à superviser.
Le Receiver permet alors de recevoir des informations de statuts de l’extérieur et de les transmettre aux démons concernés.
Mais comme les sources et les formats de ces informations peuvent être différente, il est nécessaire d'ajouter des modules au Receiver qui traduiront les informations reçues dans un format que Shinken comprendra.
Le module receiver-module-generic-endpoint est un module qui est utile pour servir de base au développement de vos modules de Receiver.
Il y a plusieurs manières de récolter des informations du monde extérieur :
Nous avons fait évoluer l'architecture du Receiver et de ses modules pour qu'ils puissent recevoir les données des hôtes/clusters ainsi que leurs checks associés.
Cela permet, si vous avez besoin d'un identifiant pour vous connecter sur une source de données, de le définir en tant que donnée sur l'hôte dans le Synchroniser et de le transmettre jusqu'au module de Receiver pour son utilisation.
Ce point se définit au niveau de la configuration du Receiver ( voir la page Le Receiver ).
Ce lien vous permet de récupérer l'archive contenant le module d'exemple :
Le module contenu dans l'archive fonctionnera avec une version de Shinken supérieure ou égale à la V02.08.01.09. Si vous utilisez une version de Shinken antérieure à la V02.08.01.09, veuillez vous référer à la documentation correspondante ( Voir la page Module d'exemple pour le Receiver de réception d'actions avec Worker pour une version de Shinken inférieure à la V02.08.01.09 ( Python 2.7 ) ). |
Dans le dossier receiver-module-generic-endpoint de l'archive, vous trouverez :
Pour créer un nouveau module, il faut fournir trois noms :
Pour nommer le type du module ( TYPE_MODULE_SHINKEN ) les règles sont les suivantes :
Pour nommer la classe python du module ( CLASS_PYTHON ) , les règles sont les suivantes :
Pour nommer son nom dans la configuration Shinken ( NOM_MODULE_SHINKEN ) les règles sont les suivantes :
Nous recommandons les conventions de nommage suivantes pour votre module :
|
L'installation d'un module ce fait en deux étapes :
À partir de l'archive d'exemple :
Il est important de renommer TOUTES les parties du module, si votre module a encore des classes ayant le même nom que le module "generic", alors il y aura des problèmes d'import du code par le daemon et le résultat sera incorrect. |
Dans le code livré par défaut, le nom du module est ReceiverGenericEndpoint.
Pour que le module s'active, il faut :
Important : Si vous avez besoin de l'inventaire des hôtes/clusters, il faut que le module soit configuré pour recevoir les données d'inventaires que vous souhaitez gérer via ce Receiver. Pour cela, il faut utiliser les paramètres suivants :
Voici le fonctionnement du module d'exemple :
Exemple de communication avec le module via curl:
curl --data 'key=my_value' http://127.0.0.1:9000/my_api |
Modifier le module pour qu'il corresponde à vos attentes
Il est important de bien lire les commentaires dans le code d'exemple avant toute modification.
Le code est divisé en deux parties :
La seule méthode que vous pouvez modifier/surcharger dans le code du module est get_raw_stats qui est utilisée pour les checks de supervision et le healthcheck.
Il est important de:
Le code dans le Worker correspond à votre code métier ainsi qu'à votre boucle principale d'action.
Ici encore, certaines règles s'appliquent afin d'assurer une stabilité dans le temps :
Les méthodes que vous pouvez surcharger sont les suivantes :
Méthodes surchargeables concernant le fonctionnement global du Worker:
ATTENTION : toutes les autres méthodes ( à l'exception de init_worker_before_main, qui est appelée avant le worker_main ) sont exécutées dans des threads différents. Vous devez donc faire attention à l'accès concurrent de vos données. |
Les méthodes concernant l'inventaire des hôtes :
Lorsque l'inventaire est mis à jour, les objets d'inventaires qui vous sont fournis :
Les méthodes appelables sur ces objets sont :
Pour les hôtes et les clusters :
Concernant les checks, les méthodes appelables sont :
| IMPORTANT : aucune modification ne doit être faite sur ces objets. Seules les méthodes listées doivent être appelées, les autres pouvant modifier l'élément et créer de graves incohérences ou bien être supprimées/renommées dans de futures versions. |
Dans le Worker, il est possible actuellement d'effectuer les commandes suivantes :
Toutes les commandes doivent avoir la forme suivante :
[ EPOCH ] NOM_COMMANDE ; ARG1 ; ARG2 ; ARG3
Dans le module d'exemple, la méthode export_http montre comment définir l'envoi d'un OK pour tous les hôtes de l'inventaire.
La partie importante de l'exemple est le bloc qui correspond à l'envoi des commandes.
ATTENTION : Shinken attend que les commandes soient soit de type str de Python, soit encodées en UTF-8 dans le cas de bytes. Dans le second cas, Shinken décodera les bytes en utilisant UTF-8 et ignorera les caractères qu'il ne parvient pas à décoder, pouvant entraîner des comportements inattendus si la commande n'était pas encodée en UTF-8. Notre recommandation est d'utiliser le type str de Python pour vos commandes. |
cmd = '[%s] PROCESS_HOST_CHECK_RESULT;%s;0;Is alive' % (int(time.time()), host_name)
self.logger.info('[%s] Generating a command UP for %s' % (self.get_name(), host_name))
ext = ExternalCommand(cmd) # create an object the receiver will accept
self.send_object_to_main_daemon(ext) |
Pour pousser un résultat d'hôte/cluster vers les Schedulers
Pour pousser un résultat de check vers les Schedulers
Pour créer une prise en compte sur un hôte/cluster
Pour créer une prise en compte d'élément check.
Pour créer une période de maintenance sur un hôte/cluster.
Pour créer une période de maintenance sur un check d'hôte/cluster.