Vous êtes développeur, chef de projet technique ou même responsable et vous souhaitez avoir de la visibilité sur le fonctionnement de vos applicatifs, ou sur la plateforme sur laquelle ils sont hébergés ?
Nous étudierons comment, grâce à des outils simples (StatD / Graphite / Log BDD) et nos expériences chez M6Web, mettre en place un monitoring applicatif ultra complet.
Ce monitoring vous permettra de retrouver la vue sur vos projets, pour mieux anticiper la charge, detecter la root cause en cas d'incident et connaitre l'état de chacun de vos services ...
2. M6Webgroupe M6
Filiale digitale du + de 70 Sites sur PF LAMP
Le MVNO M6Mobile avec Orange 11,6M de Visiteurs Unique (Mars 2012 Nielsen)
Le Replay et produits dérivés des progrs télés 4 millions de lignes de codes
Un comparateur de prix 16000 requêtes MySql par seconde
CA 2011 : 102,1M€ Beaucoup de développeurs !
3. Kenny DITS ( @kenny_dee )
Responsable Etude & Dév chez M6Web
Ancien dév LAMP
Passionné de WebPerf & Monitoring
11. Je veux retrouvez la vue sur nos projets !
Que se passe-t-il en production ?
Qu’est-ce qui s’est passé ?
Mes services fonctionnent-ils ?
Pourquoi ne fonctionnent-t-ils plus ?
12. Et la donner à nos développeurs !
Vérifier l’impact de leurs mises en production sur nos applis / sur
nos serveurs, sur les temps de chargement etc …
28. Le protocole UDP :
• Fire & Forget :
• Rapide
• Pas d’attente de réponse du serveur
• Aucun impact si le serveur est inaccessible
• Attention toutefois … : trop d’UDP tue l’UDP … et les serveurs avec …
31. Hack du client Php et serveur StatsD :
Modification du client PHP pour envoyer moins de paquets UDP
=> Utilisation du register_shutdown_function pour envoyer les données
Découpage en paquets (MTU à 1500 octets pour Node.js (limitation
logicielle/hardware), 1472 octets max, 28 octets de header)
Plusieurs démons Node.js avec un LBL sur les nodes sur un CRC32 de la
chaîne modulo le nombre de serveurs
33. Graphite :
• Stocke des métriques dans le temps
• Permet de grapher ces métriques à la demande
• Graphite ne fait pas la collecte des données …
• Graphite n’est pas un outil de statistique !
• Graphite est composé de 3 éléments distincts écrits en Python :
• carbon - Démon qui récupère les métriques
• whisper - La DB qui stocke les métriques ( ressemblant à RRD)
• graphite webapp - L’interface web (sous Django) qui graphe les
métriques à la demande (avec la librairie Cairo)
43. Les possibilités d’écriture de métrique :
• stats_counts.mysql.clubic.select.edito.count
• stats_counts.mysql.{clubic,jvfr}.select.edito.count
• stats_counts.mysql.*.*.edito.count
• stats_counts.mysql.c*c.select.edito.count
• stats_counts.host-[0-1].cpu
• …
• Attention a la manière dont vous écrivez vos arbos :
• Un nœud sous Graphite représente environ 6mo !!!
53. Temps d’affichage client #webperf
• Real User Monitoring :
• Navigation Timing API (spéc HTML5)
• Utilisation de l'image Object JS (new Image()) avec les paramètres
relevés
• Node.Js : Serveur HTTP (204 ok sans contenu) et agrège les
données pour les envoyer à Graphite
Conso Cpu coté serveur
• Fonction getrusage() en PHP
• http://php.net/manual/fr/function.getrusage.php
• + Append_file ou preprend_file et/ou register_shutdown_function()
Erreurs JS
• Spec JS window.onerror(message, url, line)
• Utilisation de l'image Object JS (new Image()) avec les paramètres
relevés pour envoi à un serveur HTTP
What Else ? …
54. Le monitoring c’est bien, mais pour plus
de précision, il est indispensable de
logguer des infos plus précises ailleurs
Bdd, Syslog, …
55. Tester simplement ?
• https://github.com/suan/graphite_up
• Installation via VirtualBox + Vagrant de
• Graphite (https://github.com/graphite-project)
• StatsD (https://github.com/etsy/statsd)
• Diamond (http://opensource.brightcove.com/project/diamond)
• Sur une Debian Squeeze 32-bit via Chef.
56. Conclusion
• Beaucoup moins d’anomalies applicatives ressenties
• Eléments factuels lors des posts-mortems
• MTTD / MMTR beaucoup plus court
• Vrai liant entre Exploit et Développeur
• Réelle implication des développeurs sur l’impact de leurs
développement
• D’autres services que la technique ont mis en place leurs Dashboard à
partir de nos métriques
57. Retrouvez la DT d’M6Web sur
http://tech.m6web.fr
Et moi sur Twitter : @kenny_dee
Notes de l'éditeur
Ce modèle peut servir de fichier de démarrage pour un album photo.
Et le découvrir par moi même
Et ne pas attendre que le serveur soit à genoux
Pour encore mieux supporter la charge la prochaine fois
Pour que les problèmes deviennent transparent, et avoir aussi le droit à l’erreur
Tout ce que nous savons pourra nous servir un jour !