Save 37% off PRO during our Black Friday Sale! »

Comment Grapher et visualiser vos datas @ PHPTourLyon 2014

Comment Grapher et visualiser vos datas @ PHPTourLyon 2014

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

June 23, 2014
Tweet

Transcript

  1. Comment grapher et visualiser vos datas PHP Tour Lyon 2014

  2. Qui suis-je ? Grégoire Pineau Développeur @SensioLabs @lyrixx

  3. Pourquoi Grapher ?

  4. Pour la visibilité https://www.flickr.com/photos/jronaldlee/6469277257

  5. Quoi Grapher ?

  6. Le comportement des utilisateurs https://www.flickr.com/photos/raneko/5198682308

  7. La santé de votre infra https://www.flickr.com/photos/traftery/4773457853

  8. Vos données métier !!!

  9. None
  10. Quelques questions Combien de: • nouveaux utilisateurs chaque jour •

    commentaires ajoutés • commandes validées • erreur 500 • hit par controller / route
  11. Comment grapher vos data métier ?

  12. Graphite • outils en python • stock des time-series •

    rend des graphiques • https://graphite.readthedocs.org/
  13. None
  14. Premier constat C’est moche Mais on a une solution pour

    ça !
  15. Architecture • Whisper est l’outil bas niveau qui stock les

    data • Carbon est un démon qui reçoit les métriques et les injecte dans Whisper • Graphite est une application Django (python) qui rend vos données sous forme de graphique
  16. Whisper (DB) Carbon (démon) Vous (PHP / …) Graphite (Front/API)

  17. Whisper • Time series database • Ressemble à du RRD

    • Mais peut travailler avec différentes résolutions: ◦ 1 point toutes les 10 secondes pendant 1 jour ◦ 1 point toutes les 10 minutes pendant 10 jour ◦ 1 point toutes les heures pendant 5 ans ◦ ….
  18. Carbon • Carbon-agent est un démon • Il fonctionne en

    TCP ou en UDP • Pour chaque métrique reçu, il écrit dans whisper
  19. Graphite (1) • Rend vos time serie sous forme de

    graphique temporel. • Mets à disposition beaucoup de fonctions statistiques: ◦ +, -, /, * ◦ dérivé / intégral ◦ 99 percentil ◦ max / min ◦ ...
  20. Graphite (2) • Met aussi a disposition une “api” ◦

    CSV ◦ JSON ◦ raw ◦ SVG ◦ PNG • http://graphite.lxc/&[...]&format=json • http://graphite.lxc/&[...]&format=csv
  21. Écrire dans graphite

  22. Whisper • Whisper met à jour les fichiers .wsp lorsqu’

    une nouvelle valeur arrive. • Les fichiers .wsp feront toujours la même taille • Il agrège aussi les data “anciennes” en fonction des fichiers storage-schema.conf et storage-agregation.conf
  23. Storage Schema [github] pattern = ^github retentions = 1d:5y [all]

    pattern = .* retentions = 10s:6h,1min:6d,10min:1y, 1h:5y
  24. Storage Aggregation [default_average] pattern = .* xFilesFactor = 0 aggregationMethod

    = average
  25. Données de test https://gist.github.com/mleinart/6283958 Puis: whisper-random.py test/foo/bar/key.wsp

  26. Comment exploiter les Time Series

  27. Raw

  28. Moyenne

  29. Différence dans le temps

  30. Graphite n’est pas suffisant Graphite ne garde que la dernière

    valeur envoyé dans un intervalle de temps Mais on a une solution pour ça !
  31. Statsd

  32. Statsd (1) • Est un démon (node js) écrit par

    Etsy • A qui on parle en UDP • Et qui sample les data dans un intervalle de temps • Il existe un portage pour chaque langage qui existe sur terre !!!
  33. Whisper (DB) Statsd (démon) Vous (PHP / …) Graphite (Front/API)

    Carbon (démon)
  34. Sampling Pendant un intervalle donnée, stastd va calculer la valeur

    moyenne des données en entré Puis il va envoyer cette valeur à carbon.
  35. Les métriques statsd • Compteur (+1 à chaque nouvelle inscription)

    • Timing (Temps de création de la réponse) • Gauge (Nombre d’utilisateurs total)
  36. La métrique Timing • Timing est TRÈS mal nommée !!!

    • Statsd va envoyer en plus à carbon: ◦ valeur max ◦ valeur min ◦ nombre de valeur recu ◦ 99 percentil ◦ moyenne ◦ médiane • Convient très bien pour une conso mémoire
  37. Ecrire dans statsd

  38. None
  39. Résultat

  40. Attention à la configuration (1) Les fenêtres de sampling /

    aggragation doivent être les mêmes entre statsd et carbon. Sinon vous allez: perdre des données (statd > carbon) avoir des données à 0 (statsd < carbon)
  41. Attention à la configuration (2) Par défaut, carbon re-agrège en

    faisant la moyenne, dans certains cas il faut: • garder la valeur max • garder la valeur min • faire le total https://github. com/etsy/statsd/blob/master/docs/graphite.md
  42. Et avec PHP ?

  43. Packagist • https://packagist.org/search/?q=statsd • Autant de libs que de développer

    • (au moins) deux lib sortent du lot: ◦ https://packagist.org/packages/beberlei/metrics (12K installation) ◦ https://packagist.org/packages/m6web/statsd (3K installation)
  44. beberlei/metric

  45. None
  46. None
  47. Et avec Symfony2 ?

  48. MetricBundle

  49. Configuration des services

  50. Astuce Symfony2 • Branchez vous sur tous les listeners possibles

    : ◦ kernel.terminate ▪ pour grapher les temps de réponse ▪ la mémoire ▪ le status code ◦ doctrine: temps passé à requêter la DB, le type de query (SELECT, UPDATE, …) ◦ security: avoir des informations sur le login ...
  51. Quelques astuces

  52. Nommage des métriques (1) • Le nommage est très important

    • On peut “glober” avec graphite ◦ analysis.details.grade.* ◦ http.request.method.* • Il faut éviter les conflits lorsqu’on glob • Toujours bien namespacer les métriques
  53. Nommage des métriques (2) • Pour les compteurs, suffixer par

    un verbe au passé : ◦ project.created ◦ violation.comment.created • Pour le reste il n’y a pas de convention
  54. La fonction hitcount • Graphite stock des valeurs par seconde

    • C’est très déroutant au début • Il faut utiliser la fonction hitcount par avoir des valeur par minutes / heures / ...
  55. Infrastructure (1) • Installer graphite sur un SSD • Installer

    graphite sur un SSD • Installer graphite sur un SSD • Installer graphite sur un SSD • Installer graphite sur un SSD • Installer graphite sur un SSD • Installer graphite sur un SSD • Installer graphite sur un SSD
  56. Infrastructure (2) Si vous n’avez pas de SSD, Augmentez la

    première fenêtre de 10 secondes à 1 minute Attention, c’est à faire dans statsd ET dans carbon
  57. Bien tester sa configuration • La configuration est écrite dans

    le fichier . wsp lors de sa création. • Il n’est pas possible de changer la configuration après coup • A moins de connaître ses outils
  58. XFileFactor Défit si l'intervalle doit être mis à null lors

    de l'agrégation si il n’y a pas assez de valeur Le mettre à 0 si vous n’avez que peu de data.
  59. Connaître les outils bas niveau • whisper-info.py • whisper-fetch.py /

    whisper-dump.py • whisper-resize.py ◦ permet de changer le xfilefactor ◦ permet de changer la taille des fenêtres ◦ C’est lent … (120Go de data transformé en 15h)
  60. 0 est très différent de null

  61. Et maintenant ?

  62. Il faut construire des dashboards Vous pouvez utiliser graphite …

    Mais c’est moche et peu ergonomique Il existe pléthore de moteurs de dashboard open source exploitant l’API JSON de graphite. Il y a environ autant de moteurs de dashboard que de développeurs.
  63. Moteur connu Hormis quelques bons moteurs (Giraffe, Cubism, …) la

    plupart ont besoin de Ruby, PHP, Python ou… Mais pourquoi ?
  64. Grafana • Uniquement en HTML + CSS + JS •

    Basé sur le super moteur Kibana • Mais utilise graphite comme backend • http://grafana.org/
  65. None
  66. Grafana - Features • Sexy • Auto - refresh •

    Time range sélecteur • Configuration dynamique • Query Builder très bien fait • http://grafana.org/ • Demo ?
  67. Merci. Des questions ?