Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Surveiller ses applications en production

Surveiller ses applications en production

Avatar for Alexandre Salomé

Alexandre Salomé

October 28, 2016
Tweet

More Decks by Alexandre Salomé

Other Decks in Technology

Transcript

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

    marché • Quoi surveiller ? • Alerting • Notre solution chez Auchan Retail France
  2. Métriques • Un nombre qui change dans le temps •

    Appelé aussi time-series data • Nom + heure = valeur
  3. 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
  4. 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 à ...
  5. 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 :
  6. É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
  7. Événements : exemples • Logs Linux • Logs Apache ou

    Nginx • Logs Symfony • Logs MySQL • Slow query logs
  8. É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
  9. É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}" } }
  10. 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
  11. Stockages de métriques • ++ Graphite : aggrégat • +

    InfluxDB : clustering • OpenTSDB : scalable • Promotheus
  12. 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
  13. 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
  14. 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
  15. Événements : connaissez-vous ELK ? • ElasticSearch est le stockage

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

    Awesome Sysadmin : https://github.com/kahun/awesome-sysadmin
  17. Un bon échec critique • Les métriques sont des événements

    • 1 heure = 10 MB • 1 jour = 200 MB • 1 semaine = 1.5 GB
  18. 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
  19. Système Métriques • Load average • RAM • Utilisation disque

    • IOWait • Utilisation réseau • Inodes Événements • Logs système
  20. 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 • ...
  21. 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
  22. 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
  23. É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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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