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

Comment Grapher et visualiser vos datas @ PHPTourLyon 2014

Comment Grapher et visualiser vos datas @ PHPTourLyon 2014

Grégoire Pineau

June 23, 2014
Tweet

More Decks by Grégoire Pineau

Other Decks in Programming

Transcript

  1. Quelques questions Combien de: • nouveaux utilisateurs chaque jour •

    commentaires ajoutés • commandes validées • erreur 500 • hit par controller / route
  2. Graphite • outils en python • stock des time-series •

    rend des graphiques • https://graphite.readthedocs.org/
  3. 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
  4. 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 ◦ ….
  5. Carbon • Carbon-agent est un démon • Il fonctionne en

    TCP ou en UDP • Pour chaque métrique reçu, il écrit dans whisper
  6. 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 ◦ ...
  7. Graphite (2) • Met aussi a disposition une “api” ◦

    CSV ◦ JSON ◦ raw ◦ SVG ◦ PNG • http://graphite.lxc/&[...]&format=json • http://graphite.lxc/&[...]&format=csv
  8. 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
  9. Storage Schema [github] pattern = ^github retentions = 1d:5y [all]

    pattern = .* retentions = 10s:6h,1min:6d,10min:1y, 1h:5y
  10. Raw

  11. 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 !
  12. 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 !!!
  13. Sampling Pendant un intervalle donnée, stastd va calculer la valeur

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

    • Timing (Temps de création de la réponse) • Gauge (Nombre d’utilisateurs total)
  15. 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
  16. 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)
  17. 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
  18. 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)
  19. 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 ...
  20. 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
  21. 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
  22. 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 / ...
  23. 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
  24. 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
  25. 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
  26. 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.
  27. 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)
  28. 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.
  29. Moteur connu Hormis quelques bons moteurs (Giraffe, Cubism, …) la

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

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

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