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 full-size slide

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

    View full-size slide

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

    View full-size slide

  4. Un peu de théorie

    View full-size slide

  5. Métriques vs Événements

    View full-size slide

  6. Métriques vs Événements

    View full-size slide

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

    View full-size slide

  8. 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 full-size slide

  9. 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 full-size slide

  10. 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 full-size slide

  11. Métriques vs Événements

    View full-size slide

  12. É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 full-size slide

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

    View full-size slide

  14. É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 full-size slide

  15. É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 full-size slide

  16. 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 full-size slide

  17. Les solutions du marché

    View full-size slide

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

    View full-size slide

  19. 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 full-size slide

  20. 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 full-size slide

  21. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. Un bon départ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  28. 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 full-size slide

  29. Quoi surveiller ?

    View full-size slide

  30. 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 full-size slide

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

    View full-size slide

  32. 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 full-size slide

  33. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  37. 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 full-size slide

  38. É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 full-size slide

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

    View full-size slide

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

    View full-size slide

  41. Channel de dépréciation

    View full-size slide

  42. 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 full-size slide

  43. 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 full-size slide

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

    View full-size slide

  45. Notre solution chez Auchan Retail France

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  48. 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 full-size slide

  49. 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 full-size slide

  50. Ayé
    Merci beaucoup!

    View full-size slide

  51. Questions & Réponses

    View full-size slide

  52. 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 full-size slide