Aller au contenu | Aller au menu | Aller à la recherche

Remonter les checks Icinga grâce à Ruby

Logo IcingaActuellement en plein développement de modules pour Dashing,on m'a demandé de créer un widget remontant le nombre de checks réalisés en recette et passant en orange ou rouge en fonction des erreurs pouvant être remontés par Icinga2. Plus que créer un widget, le problème qui se pose à moi est la remonté d'informations à partir d'Icinga2. Certes, il existe une API REST qui gère cela mais la versin d'Icinga2 dont je dispose est trop ancienne pour en bénéficier. Plutôt que de partir sur une mise à jour du système (On est en RedHat 5 :-/ ), j'ai préféré tabler sur l'existant et utiliser l'API disponible avec Icinga-Web.
Néanmoins, même si l'usage de cette API est (moins ou plus) documenté, rien n'existe pour la récupération des données à partir de Dashing, Rails ou tout autre application issue de Ruby (à l'opposé une fois encore, de l'API de Icinga2 :-( ). Du coup, j'ai décidé de développer moi-même ce type d'interface via une classe Ruby : IcingaWebParser.rb :-D

L'usage de cette classe ne se limite bien sûr pas à Dashing et peut être utilisé dans n'importe quel programme Ruby. On peut, par exemple, imaginer un script calculant un pourcentage de disponibilité hebdomadaire en fonction de l'état renvoyé par Icinga.

INSTALLATION

Tout d'abord, il faut créer une clé d'authentification permettant d'accéder à l'API REST dirrectement via une URL. Pour ce faire, se connecter à l'interface d'administration d'Icinga Web et créer un nouvel utilisateur.
icinga-api-1.PNG

  • User name : Remplir avec un username sans espace ni caractères spéciaux
  • Auth via : Choisir auth_key
  • Authkey for API : Cliquer sur l'icône de flèches bleues pour générer une clé. Cette clé (Authkey) sera nécessaire lors de la connexion avec la classe Ruby.

icinga-api-2.PNG

  • Credentials : cocher l'identifiant appkit.api.access
  • Cliquer sur Save pour créer l'utilisateur.

UTILISATION

Avant tout, ne pas oublier d'installer la Gem rest-client, utilisé par IcingaWebParser.rb pour se connecter à l'API d'Icinga-Web. L'exemple suivant récupérera le nom de services et d'hôtes dont l'état est CRITICAL.

irb(main):001:0> require './lib/icingawebparser.rb'
=> true
irb(main):002:0> i = IcingaWebParser.new "icinga_url", "auth_key"
=> #<IcingaWebParser:0x007fa3629ec548 @url="icinga_url", @authkey="auth_key">
irb(main):003:0> i.query("service", "AND(SERVICE_CURRENT_STATE|=|2;0)", ["SERVICE_NAME", "HOST_NAME"])
=> [{:SERVICE_NAME=>"Oracle Process", :HOST_NAME=>"server1"}, {:SERVICE_NAME=>"Logs JVM", :HOST_NAME=>"server2"}]

Les arguments pour créer une nouvelle instance sont :

  • L'URL du serveur Icinga Web
  • La Auth key précédemment créée

La classe est attachée à ce post. La documentation complète de la classe est ici : IcingaWebParser.html

Icinga utilisé : 2.3.4
Icinga-Web utilisé : 1.13.0
Pour en savoir plus : Icinga Wiki

QR code
Jean-Baptiste Langlois

Auteur: Jean-Baptiste Langlois

Restez au courant de l'actualité et abonnez-vous au Flux RSS de cette catégorie

Commentaires (0)

Soyez le premier à réagir sur cet article

Ajouter un commentaire Fil des commentaires de ce billet

:-) ;-) :-/ :mdr: :-D :-( :-C 8-) :-O :-s :siffle: :-P :love: :oops: :money: :caca:


À voir également

Icinga avec LDAPS

Connexion en LDAPS avec Icinga

Authentification sur Icinga via un serveur LDAP nécessitant un certificat

Lire la suite

Logo dotClear

Partage si tu aimes ça

Le retour de la vengeance du geek en retard !

Lire la suite