Surveiller ses serveurs avec Ruby et Jabber
Voici un tout petit programme de moins de 20 lignes permettant très simplement de surveiller un serveur grâce aux protocoles Jabber.
Il suffit de créer un compte Jabber spécifique pour le serveur à surveiller, et de l'ajouter dans votre liste de contacts, celui-ci apparaitra avec pour status la charge du système, pratique ! non ?
En prérequi, il vous faut juste le gem xmpp4r-simple, installez le comme ceci :
sudo gem install xmpp4r-simple
Le code est très facilement étendable selon vos besoins, je vous laisse faire...
require 'rubygems' require 'xmpp4r-simple' LOGIN='le_compte_du_serveur@im.apinc.org' PASS='lepass' DEST='votre_compte_perso@im.apinc.org' begin $im = Jabber::Simple.new(LOGIN, PASS) $im.deliver(DEST, "Hello !") loop do $im.status(nil, `hostname`.strip + ' : ' + `cat /proc/loadavg`.split.first(3).join(' ')) sleep 30 end rescue => e p e; sleep 10 retry end
Lancez maintenant le script :
ruby jabber.rb
Voilà un petit aperçu du résultat dans Pidgin :




Commentaires
Trop bien comme idée !
Ou sinon encore plus radical, héberger son propre serveur jabber sur le serveur a surveiller :D
Sympa l'astuce !!!
Par contre je ne trouve pas le package sous Debian... un équivalent ?
Hedy: oui, télécharge le paquet directement : http://github.com/blaine/xmpp4r-sim... décompresse le dans le dossier contenant ton jabber.rb et modifie le require afin de pointer vers le fichier lib/xmpp4r-simple.rb
Bon dans le principe, ça marche, mais je galère un peu avec ruby ^^
Pour éviter de passer par le téléchargement du pacquet du commentaire précédent, il m'a semblé à priori utile de faire ceci sur ma Debian Lenny :
$ sudo aptitude install rubygems libxmpp4r-ruby
Ensuite la commande suivante fonctionne :
$ sudo gem install xmpp4r-simple
Par contre, le script retourne une erreur au niveau du require :
**************
jabber.rb:1:in `require': no such file to load -- xmpp4r-simple (LoadError)
from jabber.rb:1
**************
Une idée ?
Si, dans le fichier jabber.rb, je renseigne le chemin complet vers le fichier xmpp4r-simple.rb téléchargé avec l'archive donné dans le com. #3, il se passe les choses suivantes :
* si je lance le script jabber.rb depuis le répertoire où se trouve jabber.rb et xmpp4r-simple.rb, ça fonctionne
* si je lance le script jabber.rb depuis un autre répertoire avec une commande du style 'ruby /usr/bin/jabber.rb', j'ai le message suivant à chaque update du script :
=====================
/usr/lib/ruby/1.8/rubygems/custom_require.rb:27: command not found:
=====================
Hedy > Le chemin contenu dans le require est-il bien absolu et non relatif ?
Oui tout à fait, il ressemble à ça : '/home/admin/bin/xmpp4r-simple.rb'
L'erreur n'est pas bloquante et on peut facilement la rediriger vers un /dev/null mais bon... c'est pas super propre et j'aimerai mieux comprendre le pb...
Je me demande si ça ne vient pas de la configuration de ruby/gem...
tape gem env pour voir si tous tes chemins sont bon...
Après, je ne vois pas trop mais c'est une erreur qui à l'air de se reproduire assez souvent vu le nombre de résultats dans Google...
RubyGems Environment:
- RUBYGEMS VERSION: 1.2.0
- RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
- INSTALLATION DIRECTORY: /var/lib/gems/1.8
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /var/lib/gems/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://gems.rubyforge.org/
Tout à l'air normal apparemment...
Hedy> Avec require 'rubygems', tu n'auras pas de souci