Catégories
Open-source Planet-libre Reseau

Installation de VNStat sous Debian

VNStat est un outil bien utile pour surveiller le débit des interfaces réseaux de ses machines. Il se présente sous la forme d’un processus tournant en tache de fond (les versions plus anciennes se basaient sur crontab) et surveillant les flux transitant sur vos interfaces.

Nous allons détailler l’installation et l’utilisation de cet outil sur un système GNU/Linux Debian Squeeze.

Installation de VnStat

Dans une console root (ou en utilisant sudo), il faut saisir les commande suivantes:

[cce lang= »bash »]

apt-get install vnstat vnstati

vnstat -u -i eth0 –nick « LAN0″

/etc/init.d/vnstat start

[/cce]

La configuration de VnStat est centralisé dans le fichier /etc/vnstat.conf. Par défaut, le rafraîchissement se fait toutes les 5 minutes et surveille l’interface eth0. Cette configuration est bien sûr à adapter à vos besoins.

Si vous saisissez la commande suivante dans les 5 minutes qui suivent l’installation, il est normal d’avoir le message d’erreur:

[cce lang= »bash »]

vnstat

eth0: Not enough data available yet.

[/cce]

Les premières statistiques sont disponibles 5 minutes après l’installation.

Utilisation de VnStat

Statistiques instantanées basées sur les 5 dernières secondes:

[cce lang= »bash »]

# vnstat -tr

[/cce]

Statistique de la dernière journée avec une granularité par heure:

[cce lang= »bash »]

# vnstat -h

[/cce]

Statistique sur la dernière journée:

[cce lang= »bash »]

# vnstat -d

[/cce]

Statistique sur la dernière semaine:

[cce lang= »bash »]

# vnstat -w

[/cce]

Statistique sur le dernier mois:

[cce lang= »bash »]

# vnstat -m

[/cce]

Utilisation de VnStati (pour générer des graphes)

VnStati est un logiciel qui perme, à partir de la base de données renseignée par VnStat, de générer des rapports au format images (PNG) que l’on peut facilement intégrer dans une page Web de supervision (à noter qu’il existe un script PHP permettant de générer automatiquement des rapports).

Pour créer une image au format PNG contenant le rapport des dernières heures, il suffit de saisir la commande suivante:

[cce lang= »bash »]

# vnstati -h -o h.png

[/cce]

Le fichier h.png contiendra:

Comme vous pouvez le voir, VnStati utilise les mêmes arguments que VnStat (un petit man vnstat vous sera utile pour avoir la liste exhaustive).

Catégories
Blog Nagios Open-source Planet-libre Reseau Systeme Web

Supervision d’un serveur Web/WordPress avec Shinken

Les serveurs hébergeant des services « Web » deviennent de plus en plus critique: un problème technique sur un site marchand fait baisser le chiffre d’affaire, un autre sur un site d’information peut faire passer le lecteur à la concurrence un dernier sur un blog personnel/professionnel peut impacter directement la crédibilité de l’auteur.

Il est donc important de surveiller ces serveurs comme le lait sur le feu. Les outils de supervision permettent de s’acquitter de cette tache de manière plus ou moins automatique en recevant les alertes par mail, Twitter, SMS…

Nous allons dans ce billet configurer un serveur Shinken (étant un fork de Nagios, le billet est également valable pour la configuration d’un serveur sous Nagios) pour surveiller un blog WordPress tournant sur le pile HTTP Varnish+Nginx.

Avant de commencer

Nous partons sur l’hypothèse ou vous disposer d’un serveur sous Debian avec la pile Varnish+Nginx+Wordpress et un serveur Shinken correctement installé et fonctionnel. Idéalement, la brique Shinken sera installé sur un autre serveur lui même hébergé chez un autre hébergeur. Dans ce cas il faudra mettre en place la couche NRPE entre les deux pour que Shinken puisse correctement collecter les informations sur le serveur Web.

Pour simplifier la configuration et que vous puissiez facilement la tester sur vos blogs/sites personnels, j’ai choisi de réunir les deux briques (Web + Supervision) sur une même machine.

Quoi surveiller ?

C’est la question que j’ai posé sur Twitter il y a quelques jours et j’ai reçu un grand nombre de réponses allant toutes dans le même sens. Faute de temps, je n’ai pas pu exploiter toutes les pistes mais je garde cela sous le coude et je ferai sûrement évoluer ce billet dans le futur.

J’ai donc découpé la supervision en deux groupes de services: système / web.

Pour les services système:

  • La charge du serveur: cela permet de s’assurer qu’un processus n’occupe pas toute la CPU et que mon serveur Web (pas très consommateur grâce à l’utilisation de Varnish) aura les ressources pour répondre correctement.
  • La mémoire disponible: c’est un des point critique en terme de performance, comme j’utilise des caches en RAM il faut s’assurer que le système dispose toujours d’une marge de manoeuvre au niveau de la mémoire vive disponible.
  • La mémoire Swap disponible: quand le système n’a plus de RAM disponible, il utilise la mémoire Swap (disque). Je contrôle donc que cet espace n’est jamais trop occupé.
  • RAID1: Mon serveur Dedibox dispose de deux disques durs fonctionnant en RAID1. Je contrôle que les deux disques sont fonctionnels avec un plugin maison.
  • Espace libre sur la partition système: j’ai installé mon serveur Web sur un distribution Debian Squeeze avec le partitionnement par défaut qui affecte une seule partition à /. Je surveille donc que l’espace disque disponible ne devienne pas trop bas.
  • Espace libre sur la partition de backup: mon serveur est hébergé chez Online.net qui propose un espace de stockage accessible en FTP ou j’archive avec RSnapShot tous les répertoire critiques de mon serveur. J’ai donc monté cet espace FTP sur un répertoire de mon disque et j’en surveille l’espace disponible.
  • Nombres de processus actifs: Un trop grand nombre de processus tournant sur le serveur peut mettre en évidence un bug sur un des processus. Je contrôle que ce nombre ne soit pas trop important.
  • Nombres d’utilisateurs connectés simultanément: Comme je suis le seul admin de ce serveur, j’ai mis une alerte qui me prévient quand deux utilisateurs sont connectés simultanément.

Pour les services Web:

  • On commence par surveiller que les processus critiques sont lancés: Varnish (2 processus varnishd), NGinx (5 nginx) et SSH (1 sshd). On passage on vérifie que le nombre de processus est conforme à notre configuration.
  • On surveille les ports en écoutes (local): TCP/80 (Varnish), TCP/8080 (NGinx), TCP/22 (SSH)
  • Pour le site Web à surveiller (par exemple www.mondomaine.com), on contrôle que les URLS suivantes sont bien accessibles:
  • http://www.mondomaine.com (home page)
  • http://www.mondomaine.com/sitemap.xml.gz (le sitemap utilise pour votre référencement)
  • http://www.mondomaine.com/googleXXXXXXXXX.html (le fichier fourni par Google pour faire le check vers ces services)
  • Attaques DOS/DDOS: un plugin me permet de détecter si mon site est victime d’une attaque DOS (facile à bloquer) ou DDOS (bon courage… hein Korben :))

Cette liste est bien sûr très restrictive, j’attend vos idées dans les commentaires !

Les confs, les confs !

L’idée est de fournir les configurations « brutes de décoffrages ». Si vous avez des problèmes pour appliquer cette configuration sur votre serveur, je vous conseille de consulter les billet de la page sur la supervision de ce blog.

La configuration des services système:

[cce]

# Define a service to check the disk space of the root partition

# on the local machine. Warning if < 20% free, critical if

# < 10% free space on partition.

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Root Partition

check_command check_local_disk!10%!5%!/

}

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Backup Partition

check_command check_local_disk!10%!5%!/mnt/backup

}

 

# Define a service to check the number of currently logged in

# users on the local machine.

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Current Users

check_command check_local_users!2!3

}

 

# Define a service to check the number of currently running procs

# on the local machine. Warning if > 250 processes, critical if

# > 400 processes.

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Total Processes

check_command check_local_procs!250!400!RSZDT

}

 

# Check memoire avec script check_memory

# http://blog.nicolargo.com/2008/07/surveiller-la-memoire-de-vos-serveurs-avec-nagios.html

# -w 5% -c 1%

 

define service{

use local-service

host_name localhost

service_description Memory

check_command check_mem!10%!5%

}

 

# Define a service to check the load on the local machine.

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Current Load

check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0

}

 

# Define a service to check the swap usage the local machine.

# Critical if less than 10% of swap is free, warning if less than 20% is free

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Swap Usage

check_command check_local_swap!20!10

}

 

# Check RAID (hardware)

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description RAID1

check_command check_raid

}

[/cce]

puis les services Web:

[cce]

# Define a service to check SSH on the local machine.

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description SSH

check_command check_ssh

#notifications_enabled 0

}

 

# Varnish process

# /usr/lib/nagios/plugins/check_procs -w 2:2 -c 1:1024 -C varnishd

 

define service{

use local-service

host_name localhost

service_description Varnish process

check_command check_local_process!2:2!1:1024!varnishd

}

 

# Check process

# /usr/lib/nagios/plugins/check_procs -w 5:5 -c 1:1024 -C nginx

 

define service{

use local-service

host_name localhost

service_description Nginx process

check_command check_local_process!5:5!1:1024!nginx

}

 

# Define a service to check Varnish

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Varnish access

check_command check_url!http://localhost/

}

 

# Define a service to check HTTP on the local machine.

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description Nginx access

check_command check_url!http://localhost:8080/

}

 

# Define a service to check HTTP on the local machine.

 

define service{

use local-service ; Name of service template to use

host_name localhost

service_description URL Blog check

check_command check_url!http://www.mondomaine.com/

}

 

# Define a service to check URL

# http://www.mondomaine.com/googleXXXXXXXX.html

 

define service{

use local-service

host_name localhost

service_description URL Google check file

check_command check_url!http://www.mondomaine.com/googleXXXXXXXXXX.html

service_dependencies localhost,HTTP Blog

}

 

# Define a service to check URL

# http://blog.nicolargo.com/sitemap.xml.gz

 

define service{

use local-service

host_name localhost

service_description URL Sitemap

check_command check_url!http://www.mondomaine.com/sitemap.xml.gz

service_dependencies localhost,HTTP Blog

}

 

# Define a DDOS detection service

# http://blog.nicolargo.com/?p=4100

# Warning: >50 SYN_RECV

# Critical: >70 SYN_RECV

 

define service{

use local-service

host_name localhost

service_description DDOS detect

check_command check_ddos!50!70

}

[/cce]

Et voilà ce que cela donne dans mon Shinken/Thruk:

Catégories
Blog Nagios Open-source Planet-libre Reseau Systeme

Interview de Jean Gabes, le créateur de Shinken

Salut Jean et merci de nous consacrer un peu de ton temps pour répondre à mes questions et à celles des lecteurs du blog.

