PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

David Larlet : Thoughts: Sharing

mercredi 3 octobre 2012 à 01:00

My only career management engine — and thus advice — is to share. I thought about it after reading Mathieu's article on that topic (in French), it's not really a planning involving ladders but the end result is far more rewarding. Why is that so powerful?

Your value is proportional to the number of times you shared your knowledge, your experience, your ideas with others. This advice will make you richer every day, not only in money :-).

Gravatar de David Larlet
Original post of David Larlet.Votez pour ce billet sur Planet Libre.

Yannig : Suivi des interfaces d'un switch CISCO sous Nagios/Shinken

mardi 2 octobre 2012 à 23:00
Depuis quelques jours, je travaille sur la mise en place d'un Shinken chez un client. A cette occasion, on m'a demandé de faire un suivi des switchs de la boîte et notamment le débit de chaque port.

Comme je suis quelqu'un de relativement paresseux (je n'avais pas trop envie de me déclarer les 48 ports des 200 switchs à la main). J'ai donc rapidement pensé à un script qui me permettrait de déclarer automatiquement ces surveillances. Et comme je suis un mec super sympas qui adore raconter sa vie, je vais vous en faire profiter bande de veinards !

Pour se faire, nous allons utiliser les MIBs SNMP des switchs CISCO qui ont la bonne idée de proposer tout un tas de chose vachement intéressante (oui, enfin ... pour un administrateur d'outils de surveillance). Nous allons voir notamment l'OID 1.3.6.1.2.1.2.2.1.2 qui va nous renvoyer la liste des interfaces du switch :

$ snmpwalk -c ecalyptus -v 2c 10.1.1.1 1.3.6.1.2.1.2.2.1.2
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "FastEthernet1"
iso.3.6.1.2.1.2.2.1.2.2 = STRING: "TenGigabitEthernet1/1"
iso.3.6.1.2.1.2.2.1.2.3 = STRING: "TenGigabitEthernet1/2"
iso.3.6.1.2.1.2.2.1.2.4 = STRING: "TenGigabitEthernet1/3"
iso.3.6.1.2.1.2.2.1.2.5 = STRING: "TenGigabitEthernet1/4"
iso.3.6.1.2.1.2.2.1.2.6 = STRING: "GigabitEthernet3/1"
iso.3.6.1.2.1.2.2.1.2.7 = STRING: "GigabitEthernet3/2"
iso.3.6.1.2.1.2.2.1.2.8 = STRING: "GigabitEthernet3/3"
iso.3.6.1.2.1.2.2.1.2.9 = STRING: "GigabitEthernet3/4"
iso.3.6.1.2.1.2.2.1.2.10 = STRING: "GigabitEthernet3/5"
iso.3.6.1.2.1.2.2.1.2.11 = STRING: "GigabitEthernet3/6"
iso.3.6.1.2.1.2.2.1.2.12 = STRING: "GigabitEthernet3/7"
iso.3.6.1.2.1.2.2.1.2.13 = STRING: "GigabitEthernet3/8"
iso.3.6.1.2.1.2.2.1.2.14 = STRING: "GigabitEthernet3/9"
iso.3.6.1.2.1.2.2.1.2.15 = STRING: "GigabitEthernet3/10"
[...]

Nous allons nous servir de cette sortie pour générer notre surveillance. Pour cela, nous allons utiliser le script perl suivant :
#!/usr/bin/perl
use strict;

open(MODEL, "modele.txt");
mkdir("modeles") if(!-d("modeles"));
while() {
chomp();
my($modele, $ip) = split(/;/);
my @interfaces = `snmpwalk -c ecalyptus -v 2c $ip 1.3.6.1.2.1.2.2.1.2`;
open(MODEL_CFG, ">modeles/switch-$modele.cfg");
foreach(@interfaces) {
if(/iso.3.6.1.2.1.2.2.1.2.(\\d+) = STRING: "(.*Ethernet.*)"/) {
my ($id, $interface) = ($1, $2);
print MODEL_CFG "define service {
hostgroup_name $modele
use generic-service
service_description $interface
check_command check_port_usage!$id!6000!8000
}
\\n";
}
}
close(MODEL_CFG);
}
close(MODEL);
Ce script attend en entrée un fichier de paramètre (modele.txt) et nous donne en sortie des fichiers de configuration au format nagios dans le sous-répertoire modeles. Il nous reste maintenant à prendre ces fichiers et les intégrer dans la configuration de notre nagios/Shinken.

Ci-dessous un exemple de surveillance sur un switch CISCO (du type WS-C2960-24PC-L) :
define service {
hostgroup_name WS-C2960-24PC-L
use generic-service
service_description FastEthernet0/1
check_command check_port_usage!10001!6000!8000
}
[...]
define service {
hostgroup_name WS-C2960-24PC-L
use generic-service
service_description GigabitEthernet0/2
check_command check_port_usage!10102!6000!8000
}
Il reste ensuite à déclarer un hostgroup ad-hoc avec un template de serveur comme suit :

define hostgroup{
  hostgroup_name  WS-C2960-24PC-L
  alias           Switchs Cisco WS-C2960-24PC-L
}

define host {
  name            switch-WS-C2960-24PC-L
  use             generic-switch
  alias           Ensemble des switchs Cisco WS-C2960-24PC-L
  hostgroups      Switch,WS-C2960-24PC-L
  icon_image      vendors/cisco.png
  register        0
}
Et nous pouvons déclarer maintenant des switchs utilisant le template switch-WS-C2960-24PC-L. Ces derniers viendront directement avec la surveillance automatique de tous leurs ports.

Gravatar de Yannig
Original post of Yannig.Votez pour ce billet sur Planet Libre.

Articles similaires

Framablog : Créer et maintenir les lois comme les logiciels libres sur GitHub ou Wikipédia ?

mardi 2 octobre 2012 à 10:34

Lorsque vous parcourez un article de l’encyclopédie libre Wikipédia, vous pouvez bien évidemment le lire, mais aussi écrire (le fameux bouton « Modifier ») et consulter tout son historique, sans oublier converser autour avec les autres contributeurs (lien « Discussion »). Il en va de même avec tout logiciel libre déposé sur une plateforme collaborative comme celle de GitHub par exemple (dont l’approche et les fonctionnalités sociales ont donné un coup de vieux à Sourceforge).

Il y a là une manière bien spécifique de fonctionner et une invitation à s’impliquer.

Dans la mesure ou Wikipédia ou GNU/Linux sont d’incontestables réussites, l’un des plus célèbres penseurs du Net, Clay Shirky, s’est récemment demandé, au cours d’une brillante intervention TED, si on ne pouvait pas fortement s’en inspirer pour faire évoluer la politique en générale et l’élaboration de nos lois en particulier.

Ce que l’on pourrait résumer également ainsi : est-ce que le logiciel libre a des choses à dire, voire à enseigner, à la démocratie ?

Fabricio Zuardi - CC by

Peut-on améliorer la politique avec les outils du logiciel libre ?

Could we use open-source tools to improve politics?

Mathew Ingram - 29 septembre 2012 - Gigaom.com
(Traduction : Lamessen, Barbidule, Evpok, David, peupleLa)

Les principes du logiciel libre ont contribué à créer de nombreux logiciels efficients et utiles, y compris le système d’exploitation GNU/Linux et la surpuissante ressource que représente Wikipédia. Cette même approche pourrait-elle être utilisée pour ouvrir le processus de création des lois ? Clay Shirky assure que c’est possible.

La philosophie du logiciel libre a permis entre autres de construire un système d’exploitation et une encyclopédie collaborative de grande qualité. Pourrait-on en faire de même avec la législation et la politique ? C’est ce que le théoricien de la communication Clay Shirky a proposé dans une récente et remarquée conférence TED (Technologie Entertainment Design) à Edimbourg. L’idée est alléchante, employer les méthodes de GNU/Linux et Wikipédia pour rendre les gouvernements plus ouverts et impliquer davantage les concitoyens, mais est-ce véritablement transposable ? L’écriture de logiciels et de services Web est très différente de celle des lois, et l’histoire du logiciel libre a connu son lot de guerres quasi-religieuses. Mais c’est peut-être notre meilleur espoir.

