Slide 1

Slide 1 text

Surveiller ses applications en production Alexandre Salomé

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Et vous ?

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Un peu de théorie

Slide 6

Slide 6 text

Métriques vs Événements

Slide 7

Slide 7 text

Métriques vs Événements

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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 :

Slide 12

Slide 12 text

Métriques vs Événements

Slide 13

Slide 13 text

É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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

É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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Les solutions du marché

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Un bon départ

Slide 27

Slide 27 text

Un bon départ : les métriques

Slide 28

Slide 28 text

Un bon départ : les événements

Slide 29

Slide 29 text

Un bon échec critique ● Les métriques sont des événements ● 1 heure = 10 MB ● 1 jour = 200 MB ● 1 semaine = 1.5 GB

Slide 30

Slide 30 text

Quoi surveiller ?

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

É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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

Channel de dépréciation

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Alerting

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

Notre solution chez Auchan Retail France

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

Ayé Merci beaucoup!

Slide 53

Slide 53 text

Questions & Réponses

Slide 54

Slide 54 text

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