On commence tout de suite !

Peux tu présenter Shinken en quelques lignes ?

Shinken est un outil de supervision, une implémentation de Nagios en Python ‘from scratch’ qui a pour objectifs principaux de simplifier la vie des administrateurs de grands parcs et de coller au mieux à l’évolution de l’IT des dix dernières années, et si possible préparer les dix prochaines…

Pourquoi t’es tu lancé dans une t’elle aventure ? Quelles sont tes sources de motivation ?

En fait Shinken est un incident industriel !

Il commence sa vie sans nom et peu de temps après la fin de l’écriture de mon livre “Nagios 3” (editions Eyrolles). Pour ce dernier, j’avais passé une bonne part de mes recherches sur les chapitres de performances et d’environnements distribués. Ceci m’avait permis de voir les limites de Nagios dans le domaine. Pour simplifier, Nagios était parfaitement adapté à un parc de taille moyenne (200 serveurs) mais commençait à avoir du mal au dessus de par son architecture « mono daemon » et quelques défauts d’implémentations. Il ne faut pas lui lancer la pierre non plus, sa conception remonte à plus de 10 ans pour justement régler la supervision d’un tel parc, et n’a gère évolué depuis.

Je me suis donc lancé dans un « proof of concept » qui tentait de corriger dans un premier temps les problèmes de performances. Ceux-ci étaient plutôt simple à analyser au final :

  • Nagios fork() des fils qui vont lancer des sondes. Puis les fils meurent. C’est dommage de les faire mourir si c’est pour en relancer 10ms après. Un système de pool de processus à la Apache devrait faire l’affaire ici (facile à dire, mais une horreur à implémenter).
  • Pendant une notification, le lancement d’un script de réaction ou l’envoi d’une donnée en base, Nagios coupe la supervision. Mis bout à bout, ça positionne un plafond très bas sur le nombre de sondes que l’on peux lancer.

Je suis un grand fan de Python, principalement pour sa syntaxe claire et son état d’esprit (lire le “zen of Python” pour plus d’info là dessus, ceci résume très bien le “Python”). Il y avait justement une librairie pour avoir des pool de processus, je me suis dit qu’un petit script qui vérifie que le concept de pool n’était pas aberrant, et que ceci me prendrait bien moins de temps que la même chose dans le code de Nagios qui n’est pas d’une toute première fraîcheur en terme de lisibilité, même pour du C, sur cette partie.

A l’époque, ce proof of concept n’avait pas pour objectif d’être publié. Mais je me suis rapidement retrouvé confronté à une surprise que je n’attendais pas : j’obtenais des performances excellentes, bien meilleures que ce que produisait Nagios. Piqué dans ma curiosité, j’ai donc voulu valider cela en mettant un peu les deux à égalité : en mettant les algorithmes d’ordonnancement et par implication la lecture de la configuration. Deux points qui allaient se révéler être les deux choses les plus complexes à coder dans ce projet.

Je me suis rendu compte de bug dans Nagios dans l’ordonnancement à ce moment là d’ailleurs (et qui est toujours présent d’ailleurs dans Nagios et Icinga) ce qui ne m’étonne gère quand je vois la taille réduite du code de Nagios sur cette partie, et ce que ceci m’a demandé en Python (5 fois plus de lignes de codes Python environs, et 1 mois entiers de prise de tête sur des algorithmes de calculs de date…). Au final, là encore, les performances étaient au rendez-vous.

Je décide donc de prévenir les auteurs de Nagios. Je n’ai pas eu de réponse de l’auteur principal, mais une un peu évasive et peu convaincue d’un des coauteurs. Je décide donc de continuer et tenter de régler les soucis d’architectures distribuées. J’ai donc commencé à concevoir ce qu’était pour moi l’architecture idéale. J’ai donc “découpé” mon daemon en plusieurs morceaux au fil du temps, l’architecture n’étant pas arrivé en ce qu’elle est du jour au lendemain 🙂

L’un de ces découpage permet LA fonctionnalité de Shinken à l’époque : le découpage intelligent de configuration pour la disperser suivant les “ressources” de supervision. Ceci a aussi donné le nom au projet, un Shinken étant un katana utilisé dans la guerre car il est le plus coupant (puis le nom sonnait bien 🙂 ). Je propose d’ailleurs au passage cet algorithme de découpage à d’autres projets, mais il ne les intéresse pas.

Je publie de code pour demander des avis et j’ai ma première contribution d’un autre auteur de livre Nagios, un allemand nommé Gerhard Lausser , qui deviens co-leader naturel du projet de part sa forte implication. Là arrive un dilemme : notre outil fonctionne très bien, gère 90% du boulot de Nagios, est performant et codé de manière très modulaire. Mais backporter le code en C prendrait un temps monstrueux, surtout quand on regarde le peux de temps de développement alloué au core Nagios par ses auteurs déjà à l’époque. Je demande ainsi s’il serait envisageable d’avoir une branche “Nagios 4”” qui permettrait à notre code de mûrir et aux auteurs de prendre la main et faire en sorte d’une migration entre l’ancienne implémentation et la nouvelle se fasse e la manière la plus douce possible, même si elle doit prendre 2 ou 3 ans. Pas de réponses, donc je décide de monter d’un niveau et je fais la même proposition sur la mailing list Nagios-devel. Là, toujours pas de réponse de la part de l’auteur de Nagios, mais un échange avec un des co-auteur (le même que la première fois, qui est une personne bien plus ouverte que ses collègues au final) qui tourne malheureusement au troll sur les langages car il ne voyait pas à l’époque d’un bon oeil le Python, comme bon nombres d’autres codeurs C.

N’arrivant pas à obtenir une réponse de l’auteur principal (que j’attends toujours, enfin une vraie, pas un FUD sur la licence utilisée…), et n’arrivant pas à convaincre du bien fondé de cette branche et de ce code, je décide de monter le projet Shinken comme indépendant de son grand frère. Le drôle de fork est fait, un peu à contre coeur à l’époque.

Mes sources de motivations étaient au tout début l’amusement et les défis techniques (je suis particulièrement fier du calcul de la date de checks pour tous les cas de timeperiod par exemple 🙂 ). Puis quand c’est devenu plus sérieux et que ça pouvait régler mes soucis au travail (je suis admin d’un parc de 300 serveurs dispersés sur 50 filiales de par le monde environs) je me suis dit que ça pouvait intéresser d’autres personnes, ce qui fût réellement le cas :).

Désormais je crois plus que jamais à ce projet, et j’aimerai pourquoi pas qu’il prenne un part plus importante dans mon activité professionnelle, comme pour des activités de consulting ou de formations par exemple à moyen terme (étant un heureux papa de deux petits bouts je ne peux me permettre de me lancer à cours terme dans une telle activité).

Développes tu Shinken seul ? As tu des contributeurs réguliers ?

Je suis le responsable d’une majorité de lignes de codes, et donc de bugs en effet. Mais je ne suis pas seul heureusement. Côté codeurs, Gerhard qui fût l’un des premiers contributeurs externes est désormais co-leader du projet et code régulièrement. Il est même maître sur certains modules importants comme celui qui permet à Thruk ou PNP (métrologique) d’obtenir leurs informations. Nous avons également eu le soutient d’un autre codeur allemand qui papillonne d’un projet à un autre, mais qui nous a bien aidé à nettoyer le code à une époque, ainsi qu’un autre codeur qui est un spécialiste du refactoring/nettoyage et de la recherche de bugs (salut Greg) 🙂 Nous avons également l’aide ces derniers temps d’un codeur d’UI, nommé Andreas, qui nous aide grandement sur ce nouveau domaine auquel nous ne sommes pas trop habitués 🙂

Mais les codeurs ne font pas tout, loin de là. Quelques personnes nous aide sur les forums pour répondre aux utilisateurs, écrire/corriger la doc (coucou Seb, Denis et Remi 🙂 ), tester de nouvelles fonctionnalités, dessiner le logo (salut Romu), faire des packages pour les distributions principales ou écrire des scripts d’installations ;). Ceci nous aide encore plus qu’un patch car se sont des tâches très ingrates du point de vue “codeur”, mais qui est pourtant l’un des aspect les plus cruciaux pour la réussite d’un projet! Je tiens donc à les remercier du font du coeur, car un projet c’est avant tout une communauté avant d’être des lignes de codes. Ils sont la vraie force de ce projet qui tente d’être le plus ouvert possible.

Quels sont pour toi les trois principaux points forts de Shinken par rapport à Nagios Core ?

Pas simple de répondre à cette question… On pourrait s’attendre à ce que je dise son architecture distribué, mais en fait ceci n’arrive qu’en 4ième position (même si pour certains confrontés à des soucis de performances il va naturellement remonté en première ligne dans leur cas).

Dans l’ordre :

  1. mise en avant du trio : corrélation + règles business + notion d’importance “business” qui simplifie grandement la vie des administrateurs
  2. le fait qu’il tourne sous Windows (et Android, mais j’ai encore du mal à trouver un vrai usage pour ce dernier 🙂 )
  3. ouverture du projet (j’ouvre sans trop poser de questions le temps que la personne veux aider) 

Le premier permet aux administrateurs d’un grand parc de se concentrer sur ce qui est “important”. Hors à notre époque de ressources humaines limitées, c’est plus que nécessaire.

Le second est souvent sous estimé, mais il est pourtant crucial dans le futur succès du projet. Nous avons vu que Nagios était orienté pour les infra de taille moyenne. Or Shinken lui couvre tout le spectre : moyen; haut avec le distribué mais également tout petit parc qui n’ont souvent pas d’admin Linux sous la main et seulement un serveur Windows à disposition.

Le dernier est tout simplement naturel pour moi, je ne saurai fonctionner autrement, mais le succès d’un projet passe par son ouverture. Il n’y a qu’a voir une preuve en regardant le déclin de Nagios : c’est plus un problème humain d’un projet qui n’avance plus dans son ensemble que technique qui est en est la cause.

Et les trois points faibles ?

  1. Le relatif manque de grosses productions tournant avec Shinken. Ce n’est pas étonnant vu que jusqu’à maintenant il était vu comme jeune, et mis à part l’aspect distribué n’apportait pas forcément beaucoup à Nagios (ce qui est loin d’être le cas 🙂 ). Son image ne justifiait pas encore une migration d’un des élément central de son IT du point de vue infra. Le manque de support d’entreprise fait parti de ce point. Il fragilise encore son image (“fait dans un garage”, alors que non, c’est “fait dans un bureau” 🙂 ) et limite fortement les conférences que l’on peux donner pour évangéliser ce projet. Heureusement, c’est un point qui s’améliore avec le temps 🙂
  2. Pas assez de tutoriaux “près à consommer” sur ce qu’apporte Shinken par rapport à Nagios.
  3. Il n’a pas sa propre UI, ce qui impacte fortement sa visibilité quoi qu’on en pense.

Quels sont les raisons que tu peux mettre en avant pour convaincre une DSI de changer de solution de supervision et de se tourner vers Shinken ? (question de Guillaume Reynaud du blog Quick Tutoriel)

Un outil de supervision est là pour aider les admis à garder les services pour les utilisateurs en état de fonctionnement. Dis comme ça c’est simple, mais en fait si c’était simple à atteindre il y a 10ans (quelques dizaines de serveurs tout au plus, des services infra qui avait une vue “pure IT” – non business – et des services rarement en cluster) avec des outils comme Nagios n’est plus possible efficacement.

Un service qui tombe est désormais directement converti en monnaie sonnante et trébuchante par le directeur financier. Or nous avons désormais une vue plus “business” qu’IT, des parcs de plus en plus large, de nombreuses couches d’abstractions (qui a dit virtualisation?), multiplication des serveurs et des services et des contracts de services sur la tête (arriver à ce moment là de la conversation, le DSI devrait être plus réceptif déjà, car ce sont des soucis qu’il a tous les jours).

Shinken est justement pensé pour cela : monté en charge sans soucis, notion dans le core de la criticité d’une application, de la notion de cluster, de la corrélation et ainsi arriver à une chose si simple à expliquer, mais si dure à obtenir : faire en sorte que les admins puissent se concentrer en priorité sur les problèmes sources qui impactent des services importants pour le business. Nagios se “vends” lui même comme un outil de supervision “IT”. Ceci n’est plus suffisant. Faut dépasser la vision pure IT, et passer au niveau “business”, car c’est ça que l’on attend les services informatiques désormais. Leur solution de supervision doit suivre logiquement. (ici, le DSI doit être plus réceptif, donc l’achever avec les gains apportés par la métrologie, sortir une carte ou deux de Nagvis, et c’est gagné).

En réaction à l’orientation très fermée du développement de Nagios Core, on voit fleurir de nombreux forks. Tu arrives donc dans un marché très concurrentiel…

Oh que oui ! D’un certain côté tant mieux, ceci laisse le choix à l’utilisateur, mais le risque réside dans la fragmentation de la communauté en plusieures bien moins fortes. Ceci est une part du dilemme qui m’a animé avant de publier Shinken en tant que projet à part entière. Mais j’ai pensé que même si le projet n’arrivait pas à s’imposer, au moins il aurait été un « proof of concept » géant sur où il fallait aller dans la supervision à mes yeux.

Au final, il semble bien prendre et j’en suis très heureux. On voit encore fleurir les forks, come celui dernièrement de Centreon, mais je pense que l’écosystème va jouer son rôle, et va sélectionner les meilleurs projets. Qui sait, peux être que Nagios sortira grand vainqueur (même si j’en doute fortement)? Qu’Icinga amènera de vraies avancées, que quelqu’un arrivera à comprendre l’architecture de Merlin ou que le couple Centreon-engine/Centreon-Broker raviera cette première place?

Un risque fort réside dans le fait d’avoir des coeurs “presques compatibles”, un peu comme un HTML à la mode IE6, le tout poussé par des besoins business des différents intervenants qui n’auraient plus d’intérêt à coopérer. Il ne faut pas oublier que des solution comme Zabbix montent aussi au créneau et réclame cette première place d’outil de supervision du monde Open Source. Bien malin sera celui qui saura ce que va donner cet Opéra joué par des musiciens qui on leur propre partition à jouer. Espérons seulement qu’un chef d’orchestre se révèle et que la musique reprenne une certaine harmonie. Ce vote se faisant par les utilisateurs, il sera sage et justifié. C’est après tout l’un des principal avantage de notre écosystème “Open Source” tant concurrentiel et sans merci !

Pour un utilisateur connaissant bien Nagios, quel est l’investissement en temps pour switcher vers  Shinken ?

Pas énorme. Disons une matinée pour l’installation propre et comprendre le fonctionnement global. Puis une après-midi pour mettre en place son premier environnement distribué/hautement disponible complet en suivant le tutorial. Beaucoup d’efforts on étés fait pour que la migration se passe de la manière la plus douce possible, comme la génération automatique de certains modules par exemple. En ce qui concerne les fonctionnalités avancées comme les règles business et les notion d’impact business, on rajoutera une matinée supplémentaire, pas tant dans l’écriture, mais surtout dans ce que ceci implique en matière de supervision 🙂

Une petite remarque par contre : pour un utilisateur ne connaissant pas Nagios, il y a toujours un certain temps d’adaptation qui ne diffère pas trop de Nagios. Comme par exemple comprendre les concepts de supervision (que beaucoup passent bien trop rapidement à mon goût) et les différentes sondes. Vous pouvez rajouter tous les outils de découverte que vous voulez (comme celui dans Shinken 🙂 ), ces phases seront toujours importantes pour pleinement utiliser l’outil à sa juste valeur. Un outil de supervision mal maîtrise fait plus de mal que de bien. Cette phase est donc cruciale et mérite un certain investissement qui sera rentabilisé par centuples plus tard 🙂

Quels sont les principaux avantages de Shinken par rapport à une solution comme Centreon ? (question de Guillaume Reynaud du blog Quick Tutoriel)

Exactement les mêmes que par rapport à Nagios, Centreon apportant une UI, certe pratique, mais qui ne révolutionne pas la conception de la supervision. Shinken avec son système avancé de corrélation, règles business et notion d’importance si (enfin il essaie au moins). Ce sont des choses qui aident les admins et leurs chefs dans leur vie de tous les jours, bien plus qu’un nouveau style CSS. Ceci sera vu un peu plus loin d’ailleurs.

Il faut voir par contre que Centreon est une solution complète, alors que Shinken est un outil, une brique de base. Centreon offre par exemple une gestion très pratique des traps SNMP ou son propre service de reporting.

Heureusement, les deux ne sont pas antinomiques, et il est possible, mais non trivial, de les faire dialoguer. C’est d’ailleurs ce que j’ai encore en production. Ceci grèvera cependant les possibilités de Shinken, comme par exemple la définition des règles business ou encore les notions d’importance business (des patchs “hacks” sont en cours pour Centreon 2.4). Mais qui sait, si la demande envers le projet Centreon se fait pressante, on peux espérer un support plus important de Shinken dans ce dernier, même si il faut bien le reconnaître que l’arrivée récente de centreon-engine ne va pas dans ce sens.

De part son architecture, Shinken offre nativement une supervision distribuée hautement disponible (contrairement à d’autres outils de supervision open-source),penses tu que cette fonctionnalité fait de shinken un outil a n’utiliser que sur des grandes architectures de système d’information ? (question d’Anthony Paradis modo du forum de Monitoring-FR)

Je ne pense pas, car justement je ne mettrait pas l’architecture dans la top 3 de ses avantages.

Une petit société avec 10 serveurs sous Windows sera bien contente d’avoir son système de supervision sur cette même plate forme, et mettre facilement un backup en place sur un second.

Une de taille moyenne sera contente d’enlever un serveur physique Nagios et mettre une machine virtuelle Shinken à la place grâce au gain de performances. Ils seront content également d’avoir un outil qui fait la liaison de dépendance automatique des VM et des hôtes pour eux, avec le support des migrations de machines virtuelles d’un hôte à un autre sans avoir à toucher quoi que ce soit.

Passons à l’actualité, la version (0.8 aka Guilty Gecko) sort dans quelques semaines. Mise à part les classiques corrections de bugs, quelles sont les nouvelles fonctions ?

Comme vu dans la dernière release, les aspects d’architectures sont finis, donc pas de grosse annonce de ce côté là. Cette version sera d’ailleurs la 0.8 et non la 0.7 car Shinken est déjà en production à plusieurs endroit sans soucis, donc il est temps d’accélérer un peu le mouvement vers la 1.0 qui devrait être pour la fin de l’année si tout va bien, et qui sera un signal fort sur la stabilité du projet.

Cette 0.8 aura donc principalement :

  • un outil CLI pour interroger/commande directement le daemon principal
  • des améliorations des “business rules” qui gèrent mieux maintenant les états dégradés
  • une reprise en main du module GLPI par les auteurs de ce derniers, donc une bien meilleure intégration entre les deux outils
  • un module “générique” de chargement depuis une base mysql (pour gérer les X outils de CMDB par exemple)
  • une possibilité de définir des modulation de la criticité business d’un élément suivant la période. Par exemple un serveur de paye est critique 3 ou 4 jours par mois, mais est “normal” le reste du temps.
  • un module thrift
  • mais la grosse partie qui nous a occupé une grande partie de l’été et qui va nous occuper encore un moment : l’arrivée d’une interface utilisateur dédiée !

A cours terme, quelles orientations penses tu donner à Shinken ?

Je pense qu’il faut dépasser la vision d’outil et se diriger vers la solution de supervision.

Combien d’administrateurs ont encore le temps de devenir des experts dans la supervision et monter leur propre solution à base de Shinken ou Nagios à la main ? Combien d’administrateurs sous Windows attendent un outil de supervision simple à mettre en place et sans prix exorbitant de licences ?

Les administrateurs d’aujourd’hui ne sont plus des barbus qui recompilent tous leurs outils, même si ceci m’attriste un peu il faut bien l’avouer (j’ai une capillarité limitée mais je suis un barbu dans l’âme 🙂 ). Mais c’est un fait, désormais nous mettons en place des solutions, non plus des outils. Nous devons nous concentrer sur les services rendus aux utilisateurs et arrêter de ne penser qu’à l’IT ‘infra’. On ne fait plus une infra avec des briques qui sont de simples outils, mais avec des briques qui sont elles mêmes des solutions.

Ce n’est pas pour rien que Zabbix a un succès grandissant : c’est rapide à mettre en place et l’utilisateur n’est pas perdu. Je ne suis pas un fan du fonctionnement “supervision” de Zabbix que je ne trouve pas assez flexible pour les modèles de corrélations (et donc source de tempêtes d’alertes, qui est l’ennemi juré en supervision), mais il a une grande qualité que l’on ne peux pas lui renier : on le met en place rapidement et “ça marche”.

Ceci n’empêchera pas Shinken de pouvoir être utilisé comme une simple brique d’une autre solution plus grosse de type Centreon, il est hors de question de casser ce côté modulaire et le core actuel continuera d’être utilisable seul bien évidement.

On reproche souvent à Nagios le manque d’ergonomie de son interface utilisateur (UI) basée sur des standards/technologies Web dépassés. Actuellement, Shinken utilise des UI externes (comme Thruk) qui copient plus ou moins cette dernière. A ton avis quelle est l’interface graphique permettant d’exploiter au mieux Shinken? (question de David Paugam du Groupe Asten)