Après avoir fait une sorte de tour d’horizon du mouvement open source, en accordant la part belle à GNU/Linux, Shirky a consacré une grande partie de son discours à Github, plateforme collaborative et sociale de dépôt de logiciels qui permet à n’importe qui d’éditer, de « forker » en créant sa propre version, et de suivre les changement que font les autres. De GitHub à l’idée de législation collaborative, il n’y a qu’un pas. Et c’est ce que Shirky semble avoir à l’esprit. Il y a déjà eu quelques tentatives de réalisation directement via GitHub. Ainsi un développeur allemand a, par exemple, déposé l’intégralité des lois allemandes sur la plateforme. De cette façon, les citoyens peuvent recommander et suivre les changements.

C’est séduisant sur le papier : une simple plateforme logicielle dédiée à la collaboration pourrait changer la façon dont on développe et met en oeuvre les lois. Mais est-ce réaliste ?

Beaucoup de sceptiques disaient au départ que Wikipédia n’avait aucune chance de marcher. Pourtant elle est bel et bien là et sa réputation et fiabilité sont excellentes, malgré quelques ratés comme l’incident récent impliquant l’auteur Philip Roth. Il est vrai cependant que de nombreux critiques pensent que la « cabale » des éditeurs qui contrôlent l’encyclopédie collaborative a trop de pouvoir.



Force est de reconnaître que le fonctionnement des gouvernements reste de toutes les façons trop opaque à l’ère d’Internet, et donc que Github ne peut pas faire empirer les choses. D’ailleurs Shirky n’est pas le seul à le penser : le développeur Abe Voelker a proposé un « Github pour lois » qui propose exactement la même approche pour concevoir des lois collaborativement. D’autres expériences basées sur ces mêmes idées d’ouverture ont déjà eu lieu en Finlande, Irlande et surtout en Islande avec la rédaction collective de sa nouvelle Constitution (NdT : lire à ce sujet L’Islande, la crise, la révolution et moi et on notera en France l’initiative d’Étienne Chouard avec sa Constitution nationale d’origine citoyenne sur un wiki).

Un des problèmes posés par la transposition d’une solution technique comme Github à un processus culturel et politique de grande ampleur, c’est que créer des lois, même mineures, est très différent de bidouiller un bout de code afin que GNU/Linux puisse reproduire les styles de polices de caractères Windows, ou encore modifier l’article sur George Bush dans Wikipédia (sachant que ces deux exemples en apparence inoffensifs ont donné lieu à de vives polémiques au sein de leur communauté respective). Comment peut-on dès lors espérer que des politiciens puissent, dans les faits, se servir d’un processus similaire pour changer la manière dont fonctionne le gouvernement, le parlement et ses lois ? Comme le suggère Shirky dans sa conférence, il y a une bureaucratie bien installée qui n’a probablement aucun intérêt à renoncer à ce contrôle au profit du bon peuple.

Dans son livre « Here comes Everybody », Shirky a montré l’impact positif d’Internet sur la dynamiques des groupes. Son admiration pour Github semble prendre place dans une recherche d’outils collaboratifs et ouverts axée sur l’humain. Il est clair que nous en avons besoin, et même si Github n’est peut-être pas la bonne réponse, à ce stade, tout peut valoir la peine d’être tenté.

Crédit photo : Fabricio Zuardi (Creative Commons By)

Gravatar de Framablog
Original post of Framablog.Votez pour ce billet sur Planet Libre.

Nicolargo : Et si on jouait un peu avec Redis et Python ?

mardi 2 octobre 2012 à 07:45

