Synthetic Monitoring avec Sitespeed.io et Grafana
Le synthetic monitoring (ou supervision active) consiste à superviser une application en simulant de l’activité. Le synthetic monitor va alors parcourir la page et déterminer :
- L‘état des performances au moment de l’exécution.
- La disponibilité de l’application.
Dans un précédent article, on discutait de l’utilisation de Sitespeed.io pour tester les performances d’une application web. Il se trouve que Sitespeed.io peut également servir de sonde applicative et peut être facilement mis en place grâce à une intégration native avec Graphite et InfluxDB. Nous allons donc mettre en place l’architecture suivante à l’aide de Kubernetes :
- Les données sont stockées sur une base de données Graphite.
- La visualisation se fait à l’aide de Grafana.
- Un Cronjob Kubernetes permet d’exécuter périodiquement un scan à l’aide de Sitespeed.io.
Graphite propose également une interface web sur le port 8080 qui permet d’explorer rapidement les données présentes en base.
Le code source est disponible sur Github.
Stockage et visualisation des données
Stockage des données avec Graphite
Pour stocker les données nous utiliserons Graphite qui est composé (entre autre) d’une base de données optimisée pour les séries temporelles (Whisper database). On déploiera deux services :
- graphite-api sur le port 2003 : Le service sur lequel nous enverrons nos métriques.
- graphite-http sur le port 8080 : Le service sur lequel nous allons récupérer nos métriques.
Notez que ce déploiement ne définit pas de volume pour stocker les données ce qui implique qu’à l’arrêt du pod les données sont perdues. Si vous voulez réellement implémenter cette solution il faudra définir un volume persistent.
Visualisation des données avec Grafana
Pour visualiser nos données, on utilisera Grafana. Dans cet article on ne détaillera pas les Configmap qui contiennent la définition de la datasource Graphite et du dashboard par défaut cependant le code est disponible sur le dépôt Github. Il faudra créer un déploiement et un service sur le port 3000 pour accéder à notre dashboard.
Plusieurs volumes sont montés sur notre conteneur Grafana :
- grafana-datasource : qui permet d’alimenter automatiquement Grafana avec la datasource Graphite.
- grafana-dashboards : qui permet d’ajouter notre dashboard prédéfini.
Exécution du monitor
Une fois notre base de données et notre Grafana configurés, on peut lancer périodiquement notre scan Sitespeed.io. Pour cela on fera simple un cronjob Kubernetes avec une execution toutes les deux minutes.
Suivi des performances
Une fois notre stack complètement déployée, plusieurs itérations peuvent être nécessaires avant que les données relatives au navigateur soient stockées dans la base. Une fois ces données remontées on obtient ce résultat.
Ce n’est bien sûr qu’un exemple de dashboard mais on y retrouve :
- Les scores déterminés par le Coach.
- Les métriques principales permettant de suivre les performances de l’application testée.
Beaucoup d’autres métriques sont disponibles et Sitespeed.io propose également des dashboards prédéfinis qui sont disponibles dans la documentation.
Avec un peu plus de configurations il est possible de :
- Rendre le stockage des métriques permanent.
- Rajouter/Modifier des dashboards pour les adapter à votre besoin.
- Modifier la politique de stockage des rapports HTML générés par sitespeed.io pour pouvoir les consulter et éviter leur suppression avec la destruction du pod.
Conclusion
Il existe beaucoup de solutions de synthetic monitoring : la plus part des APM du marché en propose. Ces solutions peuvent être onéreuses mais ont l’avantage de ne pas engendrer de coûts de maintenance. La solution décrite dans cette article a pour avantages :
- D’utiliser uniquement des projets Open source.
- De vous laisser un contrôle total sur vos données.
- D’être totalement adaptable à votre besoin.