Il est vrai que les technologies de l’UI de Nagios sont des hérésies à l’heure actuelle (CGI en C qui parse un gros fichier plat, tout ce qu’il ne faut pas en gros). Mais ce qui m’embête bien plus c’est son ergonomie et surtout la vision de la supervision qu’elle propose et le peux de service qu’elle rends à l’utilisateur au final. On mettrait un convertisseur XSL vers HTML en partant du fichier de status que l’on obtiendrait quelque chose de similaire.

Et ceci est le même constat pour les autres interfaces de visualisation (Thruk, Ninja, Centreon, Icinga 1.0 ou 2.0 ou alors MK/Multisite). Si on prends un peu de recul, que l’on enlève les jolis styles CSS et les bouts de javascript de certaines qu’est ce qu’elles proposent ?

Et bien les mêmes vues ou presque. Elles nous proposent toutes des vues ‘IT mode infra’ à la sauce CGI. On a donc le droit à une liste longue comme le bras d’éléments orange ou rouge sans aucun ordre (il est inutile de montrer du vert à un admin, le vert c’est réservé aux chefs 🙂 ). Or à l’heure actuelle on a pour un même service rendu aux utilisateurs au moins 3 environnements : DEV, QUALIF et PROD. Or lequel est important ? PROD. Le reste c’est à traiter après les autres.

De même, un service comme un ERP est plus important qu’un outil pour emprunter des DVD au CE. Il est donc crucial que l’administrateur se focalise en priorité sur ce qui est important pour le business, ca c’est ça qui le paye à la fin du mois !

Autre chose, nous avons maintenant des services qui se composent de clusters qui reposent sur des infras à X niveaux (au minimum Web frontaux, BDD, répartiteurs Web, serveur disque, serveurs ESX de virtualisation, baie de disque et toute la partie réseaux ethernet ou SAN bien entendu). Si un élément “pur infra” comme un switch tombe, tout le reste part avec lui, sur tous les services, sur tous les environnements. Vous allez donc avoir une part importante de votre infra en rouge vive sur votre console. Or une seule info importe pour l’administrateur : quel est l’élément source qui m’a causé tout ça ? Le reste est bon à mettre à la poubelle, c’est l’unique info qui importe à l’admin. Son chef lui voudra les mêmes infos mais dans un sens de recherche opposé : quels services sont tombés et pourquoi ?

Or, les outils ci-dessus n’aident en rien à cela. Il n’y a pas de priorisation des éléments, pas de visualisation de la corrélation faite au seins de l’outil, sous forme de graph ou autre. Et ceci en mettant de côté les vues “opposées” des admins et des responsables d’infra qui ne peuvent pas avoir les mêmes vues, car leurs manière de voir les choses est diamétralement opposée !

La seule UI qui a innovée ces dix dernières années dans ce sens c’est NagVis ! J’ai intégré quelques vues en ce sens dans Thruk en début d’année, mais ça n’a pas trop pris et on reste toujours avec la même philosophie qu’il y a 10 ans, ce que ne cache pas l’auteur de Thruk. Il conviendra parfaitement aux administrateurs qui n’ont pas/(pas besoin d’) un point de vue “business”. Pour les petits sites, MK/Multisite est très “joli”, mais est très lié à l’agent check_mk, et peux être considéré comme une solution à part entière, mais sans la partie modulaire par contre.

Reste le problème de la configuration. Là Centreon se pose encore en grand maître des lieux, mais n’est pas adapté à Shinken et va fortement limité son intérêt. Les autres solutions graphiques de configuration souffrent du même problème actuellement, il n’y a donc pas de solution miracle malheureusement à l’heure actuelle…

Souhaites tu intégrer une UI propre à Shinken ?

La réponse est oui !

En fait, j’ai tenté ce que j’ai pu pour l’empêcher, mais le fait est là : la vision problème source/ impact / criticité du coeur de Shinken n’est pas encore prise en compte par les interfaces. Quand le coeur de Shinken n’était pas encore fini à mon goût, je ne voulais pas lancer un projet qui aurait canibalisé nos forces.

J’ai donc tenté de motiver le projet Thruk qui a bien accepté mes patchs malgré mon Perl catastrophique (en même temps ça reste du Perl, ça se trouve il est très beau pour du Perl…), mais l’interface reste à dominance “old school” car elle plait ainsi à beaucoup d’anciens utilisateurs de l’ancienne CGI.

L’auteur de MK/Multisite n’est pas des plus ouverts à mes idées et mes tentatives de présentations de ma vision de la supervision auprès de Centreon n’a pas eu beaucoup d’effet et n’a pas dû convaincre car désormais nous avons un fork de Nagios en plus 🙂

Je me trompe peux être, mais je suis convaincu que mettre en avant la corrélation, la priorisation et tout ce qui va avec la vision “business” facilitera grandement le travail des admins et des responsables d’infrastructure.

Mon objectif est d’arriver à une UI qui permettra de dire simplement à :

  • un admin : cet élément d’infra (genre switch, car c’est bien connu c’est toujours le réseaux le responsable…) est un problème source qui engendre un fort impact négatif sur des services importants. Règle le. (donc il donne la TODO list aux admins)
  • un responsable d’infra : voici la liste des services rendus aux utilisateurs, celui là à un soucis, et de telle importance et est impacté par le swtich X, mais est en cours de résolution par Y. (donc il donne sur qui taper aux chefs… na taper pas sur l’UI, de toute manière ils l’auraient fait!)

Avec de l’aide d’un designer web, nous nous sommes lancés dans des mockups d’interface qui ne ressemblent pas vraiment à ce qui existe actuellement, tant sur le fond (UI sans BDD ni requêtes, assez original non?) que surtout sur la forme qui se veut très “user-friendly”, avec très peu de vues, mais très étudiées et utiles (80% des utilisateurs restent toute leur vie dans 20% des pages, gagnons du temps, ne faisons que 20% des pages).

Un bon indicateur de succès sera si les utilisateurs considèrent cette interface comme le “gnome” des interfaces de visualisation de supervision, reléguant les autres aux rang de WindowMaker. Elle ne remplacera pas un Thruk ou un Centreon chez les plus barbus d’entre nous, les vrais qui tournent en gentoo, changent les options de compilation de GCC pour gagner 0.5% de perf et ne voient pas l’intérêt des tablettes graphiques dans le monde de demain… Mais j’arriverai à vivre avec ça 🙂

Cette UI intégrera t’elle un outil de génération de rapports dont les DSI sont très ( voir trop) friand ?

Pas dans un premier temps et ce pour trois raison :

  • on doit déjà faire le reste de l’UI 🙂 Le reporting c’est la dernière étape, même si c’est celle qui fait “vendre” une solution à un DSI. Mais vu que l’on ne vends rien…
  • j’espère bien que le projet Nareto va renaître de ses cendres pour le faire à notre place 🙂
  • il faut définir le modèle de données pour cela (dit “en cube”). Étant également DBA à mes heures perdues, je n’arrête pas de pester auprès des devs qui font des requêtes de reporting sur une base qui n’est pas conçue pour ça, avec des schémas purement transactionnels non cubiques et qui me plombent mes (pauvres) serveurs. Hors de question de coder un outil de reporting qui va taper dans un schéma de supervision “temps réel” par exemple, ça serait une hérésie, même si c’est plus rapide à coder dans un premier temps évidement.

Et des fonctions d’édition en ligne des fichiers de configurations ?  (question de David Paugam du Groupe Asten)

Cela sera l’étape intermédiaire avant le reporting en effet, et devrait être consommatrice de temps. Mais je doute dans ce cas de l’édition “in line” en fichiers textes. Outils de configuration + fichiers plats ne font pas bon ménage à mon goût. Une “base” de configuration serait plus adaptée, mais je n’ai pas poussée la réflexion bien plus loin.

Sera t’elle compatible pour une utilisation mobile depuis les smartphones ou comptes tu faire développer des applications dédiées (iPhone et Android) ? (question de Nicolas Ledez du blog Le bazar de Nicolas)

Alors là c’est simple : j’ai une vision bien plus gentille avec les designers d’UI depuis que j’ai une tablette graphique et que j’ai regardé mon fils de 2ans l’essayer. Il l’utilise sans que je lui explique. Je me suis donc penché un peu plus sur ce domaine qui désormais me fascine, car l’ergonomie est quelque chose que j’avais en tête en pensant à celle de Shinken mais qui m’a permis d’avoir des exemples concrets de ce qu’il faut faire, et ne pas faire.

L’interface sera ainsi bien plus proche d’une interface “smartphone” que d’une UI classique d’un outil d’administration, ce qui explique pourquoi elle ne vas pas plaire à tout le monde également. Donc pas de soucis, les tablettes et smarphones sont prévus 🙂

D’un point de vue technique, je ne vois pas l’intérêt de l’application native quand on a toutes les possibilités d’HTML5 sous la main et que l’on n’a pas besoin de prendre en photo son utilisateur.

Il est donc à prévoir d’ailleurs une non-compatiblilité avec IE6 ou 7, et là clairement ils ne sont pas dans le cahier des charges. Je ne serai pas contre un patch (non intrusif…) qui permettrait de les supporter, mais ces navigateurs étant tellement mal faits et limitatifs dans l’interface qu’il serait non efficace de tenter de les gérer.

Quel logiciel de métrologie conseilles tu en parallèle de Shinken ?  (question de David Paugam du Groupe Asten)

PNP4 Nagios. C’est un très bon outil qui a d’ailleurs son propre module depuis Shinken. Celui de Centreon est pas trop mal non plus, mais est plus consommateur de perfs.

Je ne suis pas trop pour un Cacti en parallèle d’un outil de supervision, car on aura tendance à demander à ce dernier de rechercher l’information lui même (par exemple en SNMP) alors que l’on a déjà effectué une telle demande dans un agent de supervision. Ce n’est pas trop du point de vue charge machine ou réseaux que ceci m’embête, mais bien d’un point de vue conceptuel où on fait deux fois la même chose, et où l’admin va devoir gérer deux agents et configurations, ce qui est totalement injustifié quand on a un PNP qui peux faire tout aussi bien que Cacti par exemple.

Shinken est développé en langage Python. Quels sont pour toi les avantages de ce langage par rapport au langage C dont Nagios Core est issu ? Une vue extérieure pourrait penser que le Python est moins performant que C, surtout pour des applications proches des couches systèmes et réseaux.

J’avais le même a priori il y a quelques années. J’ai été élevé à l’assembleur et au C, avec de l’Emacs et du Makefile fait à la main (je n’ai pas tourné barbu pour rien hein…). Même si j’avais bien vu l’intérêt de l’orienté objet pour la création d’UI (modèle MVC + orienté objet = moins de code, moins de bugs), mais pas dans le domaine très “noble” des daemons serveurs.