Dans la mouvance NoSQL, Redis se classe dans la catégorie "data structure server"  (que l'on peut traduire en Français par "serveur de dictionnaire distant"). C'est  un système permettant de traiter, de manière très performante, des données sous la forme clés/valeurs. Contrairement à des solutions comme MemCache, Redis est capable de gérer la persistance des données en stockant, sur demande, son contenu sur disque.

La clé, qui peut être comparée au nom d'une variable dans un langage de programmation, permet d'identifier de manière unique la donnée. Lors de la création de votre application, vous allez rapidement vous rendre compte que le choix de cette clé n'est pas négligeable. C'est elle qui définira "la structure" de votre base de donnée.

La clé est dans la définition de la clé.

Quant aux valeurs, elles peuvent appartenir aux types suivants:

Comme on peut le voir, on retrouve la plupart des structures du langage Python. En étant un fervent admirateur, je me suis donc penché sur l'API Python Redis.

C'est parti pour un peu de bac à sable...

Installation de Redis

Pour mes tests, j'ai fait une installation standard depuis les paquets Ubuntu du serveur Redis, de l'API Python et de la CLI iPython pou illustrer mes exemples:

sudo apt-get install redis-server python-redis ipython

Les commandes de bases

La librairie Python permet d'envoyer des commandes (voir la liste des commandes ici) au serveur.

On commence par se connecter un serveur (local en écoute sur le port TCP par défaut).

J'utilise iPython pour mes tests de la librairie Python mais il est également possible de passer par la CLI Python classique.

# ipython
In [1]: import redis
In [2]: r = redis.Redis('localhost')

Premier exemple clés / valeur (chaîne de caractères):

In [3]: r.set("cles", "valeur")
Out[3]: True
In [4]: r.get("cles")
Out[4]: 'valeur'

Stocker des valeurs numériques:

In [5]: r.set("clesnum", 666)
Out[5]: True
In [6]: r.get("clesnum")
Out[6]: '666'
In [7]: r.incr("clesnum")
Out[7]: 667
In [8]: r.decr("clesnum")
Out[8]: 666

Attention, la méthode get retourne des chaines, il faut les convertir avant de s'en servir comme des entiers.

In [9]: a = 10
In [10]: a + r.get("clesnum")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/nicolargo/ in ()
----> 1 a + r.get("clesnum")
TypeError: unsupported operand type(s) for +: 'int' and 'str'
In [11]: a + int(r.get("clesnum"))
Out[11]: 676

Des listes comme valeurs:

In [12]: r.rpush("clesliste", "a")
Out[12]: 1L
In [13]: r.rpush("clesliste", "b")
Out[13]: 2L
In [14]: r.rpush("clesliste", "c")
Out[14]: 3L
In [15]: r.lrange("clesliste", 0, -1)
Out[15]: ['a', 'b', 'c']
In [16]: r.lindex("clesliste", 2)
Out[16]: 'c'
In [17]: r.llen("clesliste")
Out[17]: 3
In [22]: r.lpush("clesliste", "z")
Out[22]: 4L
In [23]: r.lrange("clesliste", 0, -1)
Out[23]: ['z', 'a', 'b', 'c']

Pour des listes avec des valeurs uniques (set), il faut utiliser les méthodes sadd (pour ajouter) et smembers (pour récupérer le set).

In [27]: r.sadd("clesset", "a")
Out[27]: True
In [28]: r.sadd("clesset", "b")
Out[28]: True
In [29]: r.sadd("clesset", "c")
Out[29]: True
In [30]: r.sadd("clesset", "a")
Out[30]: False
In [31]: r.smembers("clesset")
Out[31]: set(['a', 'c', 'b'])

Une autre structure de liste intéressante est la liste avec des valeurs uniques et ordonnées. On ajoute un troisième champs à notre couple clés/valeur qui s'appelle score (3em paramètre dans la méthode zadd). C'est ce score qui va déterminer l'ordre de la liste:

In [32]: r.zadd("clessetsort", "a", 4)
Out[32]: True
In [33]: r.zadd("clessetsort", "b", 1)
Out[33]: True
In [34]: r.zadd("clessetsort", "c", 3)
Out[34]: True
In [35]: r.zadd("clessetsort", "a", 5)
Out[35]: False
In [36]: r.zrange("clessetsort", 0, -1, withscores = True)
Out[36]: [('b', 1.0), ('c', 3.0), ('a', 5.0)]
In [37]: r.zrange("clessetsort", 0, -1)
Out[37]: ['b', 'c', 'a']

Pour stocker un dictionnaire, c'est également très simple:

In [38]: r.hset("cleshash", "a", "A")
Out[38]: 1L
In [39]: r.hset("cleshash", "b", "B")
Out[39]: 1L
In [40]: r.hset("cleshash", "c", "C")
Out[40]: 1L
In [41]: r.hgetall("cleshash")
Out[41]: {'a': 'A', 'b': 'B', 'c': 'C'}
In [42]: r.hget("cleshash", "b")
Out[42]: 'B'

Gérer l'expiration de vos données

... importance du garbage...

In [3]: r.set("key", "value")
Out[3]: True
In [4]: r.exists("key")
Out[4]: True
In [5]: r.expire("key", 10)
Out[5]: True
In [6]: r.exists("key")
Out[6]: True
Attendre 10 secondes ou plus...
In [7]: r.exists("key")
Out[7]: False

Egalement de manière statique avec la méthode expireat (http://redis.io/commands/expireat).

Pour être plus fin, il est aussi possible d'utiliser les "scores" avec les méthodes z* (zadd, zrangebyscore) pour supprimer les données qui ont des valeurs de clés les plus faibles (ou forte selon votre structure).  Par exemple pour supprimer les données de plus faible score (< 3) de notre liste "clesetsort" créée dans le chapitre précédant:

In [37]: r.zrange("clessetsort", 0, -1)
Out[37]: ['b', 'c', 'a']
In [60]: r.zremrangebyscore("clessetsort", 0, 3)
Out[60]: 2
In [61]: r.zrange("clessetsort", 0, -1)
Out[61]: ['a']

 

Les pipelines

Si Redis vous intéresse, c'est que vous avez à gérer un volume important de données. Les commandes que nous venons de voir dans le chapitre précédant sont unitaires. C'est à dire que pour une exécuter une commande, une requête (TCP) est faite au serveur Redis. Pour optimiser les performances et donc réduire le nombre de requêtes fait au serveur, nous disposons des Pipelines (lire ce billet comparatif sur le sujet).

Par exemple pour entrer 100.000 clés/valeurs dans votre serveur, il faut environ 11 secondes sur mon PC de test:

import time
import redis
_MAX_ITER = 100000
r = redis.Redis('localhost')
print "Start bench without Pipeline"
start=time.clock()
for i in range(_MAX_ITER):
   r.set("cles%d" % i, i)
stop=time.clock()
print "Result: %s" % str(stop-start)

alors qu'il faut un peu de plus de 4 secondes en utilisant une pipeline (soit un gain de plus de 50%):

import time
import redis
_MAX_ITER = 100000
r = redis.Redis('localhost')
print "Start bench with Pipeline"
start=time.clock()
p = r.pipeline()
for i in range(_MAX_ITER):
   p.set("cles%d" % i, i)
p.execute()
stop=time.clock()
print "Result: %s" % str(stop-start)

Ressources:

 

Cet article Et si on jouait un peu avec Redis et Python ? est apparu en premier sur Le blog de NicoLargo.

Gravatar de Nicolargo
Original post of Nicolargo.Votez pour ce billet sur Planet Libre.

crowd42 : Installer Thunderbird 16 bêtà sur Ubuntu

mardi 2 octobre 2012 à 03:04

Vous êtes ubuntero, vous utilisez thunderbird comme client de messagerie et vous êtes à l’affût des dernières fonctionnalités, mais surtout, vous n’avez pas peur des bugs, vous avez du temps à consacrer pour les remonter aux développeurs. Alors ce billet pourrait vous intéresser.

Grâce au dépôt PPA que vous allez ajouter, vous allez pouvoir installer la prochaine version de thunderbird (la bêta de la 16 dans ce cas), qui continuera à être upgradé au fil des versions qui sortent (alpha, bêta, stable). Mais il y a un autre revers de la médaille, vous risquez d’avoir des add-ons inutilisables car incompatibles avec la version de développement que vous avez installé.

Si vous êtes conscient des risques que ça peut représenter et que vous souhaitez quand même l’installer, alors lancez dans ce cas terminal et exécutez les lignes de commande suivantes :

sudo add-apt-repository ppa:mozillateam/thunderbird-next
sudo apt-get update
sudo apt-get install -y thunderbird

Et vous voilà avec la version 16 béta de thunderbird :)

Cet article Installer Thunderbird 16 bêtà sur Ubuntu est apparu en premier sur crowd42.

flattr this!

Gravatar de crowd42
Original post of crowd42.Votez pour ce billet sur Planet Libre.