Vous avez un site en production, avec le temps, il accumule de plus en plus de données, et le nombre de visiteurs augmente. Généralement les sysadmins ont tout un ensemble d’outils de surveillance et d’alertes mais peu de prophylactique (préventif).
Afin d’éviter que les performances ne s’effondrent ou ne s’érodent, il peu être intéressant sur certains projets d’anticiper en mettant en place des métriques. Généralement on va utiliser un outil de test de charge qui permet de déterminer combien d’utilisateurs simultanés un site peut supporter. Mais les tests de charges sont ponctuels et se font hors des serveurs de production.
Une autre manière de procéder (complémentaire) c’est de surveiller les performances du site (en plus de surveiller l’utilisation des ressources serveurs, bien évidement). Tout l’intérêt est de faire ça :
Dans cet article, nous allons voir comment tracer un graphe de performance sur un simple temps de réponse à la demande de chargement d’une page web. Nous verrons aussi comment aller plus loin dans les sondes à mettre en place pour surveiller plus finement les performances d’un site afin de repérer le plus tôt possible les goulots d’étranglements et de voir l’impact des différentes évolutions du site.
Installer le stack ELK
Sur une debian 8.
ELK est composé des outils suivants : Elasticsearch, logstash, et Kibana. Elasticsearch est un moteur de recherche basé sur Lucene, sans schéma, qu’il faut voir ici comme un outil d’indexation avant tout. Logstash lui est un « collecteur » de données, principalement depuis des logs (mais il permet d’aller chercher des indicateurs temps réels aussi). Kibana permet de requêter et visualiser ces données.
Attention beaucoup de tutos sur le net décrivent comment installer la version 1.3 ou 2.x. J’utilise la version 5 ici.
Préliminaire, installer java :
sudo apt-get install openjdk-8-jre
https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list sudo apt-get update && sudo apt-get install elasticsearch sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable elasticsearch.service sudo systemctl start elasticsearch.service #sudo systemctl stop elasticsearch.service sudo apt-get install logstash sudo apt-get install kibana
Nous avons elasticsearch sur le port 9200 (mais il ne réponds pas en HTTP) et Kibana sur le port 5601 (qu’on peut visiter comme un site web).
Vérification de l’installation :
curl -XGET 'localhost:9200/?pretty'
Astuce pour vider totalement Elastic (pratique en cas de fausse manip) :
curl -XDELETE localhost:9200/*
Configurer logstash
A partir de la, il faut configurer logstash pour remonter les données qui nous intéressent dans elasticsearch, à savoir, les temps de réponses de notre site. Je prends emh.fr comme exemple de site (ce n’est pas un vrai site).
etc/logstash/conf.d/perfmon.conf :
input { # Web Application Response Time exec { type => "ws-ping" add_field => [ "service" , "emh" ] add_field => [ "received_at", "%{@timestamp}" ] command => "/usr/bin/time -f '%e' curl -sk -o /dev/null http://www.emh.fr 2>&1" interval => 60 } } filter { if [type] == "ws-ping" { grok { match => { "message" => "%{NUMBER:responsetime:float}" } } } } output { elasticsearch { hosts => ["localhost"] index => "logstash-perf-emh" } }
Kibana
Installer Grafana
Kibana est certes très puissant. Pourquoi Grafana ? Kibana serait finalement suffisant mais souffre d’un gros défaut (en version gratuite) : c’est une page non protégée. Grafana, qui est très puissant et versatile dispose d’une page de login. En plus Grafana peut se brancher sur plusieurs sources, dispose de plugins très facile à installer.
http://docs.grafana.org/installation/debian/
echo "deb https://packagecloud.io/grafana/stable/debian/ jessie main" | sudo tee -a /etc/apt/sources.list.d/grafana.list curl https://packagecloud.io/gpg.key | sudo apt-key add - sudo apt-get update && sudo apt-get install grafana systemctl daemon-reload systemctl start grafana-server systemctl status grafana-server sudo systemctl enable grafana-server.service
Configurer Grafana
Par défaut on travaille sur le port 3000 : http://localhost:3000 admin/admin
Ajouter une datasource, ici j’ai mis « logstash-* » car je souhaite pouvoir grapher plusieurs index, mais j’aurais pu mettre « logstash-perf-emh » :
Pour créer une visualisation, il faut créer un dashboard et lui rajouter une ligne (row). Ensuite on rajoute une query sur une datasource et on défini des métriques à afficher.
D’une manière générale, la création de graphiques sous Grafana est plus intuitive que sous Kibana. La possibilité d’intervenir en aval sur les valeurs (Script : _value*1000) peut-être utile.
Laisser un commentaire