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

Surveiller ses applications en production

Surveiller ses applications en production

Alexandre Salomé

October 28, 2016
Tweet

More Decks by Alexandre Salomé

Other Decks in Technology

Transcript

  1. Surveiller ses applications en production
    Alexandre Salomé

    View Slide

  2. /me
    ● Architecte SI chez Auchan Retail France
    ● Développeur PHP depuis mes 15 ans

    View Slide

  3. Et vous ?

    View Slide

  4. Sommaire
    ● Un peu de théorie
    ● Les solutions du marché
    ● Quoi surveiller ?
    ● Alerting
    ● Notre solution chez Auchan Retail France

    View Slide

  5. Un peu de théorie

    View Slide

  6. Métriques vs Événements

    View Slide

  7. Métriques vs Événements

    View Slide

  8. Métriques
    ● Un nombre qui change dans le temps
    ● Appelé aussi time-series data
    ● Nom + heure = valeur

    View Slide

  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

    View Slide

  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 à ...

    View Slide

  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 :

    View Slide

  12. Métriques vs Événements

    View Slide

  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

    View Slide

  14. Événements : exemples
    ● Logs Linux
    ● Logs Apache ou Nginx
    ● Logs Symfony
    ● Logs MySQL
    ● Slow query logs

    View Slide

  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

    View Slide

  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}" }
    }

    View Slide

  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

    View Slide

  18. Les solutions du marché

    View Slide

  19. Stockages de métriques
    ● ++ Graphite : aggrégat
    ● + InfluxDB : clustering
    ● OpenTSDB : scalable
    ● Promotheus

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  23. Metrics depuis votre application
    ● <3 m6web/statsd <3
    ● https://packagist.org/search/?q=

    View Slide

  24. Événements : connaissez-vous ELK ?
    ● ElasticSearch est le stockage
    ● LogStash traite les logs
    ● Kibana fait l’affichage

    View Slide

  25. À voir également...
    Stockage d’événements :
    ● Graylog
    ● Fluentd
    Awesome Sysadmin :
    https://github.com/kahun/awesome-sysadmin

    View Slide

  26. Un bon départ

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  30. Quoi surveiller ?

    View Slide

  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

    View Slide

  32. Système
    Métriques
    ● Load average
    ● RAM
    ● Utilisation disque
    ● IOWait
    ● Utilisation réseau
    ● Inodes
    Événements
    ● Logs système

    View Slide

  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
    ● ...

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  42. Channel de dépréciation

    View Slide

  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

    View Slide

  44. Alerting

    View Slide

  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

    View Slide

  46. Alerting Grafana
    ● Depuis la version 3.1.0
    ● Pour l’instant, ne supporte que Graphite

    View Slide

  47. Notre solution chez Auchan Retail France

    View Slide

  48. Notre stack
    ● Splunk pour les événements
    ● Zabbix pour les métriques

    View Slide

  49. Zabbix
    ● Utilisé pour la surveillance du système et des services

    View Slide

  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

    View Slide

  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

    View Slide

  52. Ayé
    Merci beaucoup!

    View Slide

  53. Questions & Réponses

    View Slide

  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

    View Slide