Présentation Elastic Beats

Voici les slides de ma présentation du jeudi 26 mai à Caen. La présentation est suivie d’une démo avec Kibana, ElasticSearch, packetbeat, topbeat et dockerbeat.

Le docker-compose qui m’a permis de lancer la démo:

elasticsearch-int:
  image: elasticsearch
  ports:
    - 9200:9200
  volumes:
    - "/home/gauthier/esdata:/usr/share/elasticsearch/data"

kibana-int:
  image: kibana
  ports:
    - 5601:5601
  environment:
    - ELASTICSEARCH_URL=http://elasticsearch-int:9200
  links:
    - elasticsearch-int

dockerbeat-int:
  image: ingensi/dockerbeat
  links:
    - elasticsearch-int:elasticsearch
  volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"

Let's Encrypt avec Haproxy

Voici la documentation qui m’a permis de mettre en place Let’s Encrypt avec Haproxy.

Sources:

Principe

Let’s Encrypt permet de générer un certificat valide de façon automatique. Ce certificat a une durée de validité de 3 mois. Il faut donc le renouveler très régulièrement. Pour fonctionner letsencrypt a besoin d’un serveur web, dans notre cas haproxy est juste un proxy, ce n’est pas lui qui fournit les pages, mais les serveurs web des backends. le script letsencrypt a besoin de créer un fichier pour le challenge dans le répertoire d’un serveur web. Le chemin étant facilement identifiable, nous allons créer un acl sur haproxy pour renvoyer les pages letsencrypt sur un serveur apache en particulier.

Installation de Let’s Encrypt

Il n’existe pas actuellement de packet debian de Let’s Encrypt pour les debian avant Stretch (actuellement en testing). Il est donc nécessaire de procéder à l’installation depuis les sources.

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto

Le script d’installation va créer une arborescence /root/.local/share/letsencrypt/ et y installer le logiciel. Par soucis de simplicité il faut ensuite aller dans /usr/sbin et créer un lien avec la commande :

ln -s /root/.local/share/letsencrypt/bin/letsencrypt 

Configuration d’Apache

Nous avons besoin d’un serveur web pour fournir la page du challenge. Nous allons configurer Apache pour qu’il écoute sur 127.0.0.1:1080. Le documentRoot sera /var/www/letsencrypt.request/.

Fichier /etc/apache/ports.conf: Listen 127.0.0.1:1080

Fichier /etc/apache/sites-available/letsencrypt.conf:

<VirtualHost *:1080>
  ServerName letsencrypt.request
  DocumentRoot /var/www/letsencrypt.request
</VirtualHost>

Activer le nouveau site et désactiver le site par défaut :

a2ensite letsencrypt
/etc/init.d/apache2 restart

Configuration de Haproxy

Prenons le cas où nous n’avons qu’une seul ip et donc qu’un seul frontend haproxy pour le http et un autre pour le https:

frontend ft_http-in
    option http-keep-alive
    compression algo gzip
    compression type text/html text/plain text/css application/x-javascript
    option      httplog
    bind *:80
    acl letsencrypt_check path_beg /.well-known/acme-challenge
    # ... les autres acl
    use_backend letsencrypt_backend if letsencrypt_check
    # ... les autres use_backend

frontend https-in
    bind *:443 ssl crt /etc/ssl/letsencrypt
    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }
    acl letsencrypt_check path_beg /.well-known/acme-challenge
    # ... les autres acl
    use_backend letsencrypt_backend if letsencrypt_check
    # ... les autres use_backend

backend letsencrypt_backend
    http-request set-header Host letsencrypt.request
    server apache 127.0.0.1:1080 check

Création du certificat

Création d’un seul certificat:

letsencrypt certonly --email adminsys@mondomaine.org --webroot -w /var/www/letsencrypt.request/ -d www.mondomaine.org 

letsencrypt va créer une arborescence dans /etc/letsencrypt mais pour utiliser ces certificats dans haproxy il faut concaténer les fichiers dans un seul dans le répertoire /etc/ssl/letsencrypt avec le programme suivant:

#!/bin/bash
for domain in $(ls /etc/letsencrypt/live); do 
    cat /etc/letsencrypt/live/$domain/privkey.pem /etc/letsencrypt/live/$domain/fullchain.pem > /etc/ssl/letsencrypt/$domain.pem
done

Packetbeat 1.0Beta1

Présentation

PacketBeat est un outil qui permet de capturer les flux réseaux (http, mysql, postgres, redis, thrift) et d’envoyer le tout sur une base elasticsearch afin de pouvoir analyser l’ensemble des requêtes via l’interface kibana. Il est également capable d’analyser les communications entre 2 processus d’un même serveur.

Ce produit a l’avantage d’être très facile à déployer, c’est écrit en Go donc il a très peu de dépendance. Les paquets rpm et deb de Packetbeat ne fonctionne pas sur certaines vieilles distributions (CentOS5, Debian6), mais je n’ai pas essayé de le recompiler sur celles-ci.

L’équipe de Packetbeat a rejoint elastic.co le 27 mai 2015. Il est maintenant disponible en version 1.0-beta1.

Cette version me semble nettement moins gourmande en cpu que les versions 0.4x que j’avais testée précédemment. Je ne l’avais pas encore mis en prod pour cette raison. Cette version est compatible Kibana4 une démo est consultable en ligne.

Mise en place

Dans un premier temps il faut installer elasticsearch (version 1.5 ou superieur) et kibana4.x. Ensuite sur chaque serveur que l’on veut monitorer il faut télécharger packetbeat et l’installer.

Exemple sur Debian 64bits :

wget https://download.elastic.co/beats/packetbeat/packetbeat_1.0.0~Beta1_amd64.deb
dpkg -i packetbeat_1.0.0~Beta1_amd64.deb

Enfin il faut éditer le fichier packetbeat.yml pour indiquer l’adresse du serveur elasticsearch et les ports par protocole que l’on veut monitorer.

Configuration des dashboards

Le dépôt github contient toutes les informations pour mettre en place les dashboards kibana4.

git clone https://github.com/elastic/packetbeat-dashboards.git
cd packetbeat-dashboards
./load.sh http://localhost:9200

Conclusion

Vous n’avez plus qu’a attendre quelques minutes/heures/jours et découvrir pourquoi certaine application ne sont pas aussi rapide que souhaité. Peut-être qu’une requête mysql ou postgres est plus longue que prévu.

Bonne exploration.

Présentation CoreOS

J’ai mis en ligne les slides CoreOS que je présenterai à Nantes le 5 juin 2015. Je ne suis pas sûr de tenir dans les 50 minutes qui me sont allouées.

La plateforme CoreOS est pour moi intéressante pour plusieurs points:

  • Logiciel libre.
  • Facile et rapide à déployer.
  • Innovant sans pour autant demander un investissement trop important des équipes d’exploitation.
  • Un support pour ceux qui le désire.

Dans ma présentation, je parle rapidement de la montée de version de CoreOS. Le type d’installation que j’utilise ne nécessite pas de passer par l’outil de mise à jour fournit par le support. Ce dernier gère une double partition d’installation afin de basculer sur la version précédente en cas de problème. Ici, rien d’aussi compliqué, chaque serveur CoreOS boot en ipxe et va chercher son image. En cas de problème il suffit de spécifier une autre image dans le fichier de configuration et de rebooter le serveur.

Présentation Virtualisation CLoud

Voici une petite présentation sur les concepts de la virtualisation et sur le cloud en général. Cette présentation a été donné à des étudiants, j’ai l’impression que le personnel de l’université et les chercheurs présents dans la salle étaient beaucoup plus intéressé par mon discours.

https://gauthierc.github.io/SlideVirtu/

Bienvenue

Bienvenue !

Sur ce site, vous retrouverez toutes les actualités sur mes différents projets GitHub https://github.com/gauthierc

Je suis (entre autre) adminsys et j’ai malheureusement pas beaucoup le temps de développer des applis. C’est dommage car j’ai plein d’idée. En plus comme je ne programme pas beaucoup, je ne suis pas super efficace et donc cela me prends plus de temps.

Actuellement je programme en Go, Python, NodeJS et Bash (bien sûr).