Surveiller ses applications en production

Surveiller ses applications en production

8665aad8f35b1710df79e9aef52d6daa?s=128

Alexandre Salomé

October 28, 2016
Tweet

Transcript

  1. Surveiller ses applications en production Alexandre Salomé

  2. /me • Architecte SI chez Auchan Retail France • Développeur

    PHP depuis mes 15 ans
  3. Et vous ?

  4. Sommaire • Un peu de théorie • Les solutions du

    marché • Quoi surveiller ? • Alerting • Notre solution chez Auchan Retail France
  5. Un peu de théorie

  6. Métriques vs Événements

  7. Métriques vs Événements

  8. Métriques • Un nombre qui change dans le temps •

    Appelé aussi time-series data • Nom + heure = valeur
  9. 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
  10. 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 à ...
  11. 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 :
  12. Métriques vs Événements

  13. É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
  14. Événements : exemples • Logs Linux • Logs Apache ou

    Nginx • Logs Symfony • Logs MySQL • Slow query logs
  15. É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
  16. Événements : extraction de champs • Logstash fournit un ensemble

    d’expressions régulières embarquées : Exemple : lecture les logs Apache/Nginx grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
  17. 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
  18. Les solutions du marché

  19. Stockages de métriques • ++ Graphite : aggrégat • +

    InfluxDB : clustering • OpenTSDB : scalable • Promotheus
  20. 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
  21. 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
  22. 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
  23. Metrics depuis votre application • <3 m6web/statsd <3 • https://packagist.org/search/?q=<your-solution>

  24. Événements : connaissez-vous ELK ? • ElasticSearch est le stockage

    • LogStash traite les logs • Kibana fait l’affichage
  25. À voir également... Stockage d’événements : • Graylog • Fluentd

    Awesome Sysadmin : https://github.com/kahun/awesome-sysadmin
  26. Un bon départ

  27. Un bon départ : les métriques

  28. Un bon départ : les événements

  29. Un bon échec critique • Les métriques sont des événements

    • 1 heure = 10 MB • 1 jour = 200 MB • 1 semaine = 1.5 GB
  30. Quoi surveiller ?

  31. 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
  32. Système Métriques • Load average • RAM • Utilisation disque

    • IOWait • Utilisation réseau • Inodes Événements • Logs système
  33. Services Métriques • MySQL ◦ Nombre de requêtes ◦ Cache

    hit/miss • Apache ◦ Nombre de requêtes ◦ Busy/idle workers • HAProxy • Redis • …. Événements • Apache|Nginx access logs • Apache|Nginx error logs • MySQL logs • ElasticSearch logs • ...
  34. Applications Métriques • Mémoire/Durée par URL • Utilisation de fonctionnalités

    • Métriques personnalisées ◦ Inscription ◦ Tunnel de commande Événements • Logs applicatifs • Logs personnalisés ◦ Registration & GeoIP ◦ Détails de commande ◦ Détails de fonctionnalités
  35. Application : mesures génériques pour votre appli http://bit.ly/2ciZDLI

  36. Application : mesures génériques pour votre appli http://bit.ly/2ciZDLI

  37. Application : mesures génériques pour votre appli http://bit.ly/2ciZDLI

  38. Métriques applicatives • Utilisez des événements ◦ Ne couplez pas

    votre application à votre monitoring • M6Web/StatsdBundle rend cela configurable (dans Symfony) : m6_statsd: clients: default: Events: forum.read: increment : mysite.forum.read
  39. É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
  40. Channel de dépréciation http://bit.ly/2c8oWpk

  41. Channel de dépréciation http://bit.ly/2c8oWpk

  42. Channel de dépréciation

  43. 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
  44. Alerting

  45. 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
  46. Alerting Grafana • Depuis la version 3.1.0 • Pour l’instant,

    ne supporte que Graphite
  47. Notre solution chez Auchan Retail France

  48. Notre stack • Splunk pour les événements • Zabbix pour

    les métriques
  49. Zabbix • Utilisé pour la surveillance du système et des

    services
  50. 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
  51. 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
  52. Ayé Merci beaucoup!

  53. Questions & Réponses

  54. Crédits photo • Andrew Malone - Measuring - https://flic.kr/p/aqhCH8 •

    Sebastian Schulze - SymfonyLive 2010 - https://flic.kr/p/7Ef7vx • KimManleyOrt - At the Math Grad House - https://flic.kr/p/m2UBWH • Usehung - Chemistry - https://flic.kr/p/4uT7Er • Cybjorg - Gauges - https://flic.kr/p/5r3LuJ • Shan Ambrose - alert - https://flic.kr/p/cAk4KC • Nicolas Buffler - Projet 365 - 209/365 - https://flic.kr/p/mkHfLF • Derek Bridges - Questions - https://flic.kr/p/5DeuzB