J’ai aussi été bassiné pendant de longues années par des algorithmes au nom impossible à retenir (Disjtra, je suis désolé, j’adore ton algo, mais alors ton nom….) mais qui faisaient toute la différence dans ce que le développeur mettait comme “intelligence” dans son code (bien plus que de joli commentaires ou des lignes de 80 caractères au maximum). Les algos allant bien évidement avec la recherche de leur efficacité en O(1) si possible, O(n) dans de nombreux cas, et O(n*…*n) si on s’y était mal pris.

Je n’avais jamais fait le lien entre les deux. Pour moi la performance allait tout d’abord au langage choisi (plus c’est bas niveau, plus c’est rapide) puis le reste. Or c’est totalement faux, et c’est en devenant admin et étant confronté à des codes/requêtes testé(e)s sur de petits cas de tests mais qui se révélaient désastreux sur un cas réel (genre testé en 0.1s avec une table à 100 éléments, et qui prends 8h sur une table avec 10000). Le tout sur des serveurs plutôt “costaux”.

Et là le langage (haut niveau) n’y était pour rien, on aurait pu faire le même en C que ça aurait pris aussi 8h (aller, 7h45, toujours aussi insupportable pour un utilisateur et l’administrateur du pauvre serveur).

Non, la performance vient en premier lieu des algorithmes, pas du code. Mieux vaut un bon algo avec un langage lent qu’un mauvais avec de l’assembleur bien codé mais un algo mal pensé.

Or si on y pense, un outil de supervision a besoin de deux choses :

  • calculer une date de prochain check
  • lancer la sonde de supervision, donc un fork()

 Le reste, ce sont des problèmes de haut niveau.

 Si on refait la même chose que Shinken mais en C, on gagnera en performance sans aucun doute. Mais ceci va tout simplement demander un temps astronomique avec les ressources des projets Nagios ou Shinken, et on perdrait en modularité de code (on ne peux architecturer aussi simplement et rapidement un code en C qu’un code en Python, aussi bon codeur que l’on soit).

On peux se dire que plus on se rapproche du système, moins l’importance des algos est importante, un fork() est un fork() après tout. Mais en fait non, la manière dont on fait les appels bas niveau à un impact direct sur les performances. Par exemple, Nagios passe le plus clair de son temps à faire des choses “de la mauvaise manière” :

  • lancer des fils, donc des forks() pour ensuite les tuer. Le pauvre système à un mal fou à suivre, un fork() c’est très lourd!
  • écrire des fichiers plats qui seront lu par le processus principal pour obtenir les informations. C’est bien rigolo, mais le VFS du noyau n’est pas ce qui est le plus rapide au monde, si on pouvait directement parler de mémoire à mémoire avec une socket, on gagnerait un temps énorme!

 Ca tombe bien, ceci a été crié depuis 2 ans maintenant, mais les projets Nagios et centreon-engine s’y attellent aujourd’hui. Je leur souhaite bien du courage. Personnellement j’ai préféré faire confiance aux codeurs de Python qui sont sûrement bien plus doués que moi pour gérer ces problèmes bas niveaux de communication inter-process. Ceci permet par exemple de passer plus de temps sur des aspects importants pour la supervision comme les notions d’importances ou de corrélations. Ces dernières ne demandent pas de puissance de calcul particulières, mais résolvent les problèmes de bon nombres d’administrateurs dans la vie de tous les jours, les problèmes de performances étant désormais oublié 🙂

Le fait de disposer d’un coeur développé en Python permet d’installer un serveur Shinken sur une machine Windows. Conseilles tu cette architecture ? Quelles sont les éventuelles limitations ?

Oui, et vous remarquez que j’ai même mis ceci dans le TOP3 des features! Shinken est conçu/testé pour deux environnements : Linux et Windows.

Le Windows sera moins performant, non par ce qu’il est codé avec les pieds, mais bien parce qu’il a des fork() plus lent (le modèle de sécurité est plus évolué sous Windows, et implique donc des calculs bien supérieurs à ce que l’on fait sous Linux). Je n’ai pas de chiffres, mais on peux s’attendre à diviser les perfs par deux sur le lancement des sondes.

Je conseille donc pour les gros parcs d’avoir si possible des pollers en Linux pour prendre la majorité de la charge (test réseaux, tests des agents, etc). Mais un poller sous Windows peut avoir un gros intérêt également :

  • on peux le lancer avec un compte de domaine, donc potentiellement lancer directement des requêtes WMI sur les autres Windows. Et avec ça, on fait presque tout sous Windows!
  • pour les petits sites qui n’ont pas d’admin Linux, ils n’ont de toute manière pas le choix 🙂

Si c’est un reactionner, on peux restarter des services à distances, pratique…

Outre les problèmes de performances, il y a quelques limitations :

  • il n’y a pas de pipe nommé (nagios.cmd) sous Windows facilement acessible, donc il faut passer par un module externe pour la supervision passive (LiveStatus par exemple)
  • il y a beaucoup moins de sondes disponibles sous Windows. Très peu de packs tout en uns sont fait.
  • Aucune UI n’est faite pour !

Le premier est facilement contournable, surtout avec l’arrivée de la commande CLI dans la nouvelle version.

Le second est plus problématique, et il faudra qu’on s’y attelle sérieusement 🙂

Le dernier sera réglé avec l’UI de Shinken.

Quel environnement de développement (IDE, outil de debug, gestionnaire de version, tracking…) utilises tu pour le développement de Shinken?

Comme tout le monde, ce avec quoi j’ai appris à l’école:

  • IDE : Emacs, avec un module pour pylint et coverage
  • Debug : print, mais surtout la méthode de développement dirigée par les tests
  • Gestionnaire de version : GIT (le projet est hébergé sur GitHub)
  • Tracking : trac sur sourceforge (historique), mais aussi GitHub
  • Hudson : pour les tests de non régressions
  • Web : WordPress, car c’est tout simplement génial à administrer et mettre à jour 🙂

Si des lecteurs sont intéressés pour s’investir dans le développement de Shinken. Quels sont les besoins les plus importants ?

Un peu de tout en fait !

Des codeurs qui ont besoin d’un certain besoin ou veulent s’amuser en Python, des webdesigners qui sont tentés par la nouvelle UI qui se lâche dans ce domaine (on n’a pas peur de l’HTML 5 et du CSS3 on va dire 🙂 ), des rédacteurs de tutos sur le wiki, des modérateurs sur le forum, quelqu’un qui envoie un petit “merci” par mail (ça aide énormément à maintenir le rythme!) ou alors tout simplement un admin qui tente de l’installer, remonte un bug où nous dit qu’il est en production.

Toute personne qui veux aider est la bienvenue, il n’y a pas de “partie réservée” dans ce projet, mis à part le choix du nom (débile en général) de version qui est mon petit coin à moi 🙂

En discutant personnellement avec des responsables informatiques, les principales craintes qu’ils énoncent à l’utilisation de Shinken en environnement de production sont la pérennité de l’équipe de développement (et donc indirectement du produit) et le support technique. Comment les rassurer sur ces points ?

Ce sont des considérations justes et logiques. J’aurai la même en tant qu’admin. Pour l’instant la communauté est en train de monter, les tests se multiplient et le nombres de contributeurs augmente. Mais il n’y a pas encore de SSLL qui le proposent en formation ou intégration (ça arrive). J’ai par exemple déposé le nom Shinken à l’internationnal par exemple,si ceci peux démontrer à quel point j’y crois (surtout quand on connaît mon aversion pour les trucs administratifs, et là j’ai été servi..). Donc je pense que Shinken arrivera dans un premier temps par la petite porte, comme l’a fait Nagios avant lui d’ailleurs.

As tu des références d’entreprises utilisant Shinken pour la supervision de leur système d’information ?

Il y a pour ceux où je suis au courant déjà Lectra, société où je travaille (300 serveurs, 7k services), une section de Sogeti sur Bordeaux (12K services), l’hébergeur Sobio (100 serveurs) et un conseil général.

Si d’ailleurs certains l’ont mis en place, nous sommes en phase de recherche de références !

Est il intéressant de déployer Shinken sur des parcs informatiques de petite et moyenne taille ?  (question d’Anthony Paradis modo du forum de Monitoring-FR)

Oui pour les petits, car ils sont souvent sous Windows et là c’est tout simplement leur seule solution “libre” de ce calibre à ma connaissance 😉

Pour les moyens qui sont en pleine virtualisation, le module de création automatique des liens de dépendances entre l’hôte et les VM peux être utile par exemple, et montrer un peu à un DSI l’intérêt de ce genre de projet. On peux également le voir comme un “nagios like” et donc utiliser les mêmes arguments (nombreux!) de ce dernier, mis à part l’importance de la communauté de ce dernier (mais il a désormais un avenir incertain sous cette forme, il devient donc plus dur de le “vendre”).

Il offre aussi des simplications importantes dans la configuration de Nagios, donc un bac°5 n’est pas forcément nécessaire pour mettre en place des escalades de notification à 2h et 4h sur une partie du parc par exemple. Cela prends plutôt 5 mins désormais 🙂

Pour finir, comment vois tu Shinken dans 5 ans ce qui est une éternité pour un logiciel informatique ? (question de Romain de Woueb.net)

Comme une solution à part entière, c’est à dire :

  • un coeur performant, scalable et qui permet une corrélation avancée : OK, pas la peine d’attendre 5 ans 🙂
  • un environnement de sondes énorme : OK pour Linux, à faire pour Windows, même si ce dernier, un check_windows réglerait déjà 90% du besoin de cet environnement (j’ai un poc en alpha dans les cartons 🙂 ).
  • une UI de visualisation qui permettra à ses utilisateurs d’avoir les mêmes infos qu’un NagVis mais en plus “dynamique”
  • une UI de configuration, très axées découverte et “auto” configuration
  • un agent qui permet la découverte sur les éléments distants “à la check_mk” (ce dernier n’est malheureusement pas utilisable sur un environnement distribués, et l’auteur n’est pas pour changer cela à mon grand regret…)? (on avait dit 5ans hein 🙂 )
  • un module de reporting (si Nareto ne revient pas)

Mais même si nous n’atteignons jamais ça, déjà avoir une grosse communauté et savoir que ce projet a aidé bon nombres d’administrateurs dans leur vie de tous les jours et à leur permettre de se consacrer à des tâches plus intéressantes que courir partout car ils n’arrivent pas à trouver l’élément qui a fait tout tomber, ça serait déjà un objectif tout à fait satisfaisant pour moi.

Le reste (passer devant Nagios, contenir Zabbix, convaincre les gourous de la supervision du bien fondé de ma vision, avoir le temps de finir les deux Final Fantasy que j’ai de retards, …) ce n’est que du bonus. Si de plus ça peux devenir mon gagne pain, ça me permettrait à justifier à ma femme tout ce temps où je passe dessus 🙂

Un petit mot pour finir ?

Comme mot de fin, j’aimerai remercier Nicolas pour cette interview ainsi que tous ceux qui ont posés des questions et qui portent un intérêt à ce projet :).

Nous arrivons à la fin de cet interview. Encore merci à Jean pour sa disponibilité et aux lecteurs qui ont posés de questions intéressantes qui montrent l’intérêt du public pour cette solution de supervision.

Vous pouvez bien sûr poser des questions complémentaire à Jean en utilisant le formulaire en bas de cette page.

Quelques liens relatifs à Shinken:

Catégories
Open-source Planet-libre Reseau

Mounter son espace de sauvegarde FTP en local sous Debian

Voici une rapide explication pour « mounter » dans un répertoire local un espace de sauvegarde FTP. J’ai utilisé cette procédure pour accéder à mon espace de stockage gratuit de 10 Go sur mon serveur Dedibox DC sous Debian Squeeze.

On commence par récupérer les paramètres de son serveur FTP

On a besoin:

  • du nom de la machine hébergeant le serveur FTP (host)
  • un compte utilisateur (login)
  • un mot de passe (password)

Chez Online.net, ces informations se trouve dans la console d’administration:

Une fois ces informations sous le coude on peut passer à l’étape suivante.

On prépare le terrain

On commence par installer Fuse qui va permettre de faire le montage du répertoire en FTP (toutes les commandes suivantes sont à saisir dans une console root):

[cc lang= »bash »]

apt-get install curlftpfs

[/cc]

Ensuite on créer le répertoire local (/mnt/backup dans mon cas) à partir duquel le répertoire FTP distant sera visible.

[cc lang= »bash »]

mkdir /mnt/backup

[/cc]

On teste que tout fonctionne en ligne de commande:

[cc lang= »bash »]

curlftpfs login:password@host /mnt/backup/

[/cc]

Vous devriez pouvoir lire, écrire et effacer des fichiers dans le répertoire /mnt/backup/.

On démounte le répertoire avec la commande suivante:

[cc lang= »bash »]

umount /mnt/backup

[/cc]

On automatise le tout

On lieu d’avoir à saisir à la main ou dans un script de démarrage la commande curlftpfs, le plus simple et transparent est d’utiliser le fichier /etc/fstab qui va mounter automatiquement l’espace FTP au démarrage de votre machine.

Pour cela, il faut d’abord créer un fichier /root/.netrc contenant les informations sur votre serveur FTP, donc après un « vi /root/.netrc », il faut ajouter la section suivante:

[cc lang= »bash »]

machine host

login login

password password

[/cc]

Puis une petite sécurité sur ce fichier:

[cc lang= »bash »]

chmod 600 /root/.netrc

[/cc]

Ensuite on édite le fichier /etc/fstab et on y ajoute la ligne suivante:

[cc lang= »bash »]

curlftpfs#host /mnt/backup fuse _netdev,allow_other,uid=1000,gid=1000,umask=0022 0 0

[/cc]

Note: il faut remplacer uid=1000,gid=1000 par les valeurs données par le résultat de la commande « id ».

Un petit…

[cc lang= »bash »]

mount -a

[/cc]

… plus tard et votre répertoire FTP distant devrait être accèssible depuis votre répertoire local /etc/backup !

Source: Linux Config

Catégories
Nagios Open-source Planet-libre Reseau Systeme

Problème dans l’installeur de la version 3.3.1 de Nagios

Si vous avez essayé d’installé la dernière version en date de Nagios sur votre système, il se peut que l’erreur suivante soit apparue lors du « make fullinstall »:

/usr/bin/install: omitting directory `includes/rss/extlib’

/usr/bin/install: omitting directory `includes/rss/htdocs’

/usr/bin/install: omitting directory `includes/rss/scripts’

make[1]: *** [install] Error 1

make[1]: Leaving directory `/srv/d_bilbo/install/nagios/nagios/html’

make: *** [install] Error 2

C’est en fait au niveau de l’installation du nouveau thème de l’interface Web de Nagios que le bas blesse et notamment au niveau du fichier Makefile qui se trouve dans le sous répertoire ./html.

Pour résoudre ce problème et procéder à une installation complète de Nagios 3.3.1, il faut suivre la procédure suivante (en attendant le patch de la part de Nagios qui devrait bientôt arriver dans la version 3.3.2):

./configure

sed -i ‘s/for file in includes\/rss\/\*\;/for file in includes\/rss\/\*\.\*\;/g’ ./html/Makefile

sed -i ‘s/for file in includes\/rss\/extlib\/\*\;/for file in includes\/rss\/extlib\/\*\.\*\;/g’ ./html/Makefile

make fullinstall

Je viens d’intégrer automatiquement ce patch maison dans les scripts d’installation et de mise à jour automatique de Nagios (à partir de la version 0.82 des scripts).

Donc si vous avez utilisé mes scripts pour installer et ou mettre à jours en version 3.3.1, je vous conseille de récupérer le script de mise à jour automatique de Nagios et de le ré-exécuter sur vos serveurs afin de finir proprement votre installation et disposer du nouveau thème Web:

Merci aux lecteurs qui on permis d’identifier le problème 🙂

Catégories
Nagios Open-source Planet-libre Reseau

Nagios 3.3.1: mise à jour des scripts d’auto installation

Le coeur de Nagios (aka « Nagios Core ») vient de sortir dans sa version 3.3.1 et apporte son lot d’améliorations et de corrections d’erreurs (voir la liste ici). Dans la foulé, je viens de mettre à jour les scripts d’installation et de mise à jour automatique de Nagios pour Ubuntu et Debian.

Vous les trouverez sur le GitHub suivant: https://github.com/nicolargo/nagiosautoinstall

Pour une nouvelle installation

Il suffit de saisir les lignes de commande suivante dans un terminal (en mode root ou avec sudo):

cd /tmp

wget –no-check-certificate https://raw.github.com/nicolargo/nagiosautoinstall/master/nagiosautoinstall-ubuntu.sh

chmod a+x nagiosautoinstall-ubuntu.sh

./nagiosautoinstall-ubuntu.sh

Pour une mise à jour d’un serveur existant

Mise à jour de ce billet: je viens de publier une nouvelle version du script de mise à jour (version 0.9) développé en langage Python qui fait grosso modo la même chose que la version Shell Script (version 0.83) mais avec un affichage et un log beaucoup plus verbeux… 

J’ai fait le test sur un serveur en version 3.2.3 que j’ai migré en 3.3.1. Il suffit de saisir les lignes de commande suivante dans un terminal (en mode root ou avec sudo):

cd /tmp

wget –no-check-certificate https://raw.github.com/nicolargo/nagiosautoinstall/master/nagiosautoupdate.py

chmod a+x nagiosautoupdate.py

./nagiosautoupdate.py

Et voilà le travail.

Catégories
Open-source Planet-libre Reseau Video Web

Vidéo embarquée depuis un véhicule grâce à GStreamer


Ce billet invité a été rédigé par Damien Archenault et Clément Brunel. Merci à eux de nous faire partager leur expérience passionnante de l’utilisation de GStreamer !  (Nicolargo)

Au cours de la dernière année scolaire, deux jeunes étudiants de l’Ecole Supérieure des Sciences et des Technologies de L’Ingénieur de Nancy (ESSTIN), ont élaboré une vidéo embarquée fonctionnant avec GStreamer. Ils ont réalisé ce projet pour leur nouveau véhicule participant au Shell Eco-marathon.

Q’est ce que le Shell Eco-marathon ?

Il s’agit d’une compétition qui depuis 27 ans réunit diverses écoles d’ingénieurs, universités et établissements de l’enseignement supérieur européen pour une course à l’économie d’énergie. Depuis 12 ans, l’ESSTIN, par le biais de l’Eco Motion Team by ESSTIN (qui est le nom de l’équipe de l’école), y engage des véhicules fonctionnant avec différentes énergies.

Le principe de la compétition du Shell Eco-marathon est de parcourir un certain nombre de kilomètres en un temps limité, le tout en consommant le moins d’énergie possible.

L’équipe (composée de 20 élèves de 3ème année, 7 de 4ème année et 2 de 5ème année, encadrés par 7 tuteurs) a participé cette année à la 28ème édition de la course qui s’est déroulée du 26 au 28 mai 2011, sur le circuit de l’EuroSpeedway à Lausitz en Allemagne.

Elle y a fait concourir son tout nouveau prototype Vir’Volt intégrant toutes ses innovations technologiques, dont la vidéo embarquée que vous pouvez voir sur le sommet du véhicule:

Ce projet de vidéo embarquée est en effet tout nouveau, il a été réalisé cette année par Damien Archenault et Clément Brunel qui sont membres de l’équipe, pour répondre à la demande des médias et des sponsors d’avoir des images embarquées en temps réel. Ce qui a pu être réalisé en rediffusant les images sur internet.

Matériel utilisé

Nous avons travaillé cette année avec la société Eukrea qui nous a fournis une carte de développement GNU/Linux embarqué fonctionnant avec un processeur IMX27 et fonctionnant avec une version de linux allégée et OpenEmbedded qui permet de configurer la distribution.

GStreamer et RTSP

Nous avons d’abord essayé d’utiliser un serveur RTSP qui correspondait parfaitement à l’utilisation que nous voulions faire, à savoir diffuser un flux en streaming et profiter des options de lecture standards (lire, pause, stop, déplacement temporel).

Nous allons donc expliquer son installation.On ne peut pas utiliser le gestionnaire de paquet comme sur un système GNU/Linux standard. Il est nécessaire de cross-compiler les fichiers pour qu’ils soient valides pour l’architecture de la carte.

Pour y parvenir, nous utilisons OpenEmbedded qui facilite grandement les choses en proposant lui aussi une liste des paquets disponibles une fois l’environnement de développement correctement installé.

Pour se faire, utilisez la commande:

bitbake gst-rtsp

Un fichier .ipk sera créé et devra être transféré (par tftp et minicom) puis installé via les commandes:

tftp -gr « nom du fichier à télécharger sur la carte » « ip de l’ordinateur cible »

opkg install nomdupaquet.ipk

Une fois installé, vous pouvez utiliser votre serveur en configurant le fichier comme sur ce précédent article du blog et en l’adaptant aux modules spécifiques de l’embarqué. (Utilisez un gst-inspect sur la carte pour les découvrir !).

Vous verrez que mfw_v4lsrc, mfw_vpuencoder font leur apparition et servent à récupérer le flux de la caméra et à l’encoder de façon « plus économe » en ressource pour le « petit » processeur de la carte.

Je ne détaillerai pas plus pour le serveur RTSP, car nous n’avons malheureusement jamais réussi à le faire fonctionner, une erreur survenant lorsqu’un client venait se connecter au serveur.

Passage en GStreamer UDP

Nous nous sommes donc rabattu sur le protocole UDP (avec une couche RTP) pour transférer notre flux vidéo, qui a au moins pour avantage d’optimiser la bande passante, car moins d’informations de sécurité et de contrôle sont envoyées. De plus, en cas de perte de paquet, ou d’arrivée dans un mauvais ordre, les perturbations pour le visiteur sont souvent minimes grâce à la persistance rétinienne.

Pour faire fonctionner le protocole UDP qui est un protocole de la couche réseau (voir modèle OSI) et non de la couche session comme RTSP, nous avons besoin des paquets gst-plugin-rtp, gst-plugin-udp, libgstnetbuffer et gst-plugin-videoscale à installer via opkg install comme précédemment.

Au niveau de l’implantation de ce protocole, il y a donc deux pipelines Gstreamer, une sur la carte (véhicule) et une autre sur le PC client qui va recevoir et afficher le flux vidéo.

Celui de la carte :

La première ligne, pointe vers le client où nous voulons envoyer les images. Dans cet exemple, sur un serveur Dyndns dont nous verrons l’utilité un peu plus loin.

La deuxième commande, la plus complexe, est celle de l’initialisation du flux :

gst-launch-0.10 mfw_v4lsrc capture-width=320 capture-height=240 ! mfw_vpuencoder width=320 height=240 codec-type=std_mpeg4 framerate=13 bitrate=250 gopsize=8 ! rtpmp4vpay send-config=true ! udpsink host=$HOST port=5000

Voici le détail:

  • gst-launch-0.10 : c’est la commande de base, à laquelle on va ajouter des paramètres. (ajouter –v) pour voir le détail de la commande qui s’exécute et avoir la « config » pour le client
  • mfw_v4lsrc : elle permet de sélectionner la caméra comme source du flux
  • — capture-width=320 : Largeur de la fenêtre capturée
  • — capture-height=240 : Hauteur de la fenêtre capturée
  • mfw_vpuencoder : C’est ce plugin qui va nous permettre d’encoder le flux
  • — width=320 : largeur de la fenêtre encodée
  • — height=240 : hauteur de la fenêtre encodée
  • — codec-type=std_mpeg4 : le codec utilisé est le codec mpeg4, ce n’est pas le meilleur codec de compression qui est h264, mais nous avions des erreurs avec ce dernier quand le client venait à se connecter.
  • — framerate=13 : Nombre d’image par seconde transmise
  • — bitrate=250 : quantité de donnée transmises. Il doit être en adéquation avec le type de réseau utilisé : réseau local filaire, réseau wifi, réseau mobile (EDGE, 3G et 3G+ ayant un débit très différent les uns des autres).
  • — gopsize=8 ! (group of picture) représente le nombre d’image envoyé simultanément sur le réseau, ce nom est proche de la moitié du framerate, et favorise la compression.
  • rtpmp4vpay : regroupe les données dans des paquets RTP
  • — send-config=true : envoie la configuration du canal au client. Utile pour récupérer la clé pour synchroniser le client (voir page suivante)
  • udpsink host=$HOST : adresse à laquelle on veut envoyer les données
  • — port=5000 : le port de la liaison entre les deux hôtes.

Celui du client :

Cette commande à l’air compliqué, mais elle est en fait plus simple que la commande de la carte.

gst-launch-0.10 -v –gst-debug=2 udpsrc port=5000 caps= »application/x-rtp, media=(string)video,clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)4, config=(string)000001b004000001b59113000001000000012000c888800f514043c14103, payload=(int)96,ssrc=(uint)1960725087, clock-base=(uint)849638580, seqnum-base=(uint)55554″ ! gstrtpjitterbuffer latency=3000 ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink

Détail:

  • gst-launch-0.10 -v –gst-debug=2 : on lance la commande en debug, pour avoir toutes les infos en cas de dysfonctionnement.
  • udpsrc port=5000 port sur lequel on reçoit les données, il doit correspondre à celui de la commande de la carte.
  • — caps= »application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)4, config=(string)000001b004000001b59113000001000000012000c888800f514043c14103, payload=(int)96, ssrc=(uint)1960725087, clock-base=(uint)849638580, seqnum-base=(uint)55554″ : il s’agit ici de la clé qui caractérise complètement le flux entrant. On la trouve en appliquant le –v sur la commande de la carte, puis en faisant un copier coller de la dernière ligne notée « caps »
  • gstrtpjitterbuffer latency=3000 : il s’agit d’un buffer de 3secondes, non obligatoire, mais améliorant fortement la qualité et les aléas de connexion.
  • rtpmp4vdepay : extraire les données des paquets RTP
  • ffdec_mpeg4 : décode les données qui sont en mpeg4
  • autovideosink : affiche le flux sur l’écran.

Une fois ces deux pipelines initialisés correctement (le serveur puis le client) on peut ensuite récupérer l’ordinateur sur un ordinateur quelconque et cela grâce à l’utilisation d’un serveur DNS comme Dyndns.

L’ordinateur chargé de récupérer les images doit juste être synchronisé avec le serveur DNS à l’aide d’un client comme inadyn ou ddclient, dont le fichier de configuration est le suivant :

## ddclient configuration file temps entre chaque rafraichissement de l’ip

daemon=60

# check every 60 seconds

syslog=yes

# log update msgs to syslog

mail-failure=########### #

pid=/var/run/ddclient.pid

# record PID in file.

## Detect IP with our CheckIP server

use=web, web=checkip.dyndns.com/, web-skip=’IP Address’

## DynDNS username and password here

login=#####

password=#######

## Default options

protocol=dyndns2

server=members.dyndns.org

## Dynamic DNS hosts

NOMDEVOTREDNS.dyndns.org

Diffusion du flux sur Internet

Enfin, pour rediffuser en direct sur internet, nous avons utilisé deux outils formidables que sont webcamstudio qui permet de transformer un flux distant en un flux webcam et le site livestream.com qui permet justement de diffuser au monde entier les images d’une webcam, ou dans notre cas de notre vidéo embarquée.

Voici le résultat tel que les Internautes pouvaient le voir:

Conclusion

Le développement d’un tel projet prend beaucoup de temps car est malheureusement assez peu documenté, mais vous partez déjà avec une bonne piste grâce à cet article.

Merci pour votre lecture, et merci à Nicolargo (NDLR: mais c’est avec plaisir !) qui nous permet de publier via son blog.

Catégories
Open-source Planet-libre Reseau Web

NAT et PAT: c’est quoi donc ?

Sur ce blog, j’aborde régulièrement des sujets technologiques en relation avec les réseaux informatiques. Une des question récurrente concerne la translation d’adresses (et de ports) dans les réseaux IPv4. Nous allons donc essayer dans ce billet d’expliquer le fonctionnement des mécanismes NAT (« Network Address Translation » / Translation d’adresses) et PAT (« Port Address Translation » / Translation de port).

Pourquoi ?

Toutes les machines connectées (PCs, serveurs, imprimantes réseau, smarthphones, télévisions multimédias…) disposent d’une adresse (« adresse IP ») permettant de l’identifier sur le réseau. Il existe deux sortes d’adresses: les privées et les publiques.

Une adresse privée est seulement valable sur un réseau privé et ne peut donc pas être utilisé pour  communiquer sur un réseau public comme Internet. En effet, Internet n’accepte de véhiculer que des adresses publiques. Le principal intérêt de l’utilisation d’adresses IP privées est de disposer d’un grand nombre d’adresses pour bâtir ses réseaux privées (entreprises, domicile…) et ainsi de palier au cruel manque d’adresses IP publiques du réseau IP version 4.

Les plages d’adresses IP v4 privées sont les suivantes (source Wikipédia):

La version 6 permettra de résoudre en partie ce problème en proposant pas moins de « 667 millions de milliards d’adresses IP disponibles par mm2 de la surface de la Terre » (source Wikipédia).

Le déploiement d’IP v6 n’étant pas encore finalisé (ou même commencé…). Il est indispensable d’utiliser les technologies de NAT et de PAT pour permettre aux machines disposant d’adresses privées de pourvoir communiquer sur Internet.

Comment ?

NAT

On active le mécanisme de NAT sur les routeurs faisant le lien entre les réseaux privées et publics. Le principe général est de remplacer l’adresse IP source privée de la machine par l’adresse IP publique du routeur.

L’exemple le plus répandu est celui d’un PC client domestique (brave bête) voulant surfer sur Internet (vers un serveur Web par exemple) à travers une Box (routeur Freebox, Livebox, (+*)box…) disposant d’une fonction de NAT dynamique.

Le PC client va émettre un paquet sur sont réseau avec comme adresse source son adresse privée. La Box (qui active par défaut le mécanisme NAT dynamique), va remplacer dans le paquet l’adresse privée du PC par son adresse publique. Elle va en parallèle de cela garde en mémoire l’association (Adresse IP privée du PC > Adresse IP publique du serveur / Port client-serveur). Le serveur va donc recevoir par Internet ce paquet modifié auquel il va répondre avec un paquet de retour ayant pour adresse de destination l’adresse IP publique de la Box. Celle-ci va recevoir le paquet et finalement remplacer l’adresse IP publique de la Box par l’adresse privée du PC.

Il est donc possible avec une seule adresse IP publique de faire communiquer simultanément sur Internet plusieurs machines d’adresses IP privées.

Exemple de configuration du NAT sur une FreeBox:

Le NAT est activé par défaut sur les Freebox. Pour vérifier que votre Freebox est bien en « mode routé » (et donc avec le NAT activé), il faut se rendre dans l’interface d’administration (Configurer mon routeur FreeBox). Puis vérifier que l’option est bien activée.

Exemple de configuration du NAT sur un routeur GNU/Linux:

Voici un exemple de configuration d’un PC routeur sous GNU/Linux placé derrière votre Box et permettant de remplacer la fonction NAT de cette dernière (qu’il faudra configurer en « mode bridgé »).

On part sur l’hypothèse ou votre PC dispose:

  • d’une interface eth0 dans le plan d’adressage IP privée (vers le LAN)
  • d’une interface eth1 dans le plan d’adressage IP public de votre FAI (vers la Box)
  • d’une configuration IP correcte (serveur DNS, passerelle par défaut…)

Il faut donc saisir les lignes suivantes dans un script shell lancé au démarrage de votre machine:

iptables –table nat –flush

iptables –table nat –delete-chain

iptables –table nat –append POSTROUTING –out-interface eth1 -j MASQUERADE

iptables –append FORWARD –in-interface eth0 -j ACCEPT

echo 1 > /proc/sys/net/ipv4/ip_forward

service iptables restart

PAT

La lecture du chapitre précédant à mis en évidence le fait que l’on ne peut pas utiliser une adresse privée pour se déplacer sur Internet. Ainsi, si vous souhaitez héberger un serveur dans un réseau disposant d’une plage d’adresse IP privée, il va falloir ruser. En effet, dans ce cas précis, le NAT n’est d’aucune utilité car il  ne fonctionne que pour les sessions à l’initiative des machines se trouvant sur le réseau privée. Dans notre cas, nous avons besoin d’un mécanisme permettant de rendre visible une machine depuis Internet. C’est le PAT qui va nous offrir cette fonctionnalités.

Prenons l’exemple d’une personne voulant héberger son serveur Web (en écoute sur le port TCP/80) chez lui, derrière sa Box.

Le client va envoyer une requête HTTP vers l’adresse IP publique de la Box (via la résolution DNS). La Box, préalablement configurée avec une redirection du port 80 vers le serveur (PAT), va remplacer l’adresse destination du paquet (l’adresse publique de la Box) par celle du serveur (l’adresse privée du serveur). Le serveur va ensuite répondre en utilisant son adresse IP privée comme adresse source. La Box va ensuite remplacer celle-ci par son adresse IP publique.

Le PC client aura donc l’impression que le serveur Web est hébergé par votre Box.

Exemple de configuration du PAT sur une FreeBox:

Il faut se rendre dans l’interface d’administration de la FreeBox (Configurer mon routeur FreeBox) puis saisir une nouvelle ligne dans le formulaire « Redirection des ports ». Pour reprendre l’exemple ci-dessus et en partant sur l’hypothèse ou votre serveur à l’adresse IP privée 192.168.0.1, il faudra saisir la ligne suivante:

Exemple de configuration du PAT sur un routeur GNU/Linux:

Voici un exemple de configuration d’un PC routeur sous GNU/Linux placé derrière votre Box et permettant de remplacer la fonction PAT de cette dernière (qu’il faudra configurer en « mode bridgé »).

On part sur l’hypothèse ou votre PC dispose:

  • d’une interface eth0 dans le plan d’adressage IP privée (vers le LAN)
  • d’une interface eth1 dans le plan d’adressage IP public de votre FAI (vers la Box)
  • d’une configuration IP correcte (serveur DNS, passerelle par défaut…)

Il faut donc saisir les lignes suivantes dans un script shell lancé au démarrage de votre machine:

iptables –table nat –flush

iptables –table nat –delete-chain

iptables -t nat -A PREROUTING -p tcp –dport 80 -p DNAT –to-destination 192.168.0.1

echo 1 > /proc/sys/net/ipv4/ip_forward

service iptables restart

Nous voici arrivés à la fin de ce billet, n’hésitez pas à poser des questions complémentaires dans les commentaires ci-dessous.

Catégories
Open-source Planet-libre Reseau Systeme

Une souris et un clavier pour plusieurs ordinateurs

Le meuble de mon bureau manque un peu de place… Par surcroît de matériel bureautique. En effet, j’utilise deux PC, le premier pour les aspects bureautique/développement et un second pour la supervision de mon réseau.

Chacun dispose d’un clavier, d’une souris et d’un écran dédié. Comme je dois garder un oeil sur le l’écran de supervision, il n’est pas possible de mutualiser les deux écrans. Par contre une solution technique existe pour utiliser une seule souris et un seul clavier pour mes deux PC: Synergy.

La configuration de Synergy peut vite devenir compliqué… Heureusement il existe un petit logiciel bien pratique pour configurer simplement la bête: QuickSynergy.

Description de ma configuration

  • PC 1 (sous Debian 6.0 Squeeze) avec un clavier et une souris
  • PC 2 (sous Ubuntu 10.04 LTS) sans souris ni clavier (enfin une fois la configuration de Synergy faite :))
  • L’écran du PC 2 étant à gauche nde l’écran du PC 1

Configuration du serveur Synergy

Le serveur doit être installé sur la machine ou la souris et le clavier seront connectés. Pour installer le serveur, il suffit de saisir la commande suivante dans un terminal (en root):

apt-get install quicksynergy

Puis on lance QuickSynergy à partir du menu Applications > Accessoires. Dans l’onglet Share, on entre dans le champs « Left » le nom du PC n°2: PC_2 (attention, QuickSynergy n’aime pas les espaces):

Puis on lance le serveur en cliquant sur Execute.

Configuration d’un client Synergy

Le client (qui est en fait le même programme que le serveur) doit être installé sur toutes les machines ou l’on souhaite enlever la souris et le clavier. Pour installer le client, il suffit de saisir la commande suivante dans un terminal (en root):

apt-get install quicksynergy

Puis on lance QuickSynergy à partir du menu Applications > Accessoires. Dans l’onglet Use, on entre l‘adresse IP du serveur dans le premier champs puis le nom de l’écran comme configuré sur le serveur: PC_2 (attention, QuickSynergy n’aime pas les espaces):

Puis on lance le serveur en cliquant sur Execute.

A partir de ce moment là, la magie commence: vous contrôler vos deux PC avec le même couple souris/clavier et vous passez d’un écran à l’autre en déplaçant la souris sur les bord de l’écran !

A noter que QuickSynergy existe également sous Mac OS X mais pas encore sous Windows…

Catégories
Open-source Planet-libre Reseau Systeme Web

SparkleShare, enfin une vraie alternative libre à Dropbox ?

C’est en lisant un billet sur le blog de mister Korben que j’ai découvert SparkleShare, une solution libre se positionnant comme un concurrent direct de Dropbox.  Depuis quelques temps, on ne peut as dire que Dropbox soit en odeur de sainteté dans la sphère des libristes. Le changement plutôt maladroit de leur TOS et leur engagement timide dans les logiciels open-source n’y sont pas étranger.

Nous allons donc nous intéresser dans ce billet sur la solution SparkleShare qui se base sur des logiciels libres (GPL v3) et qui permet de gérer soit même son serveur ou seront stockées les données.

Les limites actuelles de SparkleShare

SparkleShare est actuellement en développement. La version 1.0 devrait sortir dans les prochains mois. A la date de rédaction de ce billet, les limites sont les suivantes:

  • Clients disponibles sous GNU/Linux et Mac OS X (les clients Windows, Android er IOS sont prévus)
  • Pas d’interface Web pour accéder à vos fichiers depuis un simple navigateur (il faut passer par un client SparkleShare)
  • Pas de synchronisation LAN to LAN. Si vous avez deux PC sur le même réseau local, la synchronisation passera automatiquement par le serveur (donc par Internet)
  • Pas de chiffrement (en natif) des données sur le serveur
  • Client développé en Mono (burk…), vivement les forks…

Les avantages de SparkleShare // Dropbox and Co

On passe ensuite aux avantages:

  • Les clients SparkleShare sont sous licence GPL version 3
  • Les serveurs SparkleShare peuvent se baser sur des logiciels libres (GIT et serveur SSH)
  • Possibilité d’installer son propre serveur sur une machine dédiée ou d’utiliser un serveur GIT public (GitHub, Gitorious…)
  • Chiffrement du lien client vers serveur (utilisation d’un tunnel SSH)

Installation du serveur SparkleShare

Comme nous venons de le voir, dans le monde SparkleShare, un serveur est en fait une machine accessible depuis Internet (ou tout autre réseau) à partir d’une connexion SSH et proposant un serveur GIT.

Attention: si vous ne disposez pas d’un serveur dédié, il est également possible d’utiliser un hébergement gratuit chez GitHub. Dans ce cas,  il faut garder à l’esprit que vos fichiers seront publics (il est donc nécessaire de les chiffrer):

Nous allons donc installer ces briques sur un serveur dédié sous Debian 6.0 Squeeze.

On commence par installer les serveurs SSH et GIT (en root):

apt-get install git-core openssh-server

Puis on génère le dépôt GIT pour SparkleShare (avec votre utilisateur standard):

cd ~

git init –bare sparkleshare.git

Cette dernière commande va créer un sous répertoire nommé sparkleshare.git dans le répertoire $HOME de votre utilisateur (/home/USER/sparkleshare.git). Il est bien sûr possible de remplacer sparkleshare.git par un chemin absolu.Il est alors important que le répertoire soit en lecture/écriture pour l’utilisateur SSH que vous allez utiliser pour vous connecter.

Et voilà, c’est fini 🙂 Dingue non. Si vous utilisé un Firewall sur votre machine, il faut juste vérifier que le port TCP/22 (SSH) est bien ouvert.

Installation du client SparkleShare

Il n’existe pas à l’heure actuelle de dépot officiel pour Debian / Ubuntu (alors qu’il en existe un sous Fedora et Mac OS X). Il va donc falloir installer le client à la mimine. Rien de bien compliqué, il suffit de saisir les commandes suivantes dans un terminal de votre PC sur lequel vous voulez installer le client. J’ai validé cette procédure d’installation sur une distribution Debian 6.0 Squeeze.

On commence par installer les pré-requis (en root):

apt-get install openssh-client git-core gtk-sharp2 mono-runtime mono-devel monodevelop libndesk-dbus1.0-cil-dev nant libnotify-cil-dev libgtk2.0-cil-dev libwebkit-cil-dev intltool libtool python-nautilus libndesk-dbus-glib1.0-cil-dev

Remarque: la version actuelle du client GNU/Linux est devéloppé en langage Mono (#wtf), les pré-requis précédant vont donc installer un tas de librairies (environ 120 Mo sur mon PC de test)…

On récupère les sources de la dernière version du client SparkleShare:

mkdir -p ~/src

cd ~/src

git clone https://github.com/hbons/SparkleShare.git

Puis on compile/installe:

cd ~/src/SparkleShare

./autogen.sh

make

su -c « make install »

Configuration du client

Avant de commencer à utiliser votre client SparkleShare, il faut lui dire quel serveur utiliser et surtout comment établir une connexion sécurisée avec lui.

Si vous avez déjà une clés SSH publique (donc un fichier ~/.ssh/id_rsa.pub), il n’est pas nécessaire de faire l’étape suivante:

ssh-keygen

On télécharge ensuite notre clés cliente sur notre serveur (SERVER) en utilisant le compte utilisateur (USER) avec lequel vous avez installé le dépôt GIT:

ssh-copy-id USER@SERVER

Pour tester que l’étape précédente a bien fonctionné, il suffit de se connecter en SSH (ssh USER@SERVER) et de voir si la connexion se fait bien sans demande  de login/password.

On lance ensuite le client SparkleShare:

sparkleshare start

La fenêtre suivante devrait s’afficher:

On entre les informations, puis on passe à la configuration du serveur en entrant le le couple USER@SERVER ainsi que le répértoire absolu du dépôt GIT du serveur (/home/USER/sparkleshare.git/):

Enfin, on finalise la configuration:

Pour vérifier que le client est bien lancé, il suffit de regarder sa barre de tache:

Vérifier que cela marche bien

Il suffit de mettre sur votre PC client, un nouveau fichier dans le répertoire « sparkleshare » puis de vérifier que ce dernier est bien pris en compte sur votre serveur GIT:

cd ~/sparkleshare.git

git log

Author: nicolargo <pasde@spam.com>

Date: Wed Jul 6 14:12:17 2011 +0200

+ ‘webcam-192×192.jpeg’

Alors près à laisser tomber Dropbox ?