Catégories
Open-source Planet-libre Web

Mon desktop 201110 (avec du Gnome Shell dedans)

En ce jour très binaire (59) et comme chaque mois, je vous montre un des mes desktops (spéciale dédicasse à Scurz qui adore ce genre de billet).

Dans quelques jours la version 11.10 d’Ubuntu va sortir. Contrairement à la version précédant, l’installation de Gnome-Shell en lieu et place d’Unity sera simplifié. C’est donc dans cette configuration que j’ai donc migré ce weekend mon PC portable personnel (le pro reste sous Debian Squeeze).

Installation de Gnome Shell

C’est plus que simple sous Ubuntu 11.10:

[cce lang= »bash »]

sudo add-apt-repository ppa:webupd8team/gnome3

sudo apt-get update

sudo apt-get install gnome-shell gnome-tweak-tool gnome-documents gnome-shell-extensions-common gnome-shell-extensions-system-monitor gnome-shell-extensions-user-theme gnome-shell-extensions-xrandr-indicator gnome-shell-extensions-apps-menu gnome-shell-extensions-alternative-status-menu gnome-shell-extensions-drive-menu

[/cce]

Puis ensuite de redémarrer votre machine et de sélectionner Gnome dans la session de démarrage:

Si vous êtes utilisateur du service Dropbox, il y a actuellement une incompatibilité entre l’interface graphique du daemon Dropbox et Gnome-Shell. Il faut donc suivre une procédure décrite dans le billet suivant.

Configuration de Gnome Shell

Gnome a choisi d’uniformiser le thème par défaut de Gnome Shell sur l’ensemble des distribution. Bien que ce dernier soit clair et plutôt agréable, j’ai préféré installer un nouveau thème par défaut réalisé par le créateur des icônes Faenza. Ce thème se nomme Faience.

Pour l’installer j’ai suivi la procédure suivante:

[cce lang= »bash »]

cd ~

tar zcvf theme-backup.tgz /usr/share/gnome-shell/theme

wget http://www.deviantart.com/download/255097456/gnome_shell___faience_by_tiheum-d47vmgg.zip

unzip gnome_shell___faience_by_tiheum-d47vmgg.zip

sudo cp Faience/gnome-shell/* /usr/share/gnome-shell/theme

rm -rf ~/gnome_shell___faience_by_tiheum-d47vmgg.zip ~/Faience

[/cce]

Note: il est également possible pour certains autres thèmes de les installer dans le répertoire ~/.themes et d’utiliser Gnome Tweak Tools pour switcher de l’un à l’autre (mais cela ne marche pas avec cette version du thème Faience).

Pour prendre en compte le thème il faut redémarrer votre session ou faire la combinaison de touche suivante: ALT + F2 puis r.

Voilà ce que cela donne:

J’ai utilisé un fond d’écran plutôt sombre trouvé dans cette série.

Utilisation de Gnome Shell

Refroidi par Unity, je trouve que l’utilisation de Gnome Shell pour un Gnome 2 addict est plutôt intuitive. Il faut prendre le temps de lire la liste des touches raccourcies que l’on peut trouver sur cette page et la transition se fait alors facilement.

A vous de jouer !

Et vous ? Cela donne quoi ?

A vous de nous montrer vos écrans
(par exemple en utilisant yFrog puis en partagant l’URL) !

Catégories
Developpement Open-source Planet-libre Systeme

MySQL Cluster – Installation 3/5

Ce billet est le premier d’une série de 5 articles sur Cluster MySQL écrite par Rémy Verger(auteur invité).

Je rappelle que ce billet est le second d’une série de 5 billets:

1. Introduction

2. Concepts de base de MySQL Cluster / Configuration simple-multi serveurs

3. Installation

4. Demarrage du MySQL Cluster

5. Commande d’administration

Il est préférable de télécharger directement les paquets sur le site officiel de MySQL.

Dans notre cas nous utiliserons une distribution CentOS 6.0 avec les paquets RedHat Cluster Suite . On commence donc par téléchargez les paquets suivant :

MySQL-Cluster-gpl-client-7.1.15a-1.rhel5.x86_64.rpm

MySQL-Cluster-gpl-tools-7.1.15a-1.rhel5.x86_64.rpm

MySQL-Cluster-gpl-storage-7.1.15a-1.rhel5.x86_64.rpm

MySQL-Cluster-gpl-shared-7.1.15a-1.rhel5.x86_64.rpm

MSQL-Cluster-gpl-management-7.1.15a-1.rhel5.x86_64.rpm

MySQL-Cluster-gpl-server-7.1.15a-1.rhel5.x86_64.rpm

On les installe avec la commande suivante:

[cce lang= »bash »]

rpm-ivh mysql-cluster-gpl-*

[/cce]

Je vous conseille de faire l’installation pas à pas. Si jamais lors de l’installation des paquets, vous rencontrez une erreur similaire a celle ci :

Vous devez désinstaller la librairie qui pose soucis . Car elle corrompt les paquets de MySQL-Cluster .

Serveur de management

Dans un premier temps il est préférable de commencer par les serveurs de management, il s’agit de la même configuration sur les deux, avec la même installation de paquet.

Nous devons créer config.ini dans le répertoire /var/lib/mysql-cluster qui permettra le chargement des fichiers de configuration pour le Cluster. On ajoute des directives de configuration suivantes dans le fichier.

[cce lang= »bash »]

# vim /var/lib/mysql-cluster/config.ini

[NDBD DEFAULT]

NoOFReplicas=2

LockPagesInMainMemory=1

DataMemory=4000M

IndexMemory=768M

ODirect=1

NoOfFragmentlogFiles=300

MaxNoOfConcurrentOperations=100000

TimeBetweenGlobalCheckpoints=1000

TimeBetweenEpochs=200

DiskCheckpointSpeed=5M

DiskCheckpointSpeedInRestart=50M

RedoBuffer=16M

MaxNoOfTables=9096

MaxNoOfAttributes=10000

MaxNoOfExecutionthreads=4

MaxNoOfOrderedIndexes=5000

[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]

[TCP DEFAULT]

SendBufferMemory=8M

ReceiveBufferMemory=8M

[NDB_MGMD]

NodeId=1

HostName=12.0.1.10

[NDB_MGMD]

NodeId=2

HostName=12.0.1.11

[NDBD]

NodeId=3

HostName=12.0.1.30

[NDBD]

NodeId=4

HostName=12.0.1.31

[MYSQLD]

Hostname=12.0.1.20

[MYSQLD]

Hostname=12.0.1.21

[/cce]

Il faut que les deux serveurs de management possède exactement le même fichier de configuration, si vous êtes sous CentOS et que vous n’avez jamais touché a la configuration du parefeu, pensez a le désactiver.

[cce lang= »bash »]

# chkconfig iptables off

[/cce]

Serveurs SQL et serveurs de nœud

Il vous faut installer les mêmes paquets sur ces quatres autres machines, et elles possèdent toutes le même fichier de configuration /etc/my.cnf

[cce lang= »bash »]

# vim /etc/my.cnf

[client]

port=3306

socket=/var/lib/mysql/mysql.sock

[MYSQLD] # Options du processus mysqld

ndbcluster # Fonctionne en mode NDB

ndb-connectstring=12.0.0.100 # Situation du noeud MGM

[MYSQL_CLUSTER] # Options pour le processus ndbd

ndb-connectstring=12.0.0.100 # Situation du noeud MGM

[/cce]

Sur les serveurs SQL pensez a utiliser la commande :

[cce lang= »bash »]

# mysql_secure_installation

[/cce]

Elle permet de donner un mot de passe par défaut a votre serveur SQL, ainsi que l’accès a distance .

Catégories
Hardware Systeme

Steve Jobs 1955-2011


Le discours de Steve Jobs à Stanford en VOSTFR

Catégories
Open-source Planet-libre Systeme

Ajouter un utilisateur à un groupe sous GNU/Linux

Petit pense-bête à usage intern(et): gérer les utilisateurs dans ses groupes sous GNU/Linux et en ligne de commande.

Modification du groupe primaire d’un utilisateur

Pour changer le groupe primaire de l’utilisateur nicolargo à admin, il suffit d’utiliser la commande usermod:

usermod -g admin nicolargo

Ajout d’un groupe secondaire à un utilisateur existant

Pour ajouter un groupe secondaire networkadmin  un utilisateur existant nicolargo, c’est encore la commande usermod qu’il faut utiliser:

usermod -a -G networkadmin nicolargo

Ajout d’un nouvel utilisateur à un groupe primaire

Pour ajouter le nouvel utilisateur ritchy et lui configurer un comme groupe primaire admin, il suffit d’utiliser la commande useradd:

useradd -g admin ritchy

Ajout d’un nouvel utilisateur à un groupe secondaire

Pour ajouter le nouvel utilisateur ritchy et lui configurer un comme groupe secondaire networkadmin, il suffit d’utiliser la commande useradd:

useradd -G networkadmin ritchy

A noter qu’il est possible d’utiliser l’option -G avec plusieurs groupes. Exemples pour ajouter ritchy au groupe secondaire networkadmin et systemadmin:

useradd -G networkadmin,systemadmin ritchy

Vérifier les groupes associés à un utilisateur

Rien de plus simple avec la commande groups:

# groups ritchy
ritchy: networkadmin systemadmin
Catégories
Developpement Open-source Planet-libre Systeme

MySQL Cluster – Concept de base 2/5

Ce billet est le premier d’une série de 5 articles sur Cluster MySQL écrite par Rémy Verger (auteur invité).

Je rappelle que ce billet est le second d’une série de 5 billets:

1. Introduction

2. Concepts de base de MySQL Cluster / Configuration simple-multi serveurs

3. Installation

4. Demarrage du MySQL Cluster

5. Commande d’administration

MySQL Cluster est constitué de trois briques:

  1. Premièrement, un jeu de processus serveurs MySQL. Ce sont des serveurs MySQL traditionnelles, avec le nouveau moteur de table NDBCluster qui autorise l’accès aux tables en cluster.
  2. Le second type de processus est représenté par les noeuds de stockage de NDBCluster. Ces processus contiennent les données stockées dans MySQL Cluster. Les données de MySQL Cluster sont réparties entre les différents noeuds du cluster, et sont aussi doublées dans le cluster.
  3. Le troisième type de processus est les processus d’administration. Ces processus sont utilisées pour gérer la configuration du cluster.

Nous appelons ces processus de cluster les noeuds du cluster. Mettre en place la configuration du cluster implique la configuration de chaque noeud dans le cluster, et la configuration de chaque moyen de communication entre les noeuds du cluster.

MySQL Cluster est actuellement configuré avec le pré-requis que les noeuds sont homogènes en terme de puissance processeur, espace mémoire et largeur de bande. De plus, pour activer un point de configuration, il a été décidé de placer toute la configuration du cluster dans un seul fichier de configuration.

De plus, il y a un nombre arbitraire de clients connectés au cluster. Ils sont de deux types: ces clients accèdent au serveur de management, et émettent des commandes pour lancer ou arrêter correctement des noeuds, lancer ou arrêter la trace serveur (pour les versions de débogage), pour afficher la configuration courante, voir l’état des noeuds du cluster, afficher les versions et noeuds, lancer les sauvegardes, etc.

Configuration simple-multi serveurs

Nous allons configurer un cluster de deux noeuds, deux serveurs de management, deux LVS en FailOver, et deux serveurs SQL.

 

Naturellement, les machines multi-processeurs et celles aux fréquences supérieures seront plus rapides. Les besoins en RAM des processus du Cluster MySQL sont relativement raisonnables.

Sécurité

Les communications entre les noeuds du Cluster MySQL ne sont pas chiffrées ou protégées de quelque manière que ce soit. La seule solution pour protéger les transmissions à l’intérieur du Cluster MySQL est de placer le Cluster MySQL dans un réseau protégé. Si vous envisagez d’utiliser le Cluster MySQL pour une application Web, il est recommandé que le Cluster MySQL soit placé derrière un pare-feu, et non pas dans la zone démilitarisée (DMZ) ou ailleurs.

Efficacité

Configurer un Cluster MySQL sur un réseau privé ou protégé donne au Cluster MySQL l’exclusivité de la bande passante. En utilisant un switch dédié au Cluster MySQL aide à la protection contre les accès non autorisés, et il protège les noeuds des interférences causées par les autres machines sur le réseau. Pour une stabilité accrue, vous pouvez utiliser des switchs redondants et des cartes réseau doubles pour supprimer du réseau les points de panne.

Fonctionnement de cette architecture

Nous avons choisis de virtualiser l’ensemble des serveurs sur Vmware ESXi, cela nous donne une meilleure souplesse quand au changement matériel ( augmentation de RAM / Rajout de carte réseau ) .

Les clients contactent l’application hébergé sur nos serveurs, sur ces serveurs nous inscrivons les adresses des LoadBalancer . Le protocole de routage Round Robin alternera l’envoie des paquets sur les serveurs SQL définis dans sa pool .

Les serveurs SQL ne contiennent pas les données propres a la base de données, ils ne sont la que pour traiter les requètes . A leurs tours ils contactent les Noeuds qui possèdent la totalité de la base de données chargé dans leur RAM.

Les serveurs de management servent a renseigner les serveurs du cluster. C’est lui qui définit les rôles des serveurs . Et répartir la charge automatiquement entre les Noeuds .

L’ensemble des données stocké en RAM sont répliqué entre tous les nœuds, et la charge et partagé entre le nombre de serveurs nœud .

Catégories
Developpement Open-source Planet-libre Systeme

MySQL Cluster – Tutoriels 1/5

Ce billet est le premier d’une série de 5 articles sur Cluster MySQL écrite par Rémy Verger (auteur invité).

La problématique de répartition des données est un problème majeur des infrastructures de gestion de l’information. Alors que l’approche historique consiste à dimensionner un seul serveur de façon à ce qu’il absorbe toute la charge, on observe depuis plusieurs années une tendance inverse, inspirée des techniques de RAID pour les volumes de stockage, qui consiste a prendre un très grand nombre de machines a faible coût pour former un cluster de stockage.

Il existe plusieurs façons différente de mettre en place un Clusteur de Stockage avancé, que je vais vous faire découvrir. Cette série de billet va se focaliser sur la solution MySQL Cluster, la base de données distribuée de MySQL.

 J’installerais MySQL Cluster sur une distribution CentOS, qui peut également être adapter a une distribution RedHat, comme il s’agit de paquet disponible dans les dépôts ReDHat Cluster Suite.

De plus vous trouverez des machines virtuelles sous VMware avec l’ensemble de l’architecture .

Voici le sommaire des 5 billets:

1. Introduction

2. Concepts de base de MySQL Cluster / Configuration simple-multi serveurs

3. Installation

4. Demarrage du MySQL Cluster

5. Commande d’administration

On commence de ce pas par le premier article !

Introduction

Dans le domaine des systèmes de gestion de bases de données,MySQL fournit une solution élégante pour réaliser un cluster à faible coût permettant d’atteindre un niveau de disponibilité proche des 99,999% annuel.

 Un Cluster MySQL est un groupe de processus qui s’exécutent sur plusieurs serveurs MySQL, des noeuds NDBCluster, et des processus d’administration, ainsi que des processus d’accès spécialisés. Tous ces programmes fonctionnent ensemble pour former un Cluster MySQL. Lorsque les données sont stockées dans le moteur NDBCluster, les tables sont réparties sur les noeuds NDBCluster. Ces tables sont directement accessibles depuis tous les autres serveurs MySQL faisant partie du Cluster. Par conséquent, si une application met à jour une ligne, tous les autres serveurs le verront immédiatement.

Les données stockées dans le moteur de table de MySQL Cluster peuvent être dupliquées, et sont capables de gérer une indisponibilité d’un noeud sans autre impact que l’annulation des transactions qui utilisaient ces données.

Elle permet de répartir des données sur plusieurs serveurs sans avoir de point individuel de défaillance. Contrairement aux moteurs MyISAM et InnoDB généralement utilisés avec MySQL, l’exploitation effective du cluster nécessite l’utilisation du moteur NDB, qui contient plusieurs restrictions, comme l’absence d’index FULLTEXT.

 MySQL est capable, depuis la version 4.1 et grâce au moteur de stockage NDB de gérer une grappe de serveurs complète.

  • augmenter la disponibilité
  • faciliter la montée en charge
  • permettre une répartition de la charge
  • faciliter la gestion des ressources (processeur, mémoire vive, disques dur, bande passante réseau).

Sa structure repose sur la duplication données, c’est-à-dire que chaque nœud fera partie d’un groupe de nœud qui posséderont tous la totalité de la base

Un protocole implémenté dans chaque nœud s’occupe d’adresser chaque transaction aux différents nœuds concernés dans la grappe, il faut un minimum de 3 machines pour établir une solution de clustering MySQL et une machine (qui peut elle-même intégrer un serveur MySQL) qui va jouer le rôle de répartiteur de charge en redirigeant les requêtes sur les nœuds disponibles et les moins occupés.

Par rapport à un système de réplication, la redondance est améliorée : si un nœud tombe en panne, sa charge est automatiquement reprise par les autres nœuds.

L’ajout d’un nouveau nœud peut se faire sans avoir besoin de repartitionner la base, il suffit de le faire reconnaître par la grappe et le redémarrage d’un nœud peut se faire sans avoir à redémarrer la grappe.

Du point de vue de MySQL, chaque nœud fait partie d’un ensemble qui pourrait être reconnue comme une seule machine.

Pour le programmeur, il doit programmer son application pour communiquer avec le répartiteur de charge.

Cette solution s’adapte parfaitement lorsque la disponibilité et la sécurité des données est un problème critique et que l’on recherche un partitionnement technique responsable de l’écriture. Couplé a des fonctionnalités temps réel et a une API de programmation asynchrone NDB Cluster s’adresse principalement aux exigences du marché des télécommunications.

Vous pouvez vous rendre sur la page suivante pour voir la liste exhaustive des fonctions proposées dans la version communautaire (gratuite et open-source) de MySQL Cluster.

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

VnStat.js, un node pour VnStat

Mes derniers billets traitaient de VnStat (le logiciel pour surveiller les débits de vos interfaces Ethernet) et de Node.js (le framework permettant de créer facilement des applications réseaux coté serveur). C’est donc dans ma logique toute cartésienne, que j’ai développé un javascript permettant de disposer d’une interface Web pour consulter ces statistiques de débits sans avoir à installer un serveur Web et son plugin PHP (comme c’est le cas avec le VnStat PHP frontend).

Ce script, disponible sous licence GPL v3, s’appelle VnStat.js est disponible dans mon GitHub à l’adresse suivante:


https://github.com/nicolargo/vnstat.js

Installation

Pour fonctionner correctement, VnStat.js nécessite:

  • une installation de VnStat fonctionnelle. Je vous conseille la lecture de ce billet pour effectuer une installation « from-scratch » sur une machine tournant sous Debian / Ubuntu.
  • que le framework Node.js soit installé sur cette même machine. Le script a été validé avec la dernière version stable de Node.js (0.4.12).

On commence par récupérer la dernière version de VnStat.js depuis le dépôt Git:

[cce lag= »bash »]

cd ~

git clone git://github.com/nicolargo/vnstat.js.git

cd vnstat.js

[/cce]

Pour les personnes utilisant NPM (le package manager de Node.js), vous pouvez l’utiliser pour installer VnStat.js. Suivre les instructions de cette page.

Lancement de VnStat.js

Pour lancer le noeud VnStat.js, il suffit de saisir les commandes suivantes:

[cce lag= »bash »]

cd ~/vnstat.js

node ./vnstat.js

[/cce]

Le « node » va se mettre en écoute sur le port TCP 1337 de votre serveur (il faut donc ajouter une règle pour autoriser les requêtes entrantes vers ce port si vous avez un firewall).

A l’ouverture de l’URL http://adressedevotremachine:1337/ dans un navigateur compatible HTML5, la page principale suivante va s’afficher:

Elle affiche le résumé des statistiques de VnStat ainsi que le top 10 des journées. Le menu du haut permet de naviguer vers des statistiques plus ciblés.

Par heures (avec à la fois la vue graphique et textuelle):

Et ainsi de suite pour les jours, semaines (à noter qu’il n’y a pas de graphe spécifique par semaine généré par vnstati) et enfin par mois.

Configuration de VnStat.js

Le design de VnStat.js peut bien entendu être adapté à vos besoins en éditant le fichier css/style.css (CSS3). Si vous avez besoin de changer le port TCP d’écoute du node, il y a une variable pour cela dans le fichier lib/server.js.

C’est mon premier développement avec le framework Node.js, il y a sûrement des améliorations à faire mais la structure reste assez didacticiel pour servir de base pour d’autre développement du même type.

Lancement automatique de VnStat.js au démarrage de votre machine

 Comme vous avez pu le remarquer, le node VnStat.js est lancé à la main dans ce billet. Si vous souhaitez mettre en production ce script et le lancer automatiquement au démarrage de votre machine, je vous conseille la lecture du billet de Vincent sur son blog qui regorge d’information sur ce superbe framework qu’est Node.js.

Catégories
Developpement Open-source Planet-libre Web

Une introduction à node.js

Node.js est un framework implémentant, coté serveur, la version 8 du moteur Javascript de Google (pour une présentation rapide, je vous conseille de parcourir ces quelques slides).

L’objectif de ce billet est d’installer Node.js sur votre machine GNU/Linux et d’exécuter votre premier programme (hello.js).

Installation de Node.js depuis les sources

Il n’existe pas, à l’heure à laquelle je rédige ce billet, de « package » officiel de Node.js pour Debian/Ubuntu (voir le chapitre suivant pour une installation depuis un PPA). L’installation est cependant assez simple. Pour installer la dernière version (stable) depuis le dépôt officiel GIT, il suffit de saisir les commandes suivantes:

mkdir ~/src
cd ~/src
git clone https://github.com/joyent/node.git
cd ~/src/node
git checkout v0.8.0
sudo mkdir /opt/node
./configure --prefix=/opt/node
make
sudo make install
echo 'export PATH=$PATH:/opt/node/bin' >> ~/.profile
echo 'export NODE_PATH=/opt/node:/opt/node/lib/node_modules' >> ~/.profile
source ~/.profile

L’installation va se faire dans le répertoire /opt/node.

Pour vérifier que Node.js est bien installé sur votre machine:

# node -v
v0.8.0

Les modules avec NPM

Pour étendre les fonctions de bases de Node.js, il faut utiliser l’utilitaire NPM (Node Package Manager). Grâce à lui il est possible d’ajouter des packages à Node.js.

Pour installer Node.js depuis les sources (voir le chapitre suivant pour une installation depuis un PPA):

curl http://npmjs.org/install.sh | sudo sh -c 'export PATH=$PATH:/opt/node/bin ; export NODE_PATH=/opt/node:/opt/node/lib/node_modules ; sh'

Je vous laisse ensuite regarder la documentation puis la liste des packages disponibles.

Installation depuis un PPA

Si vous êtes sous Ubuntu, il existe un PPA maintenant les dernières versions de Nodejs et de NPM. Pour installer le PPA sur votre système:

sudo add-apt-repository ppa:chris-lea/node.js

Puis l’installation de Nodejs et NPM:

sudo apt-get update && sudo apt-get install nodejs npm

Un premier exemple, ou le fameux « Hello world ! »

On commence par éditer un fichier ‘hello.js‘ contenant le code suivant:

//
// A JavaScript based on Node.js
//
// Nicolas Hennion (aka) Nicolargo
//
// GPL v3.0
//

var http = require('http');
var url = require('url');
var spawn = require ('child_process').spawn;

//**********
// Variables
//**********

var listenport = 1337;

//**********
// Functions
//**********

// Chomp function (delete the \n)
String.prototype.chomp = function () {
return this.replace(/(\n|\r)+$/, '');
};

// HTTP request
function onRequest(req, res) {
console.log("New request: "+req.url);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World');
res.end();
};

//*************
// Main program
//*************

// Create the HTTP server
http.createServer(onRequest).listen(listenport);

// Get the hostname (FQDN)
var listenaddress = spawn('hostname', ['-f']);
listenaddress.stdout.on('data', function (data) {
var fqdn = new String(data);
console.log('Server running listenning http://'+fqdn.chomp()+':'+listenport+'/');
});

Puis on lance le noeud (node) avec la commande:

# node ./hello.js
Server running listenning http://VotreMachine:1337/

Il ne reste plus (après avoir autorisé les requêtes vers le port TCP 1337 si vous avez un Firewall sur votre machine de test) qu’à pointer une navigateu Web vers l’URL donnée par la commande pour voir affiché le résultat:

Détail du code

On commence par initialiser les fonctions de Node.js dont on a besoin (voir la liste dans la documentation officielle). Pour notre exemple, nous avons besoin de générer un serveur HTTP (http) et de lancer une commande système (spawn) récupérant le nom FQDN de la machine.

[cc lang= »javascript »]

var http = require(‘http’);

var spawn = require (‘child_process’).spawn;

[/cc]

Après la définition d’une variable globale (contenant le numéro TCP du port d’écoute du serveur) ainsi que d’une fonction enlevant le caractère de retour à la ligne du chaine (chomp), on passe au vif du sujet en générant un serveur HTTP:

[cc lang= »javascript »]

// Create the HTTP server

http.createServer(function (req, res) {

res.writeHead(200, {‘Content-Type’: ‘text/plain’});

res.end(‘Hello World\n’);

}).listen(listenport);

[/cc]

Cette commande est « forké » (elle génère donc un daemon HTTP écoutant sur le port ‘listenport’ et renvoyant le message texte ‘Hello World’). Enfin on affiche dans la console l’URL du serveur:

[cc lang= »javascript »]

// Get the hostname (FQDN)

var listenaddress = spawn(‘hostname’, [‘-f’]);

listenaddress.stdout.on(‘data’, function (data) {

var fqdn = new String(data);

console.log(‘Server running listenning http://’+fqdn.chomp()+’:’+listenport+’/’);

});

[/cc]

Aller plus loin

Bien évidement, ce billet n’est qu’une simple introduction à ce framework (d’ou le titre :)). Le code donnée en exemple est sûrement « optimisable » mais à un objectif pédagogique.  Je reviendrai rapidement sur ce sujet en proposant des développement basée sur Node.js pour la supervision de nos belles machines. Stay tuned

Sources ayant inspirées ce billet:

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

# https://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

# https://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

# https://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: