VT2019 Performance Monitoring

=Abstract=

=Introduction= Né du besoin de surveiller la disponibilité, le temps de réponse et le comportement de nos applications et services courants, le performance monitoring (surveillance des performances) n'est en réalité qu'une suite d'outils permettant de suivre de bout en bout les données émanant de la ou les source(s) que l'on veut surveiller, jusqu'à une interface lisible, permettant de faire ressortir toutes éventuelles irrégularités et de lancer des alertes si nécessaire.

Que ce soit au niveau d'une application web, d'un réseau ou d'un serveur, si un élément est ralenti ou en panne, c'est toute l'experience utilisateur qui peut en souffrir. Il est ainsi primordial de pouvoir surveiller les métriques de tous nos systèmes en temps réel pour pouvoir agir le plus rapidement possible en cas de problème, mais surtout pour pouvoir anticiper ces problèmes avant même qu'il n'ai lieu grace à l'analyse des données. C'est pour cette raison que la notion de performance monitoring est aujourd'hui primordiale pour tout système jugé critique.

=Fonctionnement=

La plupart des solutions de performance monitoring peuvent être décomposés en trois parties distinctes :


 * La récolte des données
 * Le stockage des données
 * La visualisation et l'analyse des données

Recolte des données
La recolte de données est la première étape pour toute surveillance de données. Les métriques surveillées peuvent être très diverses, donc les moyens de les récolter varient tout autant. Heureusement l'idée est simple : il suffit de récolter les données à partir d'une source et de les écrire dans la base de donnée. Ces sources sont aujourd'hui très variées, il est possible de surveiller des serveurs, des bases de données, toute application produisant des logs (sites webs, application mobiles), des réseaux et leurs charges, voir même des utilisateurs directement. On peut inclure aujourd'hui toutes les données émanant des capteurs de l'Internet of Things, qui représentent une source conséquente de données dont la majorité a pour unique vocation d'être monitoré (température, surveillance..)

Ainsi, beaucoup d'outils sont disponibles avec des plug-ins permettant d'adapter la récolte des données à tout projets existants relativement facilement. Cependant, les métriques recherchées sont souvent bas niveau (charge CPU, charge réseau, RAM utilisée..), ainsi l'application de récolte doit être installée directement sur tous les systèmes que l'on souhaite surveiller.

Stockage des données
Afin de pouvoir stocker toutes les données générée par les systèmes et récupérée par l'outil de récolte, il est judicieux de faire appel à des bases de données temporelle. En effet, ce sont des bases de données qui sont pensées pour fonctionner avec une notion de temps. Ainsi, il est possible de stocker un flux de donnée avec une métrique de temps et de pouvoir très facilement représenter ces données par la suite.

Visualisation et analyse des données
La partie la plus intéressante d'un point de vue monitoring est la visualisation de données. Le principe est de récupérer les métriques de la base de donnée temporelle et de les afficher sur un dashboard de manière concise, lisible et permettant ainsi en un clin d'oeil de repérer les anomalies d'un système ou d'un groupement de systèmes. Aujourd'hui, les outils de visualisation populaire sont des interfaces webs, permettant facilement la visualisation des données à distance. Il est possible de garder le stockage et la visualisation des données sur le même serveur de manière centralisé, comparé aux outils de récolte qui doivent être déployés.

=Exemple d'outils utilisés ensemble= Comme vu précédemment, on distingue trois parties différentes dans un système de performance monitoring. Bien qu'il existe de nombreux outils de récolte de données, de stockage et de visualisation, on retrouve généralement les mêmes outils utilisés ensemble pour leurs cohérences et leurs compatibilité.

Voici quelques exemples d'outils utilisés ensemble :

Telegraf
Telegraf est un agent écrit en langage Go utilisé pour la collecte de métriques de performance du système sur lequel il est executé, et sur les services tournant sur ce même système. Il a été designé dans l'optique d'être très léger en utilisation mémoire, avec un système de plug-ins à intégrer en fonction des besoins du développeur, permettant de créer un telegraf "sur mesure". Il est donc très facile pour les développeurs de créer de nouveaux plugins pour collecter de nouvelles métriques. Il se connecte très facilement à InfluxDB ou tout autre service de base de données supporté.

Influxdb
InfluxDB est un système de gestion de base de données orientée séries chronologiques. Cela veut dire qu'InfluxDB est optimisé pour du stockage rapide avec très haute disponibilité de données estampillées avec une notion de temps. De fait, c'est un moyen de stockage idéal pour des métriques de performances qui sont forcément chronologiques, des données de capteurs IoT, ou n'importe quelle utilisation avec des données en temps réel. InfluxDB est également écrit en Go.

Grafana
Grafana est une interface permettant la visualisation et la mise en forme de données métriques. Grafana représente donc la partie visible de notre monitoring de performance en proposant des dashboards customisable très rapidement et permettant d'avoir une vue d'ensemble sur toutes les données que l'on agrège, en temps réel. Grafana est compatible avec plusieurs sources, dont InfluxDB, Graphite (qui était un système de performance très utilisé avant l'arrivée des interface de visualisation web) et Prometheus.

Kibana
=Importance du monitoring de performance dans le domaine du web= Différentes études montrent qu'un site web qui met trois secondes à charger fait perdre 40% de ses visiteurs. Le délai entre chaque changement de pages contribue aussi grandement à détourner les clients. Dans un marché ou la concurrence est rude, il est aujourd'hui indispensable d'avoir un site qui est non seulement rapide mais sans bugs et sur tout support (mobile et desktop). On va ainsi surveiller plusieurs métriques, en voici quelques exemples :


 * Le temps jusqu'à l'arrivée du premier octet au client
 * Le temps de chargement de la page
 * La durée du rendu côté client
 * La durée du DNS..

=Démonstration=

=Sources=
 * https://neilpatel.com/blog/loading-time/?wide=1 : Conséquences des délais de chargement sur la satisfaction client