Citations [2] – Michael Ende

« La passion de Bastien Balthazar Bux, c’était les livres. Qui n’a jamais passé tout un après-midi sur un livre, les oreilles en feux et les cheveux en bataille, à lire et lire encore, oublieux du monde alentour, insensible à la faim et au froid –

Qui n’a jamais lu en cachette, sous sa couverture, à la lueur d’une lampe de poche, parce qu’un père ou une mère ou quelque personne bien intentionnée avait éteint la lumière, dans l’idée louable que le moment était maintenant venu de dormir puisque demain il faudrait se lever tôt. –

Qui n’a jamais versé, ouvertement ou en secret, des larmes amères en voyant se terminer une merveilleuse histoire et en sachant qu’il allait falloir prendre congé des êtres avec lesquels on avait partagé tant d’aventures, que l’on aimait et admirait, pour qui l’on avait tremblé et espéré, et sans la compagnie desquels la vie allait paraître vide et dénuée de sens –

Celui qui n’a pas fait lui-même l’expérience de tout cela ne comprendra visiblement pas le geste de Bastien. »

L’Histoire sans fin, Michael Ende

Easily deploy a local MongoDB cluster

When working with MongoDB, it surely comes a time when you want to try to make it scale. First, by adding replica set, then sharding and at least mix it together to create a simple cluster with replication on each shard. Then, you might want to test monitoring or other functionality, so you will need to launch your cluster, configure it.

If everything goes right, you’ll only need to start all your MongoDB instances. Not a big deal, easy to do it at each restart of your computer, just copy paste the right commands. But what if I need a fresh clean cluster to make my test? To answer this question, I wrote a simple script to easily deploy a local mongo cluster composed of one query router, three configuration routers and two shards, each being a replica set composed of one primary mongod and two secondary mongod.

This simple project is on my Github under the name simple-mongo-cluster. The readme describes on which port you’ll find which mongo. The script provides 5 operations: {init|start|configure|stop|clean}. I will quickly describe each of it.

The init operation creates all directories needed to store logs and data. All mongo instances will be started with the start parameter. To configure the cluster, use configure. For the cluster to be configured, you might need to call configure twice, because of shards sometimes not being added at first call. The stop operation is just about shutting down the whole cluster. At last, clean deletes all directories containing the cluster configuration files, data and logs so that you can start a fresh new cluster.

I hope it will help other developers who want to easily test and discover MongoDB cluster possibilities in a local environment as it helps me. If you have any suggestions, just let me know or fork the project, add your script and send me a pull request.

Découverte de la gestion de log avec ELK

Dans le cadre de mon stage, je m’intéresse actuellement au solution de monitoring et j’ai donc eu l’occasion de tester le triplet Elasticsearch Logstash Kibana connu sous l’abréviation ELK. Logstash permet d’agréger simplement des logs provenant de différentes sources, Elasticsearch s’occupe de les stocker et de les rendre disponibles et enfin Kibana les affiche sur un dashboard hautement personnalisable. Les instructions qui suivent m’ont donc permis d’avoir un rapide aperçu du fonctionnement de la solution ELK en local et dans un cas très simple de gestion de logs système.

Récupération des logiciels

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.1.tar.gz
wget https://download.elasticsearch.org/logstash/logstash/logstash-1.3.3-flatjar.jar
wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone5.tar.gz

Extraction

tar xvf elasticsearch-1.0.1.tar.gz
tar xvf kibana-3.0.0milestone5.tar.gz

Elasticsearch

cd elasticsearch-1.0.1/

La configuration elasticsearch.yml se situe dans config/. Il n’est pas nécessaire d’y toucher pour un test en local, on pourrait toutefois modifier les paramètres cluster.name et node.name pour personnaliser l’installation.

Démarrer Elasticsearch:

./bin/elasticsearch

Logstash

Création d’un fichier de configuration logstash.conf:

touch logstash.conf

Nous allons lire les fichiers de log du système, de ce fait, il pourrait être nécessaire de lancer Logstash en root pour que celui-ci puisse lire les fichiers de logs. Cette solution n’est à utiliser que pendant la phase de test.

Contenu du fichier:

input {
    file {
        type => "linux-syslog"
        path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
    }
}
output {
    stdout { }
    elasticsearch_http {
        host => "127.0.0.1"
    }
}

Documentation pour le paramètre elasticsearch_http.

Démarrer Logstash:

sudo java -jar logstash-1.3.3-flatjar.jar agent -f logstash.conf

Les nouveaux logs devraient donc maintenant être récupérés par Logstash et stockés par Elasticsearch. Nous donc pouvoir les visualiser avec Kibana.

Kibana

cd kibana-3.0.0milestone5/

Éditer le fichier config.js et changer la ligne:

elasticsearch: "http://"+window.location.hostname+":9200",

en

elasticsearch: "http://127.0.0.1:9200",

Cette modification nous permet d’ouvrir le fichier index.html directement dans notre navigateur pour accéder à Kibana sans avoir besoin de mettre en place un serveur comme Apache pour servir les fichiers.

Résultat

KibanaL’ajout d’un mécanisme d’authentification pour l’accès à Kibana peut être réalisé simplement en utilisant le projet fangli/kibana-authentication-proxy.

Installation de Wallabag

Après avoir plusieurs fois entendu parler de wallabag, je me décide donc à l’installer pour le tester, m’en servir et pourquoi pas alléger mes marque-pages Firefox. Voici donc les différentes étapes et commandes qui m’ont permis de mener à bien l’installation. J’espère ne pas en avoir oublier lors de l’écriture de cet article.

Récupération de la dernière version de wallabag:

wget http://wllbg.org/latest

Décompression:

unzip latest

Récupération de composer et exécution dans le dossier de wallabag:

curl -s http://getcomposer.org/installer | php
php composer.phar install

Création de la base de donnée:

mysql -p -u root

mysql> CREATE DATABASE wallabag;

mysql> GRANT ALL PRIVILEGES ON `wallabag`.* TO 'wallabag'@'localhost' IDENTIFIED BY 'VotreMotdePasse';

mysql> exit

Après avoir créer notre base de données wallabag, injection du script de configuration MySQL:

mysql -p -u root wallabag < install/mysql.sql

Renommer le fichier de configuration:

mv config.inc.php.new config.inc.php

Édition de la configuration:

nano inc/poche/config.inc.php

On modifiera en particulier les lignes suivantes:

define ('SALT', 'Une chaîne de caractères fortes de votre composition');
define ('STORAGE', 'mysql');

define ('STORAGE_SERVER', 'localhost');
define ('STORAGE_DB', 'wallabag');
define ('STORAGE_USER', 'wallabag');
define ('STORAGE_PASSWORD', 'VotreMotdePasse');

Permission nécessaire sur les dossiers

chmod 777 -R assets/ cache/ db/

Fin de l’installation:

rm -rf install/

Et en cas de besoin:

chown -R www-data:www-data wallabag/

Et enfin, la configuration d’Apache:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName wallabag.domain.org
  DocumentRoot /var/www/wallabag
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  <Directory /var/www/wallabag>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from ALL
  </Directory>
</VirtualHost>

Si tout c’est bien passé, il suffit de se rendre à l’adresse wallabag.domain.org pour arriver sur la page de création du compte utilisateur.