Performance monitoring de base avec ELK / Grafana

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.

Vous avez un site en production et 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) 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 :

 

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.

Un commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *