Métriques : Exemples ● Métriques système ○ Load average ○ Utilisation de la RAM ○ I/O Disque ● Métriques service ○ Nombre de requêtes SQL ○ Cache hits et misses ● Métriques applicatives ○ Nombre d’inscription ○ Durée de génération d’une page
Métriques : Aggrégation ● Important quand on fait une requête ● Différents agrégats ○ Somme ○ Moyenne ○ Max ○ Min ○ 90th percentile ● Utilisable pour réduire le stockage ○ Toutes les minutes, maintenant à 1 semaine ○ Toutes les 15 minutes, 1 semaine à 1 mois ○ Toutes les heures, 1 mois à 6 mois ○ Tous les jours de 6 mois à ...
Métriques : Dérivée Certaines métriques sont des séries croissantes. ● Nombre de requête SQL ● Traffic réseau Pour avoir un débit, vous devez calculer la dérivée :
Événements Un événement est un message de votre application, votre système ou votre service. Il est au format texte : 2016-09-06 20:47:13 - Alexandre is preparing slides for the conference
Événements : extraction de champs On analyse les messages avec une expression régulière : 2016-01-14 12:34:32 boston-01: User “alice” connected to the application from IP 12.34.56.78 On obtient une table de données : Date 2016-01-14 Time 12:34:32 Server boston-01 Event type login Username alice IP 12.34.56.78
Métriques et Événements > Comparaison Les métriques sont bien pour : ● Time series data ● Consolidation dans le temps ● Mathématiques ● Taille de stockage Nombres Les événements sont bien pour : ● Stocker n’importe quel message ● Extraire les champs pour indexation/requêtage Texte
Métriques du système et des services Une bonne solution : collectd ● Plugins pour les métriques système et service : CP, RAM, load average, réseau, MySQL, Apache, AMQP, Carbon, Température CPU, Système de fichiers, Disque, IRQ, NFS, PostgreSQL, Syslog, MongoDB, Redis, Nombre de fichiers, … ● Vous pouvez ajouter des métriques personnalisées en utilisant le plugin Exec Envoie toutes les métriques au stockage
Métriques du système et des services Une solution complète : Zabbix ● Des agents pour collecter ● Un appli Web pour être alerté ● Push par Mail/SMS/autre ● Extraction complète de métriques ○ Métriques système ○ Métriques des services ○ Appels à distance
Temporisation des métriques avec StatsD ● Une application Node.JS pour temporiser les envois de métrique ● Beaucoup de backends disponibles ● Supporte différents types de métriques ○ Counters (+1, +3, +2) ○ Sampling ○ Gauges (200, +3, -2) ● Un protocole UDP très simple ● Envoie les métriques toutes les X secondes ● Optimise la performance des applications
Tout ce qui change peut être mesuré ● Mesurez n’importe quoi, mesurez tout ● 3 niveaux : ○ Système : Le système Debian/Archlinux/whatever que vous utilisez ○ Services : Apache, MySQL, Docker, Nginx, Redis, … ○ Applications : Votre application PHP How to Measure Anything: Finding the Value of Intangibles in Business By Douglas W. Hubbard
Événements applicatifs ● Utilisez un log unique pour router vos messages vers votre stack et créez des tableaux de bord ● Exemple : le channel deprecated pour les messages de dépréciation
Quoi mesurer ? ● Performance du système et des services ○ Load average ○ Disque libre ● Erreurs système et services ○ Erreurs syslog ○ Status HTTP >= 500 ● Comportement utilisateur ○ Utilisation des fonctionnalités ○ Nombre d’inscriptions ○ Nombre de pages vues
Un petit mot sur l’alerting ● C’est bien de mesurer, c’est mieux d’être alerté ● Définissez des règles, soyez notifié quand une règle n’est pas respectée ● Ne mettez pas vos alertes à 95% : si votre système de fichier est rempli à 95%, votre système est déjà en souffrance ○ Préférez 60% ● Traiter un problème avant qu’il ne survienne évite de faire une récupération sur erreur ● Les règles d’alerte peuvent être complexes ○ En heures ouvrées, on envoie un mail ○ Sinon, on envoie un SMS au téléphone du responsable IT ○ Si le responsable est en vacances, on envoie à son backup
Splunk ● ELK + $$$ = Splunk ● Toute l’entreprise peut l’utiliser ● Extraction de champ à la volée ○ Interface Web pour configurer ● Langage de requête puissant : ○ index=apache sourcetype=frontend | timechart count BY host ○ index=apache sourcetype=frontend host=auchan.fr | stats avg(response_time) BY path ● Éditeur de graphe puissant ● Data models → Tableaux croisés dynamiques pour le métier
Conclusion ● Surveillez tout ce qui change ● Instrumentalisez votre application ● Surveillez vos composantes métier critiques ● Créez des tableaux de bord décisionnels ● Alertez vous à 60%, pas à 95% ● Si vous avez de l’argent, achetez Splunk