S'abonner au Flux RSS

lundi, octobre 29 2012

Nagios et les MIBS perdues dans Debian

Il faut désormais activer non-free dans Debian pour pouvoir utiliser les MIBS snmp ( voir http://wiki.debian.org/SNMP), action qui n'est pas réalisable dans de nombreuses architectures. Sans les MIBS utiliser SNMP devient vite une gageure, devoir déclarer les commandes Nagios en se basant sur les OID des directives extend est fastidieux et difficilement maintenable dans le temps. Afin de simplifier cette utilisation j'ai écrit un script pour simplifier la déclaration dans Nagios en se passant des MIBS.

mibchecks génère les définitions Nagios en analysant le fichier de configuration du démon snmp, il est disponible sur gitorious pour download et/ou fork.

Repo : https://gitorious.org/mibchecks/mibchecks

mibchecks lit le fichier /etc/snmp/snmpd.conf, en extrait les définitions extend, convertit les noms de commandes en OID et écrit sur la sortie standard les définitions de command à inclure dans la configuration de nagios. Un exemple de sortie.

Le script est actuellement en version 1.0.2 et attend vos patch et/ou amélioration.

vendredi, mars 16 2012

2 backports squeeze pour les fans du nosql

Les deux derniers backports pour squeeze arrivés dans mon dépôt personnel sont destinés aux amateurs de NoSQL ; le serveur CouchDB et une librairie perl d'accès à mongoDB.

  • couchdb 1.1.1
  • libmongodb-perl 0.45

jeudi, novembre 17 2011

Remplir ses caches sur plusieurs niveaux de façon smart

J'utilise tilecache pour générer des tuiles à la volée sur des rendus plus ou moins complexe, et pour réduire un peu la charge du serveur de rendu j'ai mis en place des caches (avec varnish) au devant de celui-ci. L'architecture de cache repose sur 2 niveaux, un cache en frontal direct non public, et 3 caches devant celui-ci qui sont appelés pas les clients OpenLayers (ou autres) et ouvert sur le net. L'intérêt des 3 caches est de bénéficier de l'astuce bien connu des a.tile.., b.tile.., c.tile bien connu des utilisateurs d'OpenStreetMap. Avec tilecache est fournit tilecache_seed qui permet de remplir les cache mais celui-ci ne remplissait pas entièrement mon besoin. En effet il me faut remplir les 3 caches publics, avec l'ensemble des layers rendus et ceci sans mettre à genoux le serveur de rendu. Idéalement l'opération se ferait en une passe sans avoir à ancer plusieurs commandes à la suite. Pour cela j'ai écrit un script perl qui rassemble toutes ces fonctionnalités plus quelques autres.

Le script permet de spécifier autant de serveur à remplir que souhaité, un ensemble de cache à générer, une bbox sur la zone voulue, et un couple de zoom min et max. Lors du lancement le script va extraire un premier serveur du groupe de serveurs indiqués, il va ensuite boucler pour générer tous les layers sur ce serveur sur la première tuile du zoom min, de cette façon le cache en frontal de la machine de rendu va se remplir. Ensuite il va appeler les mêmes tuiles sur les autres serveurs, à cet instant nous avons donc dans tous les caches, tous les layers dans l'espace d'une tuile. Le script va ensuite boucler de même pour toutes les autres tuiles en descendant dans les niveau de zoom après avoir complété le précédent.

Des problèmes fréquemement rencontrés avec des processus comme les remplissage de cache, la saturation du backend, la rupture d'un élément obligent à tout reprendre ou stopper le processus. J'ai essayé d'être le plus smart possible et de faire en sorte que le script aille le plus loin possible en générant le moins d'erreur, les mécanismes mis en oeuvre sont décrits ci-dessous :

  • suppression automatique d'un serveur défaillant, en cours de remplissage un des serveurs caches fait défaut, au bout de 10 réponses consécutives en erreur le serveur est ignoré et le remplissage continu sur les autres normalement
  • réduction de la sollicitation du backend, en cours de remplissage si le serveur source surcharge, à chaquer erreur 503 reçues le remplissage ralentit, le temps d'attente entre tuiles est augmenté afin de réduire la charge endurée. De même au bout d'un nombre de requête sans erreur le temps d'attente est réduit pour éviter un de traitement trop long. Si le temps d'attente dépasse un seuil le processus prend fin.
  • une option simulate permet de se rendre compte avant de le faire que l'on va faire plus de 3 millions de requêtes HTTP, des fois cela peut-être long :-)

Bien évidemment le script peut-être utlisé au plus simple avec un layer et un seul serveur de cache en direct, si vous n'aimez pas tilecache_seed.

Le script est nommé fill-cache.pl (original) et publié sur Gitorious dans le projet osmtools

Comme tout script/programme celui-ci n'est évidemement pas finit et peut être amélioré, alors comme il est libre, profitez-en, contribuez ! Si vous ne codez pas et avez l'idée de génie, un petit commentaire sur ce billet pourrait voir vos voeux se réaliser.

mardi, mai 31 2011

Plugins munin pour GeoWebCache

Ayant récemment déployé des serveurs GeoWebCache j'ai voulu en suivre les métriques d'utilisation.Mais après une recherche sur le web je n'ai pas trouvé de plugins existants pour munin ; ce qui m'a amené à en écrire pour les données suivantes :

  • geowebcache_bandwidth
  • geowebcache_blankitems
  • geowebcache_ratio
  • geowebcache_volume

Ces plugins sont publiés sur mon compte Gitorious sous licence GPLv2 ; ils sont également disponible dans l'archive attachées à ce billet.

Si vous voyez d'autres mesures à monitorer et/ou des améliorations à faire aux plugins existants, laissez un commentaire sur ce billet.

mercredi, juin 23 2010

Aide à la toponymie dans OSM

Lors des imports massifs les données sources peuvent être intégralement en majuscule ou en minuscule, il faut alors reprendre un à un tous les noms pour les écrire correctement. Cette tâche est longue et fastidieuse, pour réduire cette lourdeur j'ai écris une fonction à intégrer dans une base PostgreSQL en PL/Perl qui simplifie grandement le travail de ré-écriture. La fonction osm_capitalize suit les règles définies dans le Code officiel géographique de l'INSEE. Au vu des règles suivies la fonction n'est valide que pour les toponymes français.

Un exemple d'utilisation de la fonction, la première colonne présente le nom tels que trouvés dans un import, et la colonne de gauche le même nom passé au travers de la fonction.

Le petit pré                | Le Petit Pré
Le petit du champs des prés | Le Petit du Champs des Prés
LE PETIT DU CHAMPS DES PRÉS | Le Petit du Champs des Prés
la près d'hier              | La Près d'Hier
Bourg-en-bresse             | Bourg-en-Bresse
BOURG-EN-BRESSE             | Bourg-en-Bresse
l'epine                     | L'Epine
L'EPINE                     | L'Epine
LA ROCHE-SUR-YON            | La Roche-sur-Yon
CLAVANS-EN-HAUT-OISANS      | Clavans-en-Haut-Oisans
l'isle-jourdain             | L'Isle-Jourdain
PONT D'AIN                  | Pont d'Ain
SAINT-ANDRÉ-D'HUIRIAT       | Saint-André-d'Huiriat

Mise à jour du 26 juin : le code a migré chez Gitorious

vendredi, octobre 16 2009

Backport lenny des librairies redis

Le backport pour lenny des librairies d'accès à redis est disponible sur mon dépôt. Redis est une base de données cléf-valeur fonctionnant en mémoire, au même titre que memcached, avec une fonctionnalité intéressante de persistance des données entre deux redémarrage du service. Redis écrivant ses données sur disque à interval régulier.

En plus de la doc est du serveur les librairies sont disponibles pour php, perl, python et erlang.

  • erlang-redis_1.01-1_i386.deb
  • libphp-redis_1.01-1_i386.deb
  • libredis-perl_1.01-1_i386.deb
  • python-redis_1.01-1_all.deb
  • redis-doc_1.01-1_all.deb
  • redis-server_1.01-1_i386.deb