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

Mesurer (par)tout, tout le temps

Mesurer (par)tout, tout le temps

Timothée Peignier

September 16, 2012
Tweet

More Decks by Timothée Peignier

Other Decks in Programming

Transcript

  1. Mesurer (par)tout,
    tout le temps

    View Slide

  2. Nous écrivons du code.

    View Slide

  3. Notre travail est de
    générer de la valeur.

    View Slide

  4. Notre code est
    un sous-produit.

    View Slide

  5. Notre code génère de
    la valeur quand il est
    exécuté, pas quand
    nous l’écrivons.

    View Slide

  6. Que fait notre code
    quand il s’exécute ?

    View Slide

  7. Mesurer.

    View Slide

  8. Notre code ne se
    comporte pas comme
    nous le pensons.

    View Slide

  9. View Slide

  10. “Ce code ne peut pas échouer”

    View Slide

  11. (et pourtant il échoue)
    “Ce code ne peut pas échouer”

    View Slide

  12. “Ce code ne peut pas fonctionner”

    View Slide

  13. (et pourtant il fonctionne)
    “Ce code ne peut pas fonctionner”

    View Slide

  14. Cela affecte nos
    décisions.

    View Slide

  15. def sort(obj_list):
    time.sleep(10)
    obj_list.sort()
    def sort(obj_list):
    obj_list.sort()
    Lequel est le plus rapide ?
    ❶ ❷

    View Slide

  16. def sleep():
    # I’m poison
    pass

    View Slide

  17. def sort(self):
    # I’m evil
    raise RuntimeError

    View Slide

  18. Mesurez-le,
    vous le saurez.

    View Slide

  19. Moins de confusion,
    de meilleures décisions.

    View Slide

  20. Mesurer,
    continuellement,
    en production.

    View Slide

  21. Et python dans tout ça ?

    View Slide

  22. pip installwhisper
    carbon
    graphite-web
    statsd
    metrology

    View Slide

  23. librato
    newrelic
    ( )

    View Slide

  24. Gauges
    Counters
    Meters
    Histograms
    Timers

    View Slide

  25. Gauges
    Il y a n workers actifs

    View Slide

  26. statsd.gauge(“workers”, state.workers_count)

    View Slide

  27. Gauges
    Counters
    Meters
    Histograms
    Timers

    View Slide

  28. Counters
    Il y a n jobs en attente

    View Slide

  29. counter = Metrology.counter('pending')
    counter.increment()
    counter.decrement()

    View Slide

  30. Gauges
    Counters
    Meters
    Histograms
    Timers

    View Slide

  31. Meters
    Il y a n requêtes/s

    View Slide

  32. meter = Metrology.meter('requests')
    meter.mark()

    View Slide

  33. Gauges
    Counters
    Meters
    Histograms
    Timers

    View Slide

  34. Histograms
    La taille de la réponse

    View Slide

  35. histogram = Metrology.histogram('response-sizes')
    histogram.update(len(response.content))

    View Slide

  36. Gauges
    Counters
    Meters
    Histograms
    Timers

    View Slide

  37. Timers
    Temps de réponse

    View Slide

  38. timer = Metrology.timer('responses')
    with timer:
    make_response()

    View Slide

  39. Collecter,
    Agréger,
    Monitorer.

    View Slide

  40. Données historiques
    + Déploiements
    + Pannes
    + Comportement en charge

    View Slide

  41. View Slide

  42. View Slide

  43. View Slide

  44. View Slide

  45. Votre vision de
    votre code sera
    plus proche de la
    réalité.

    View Slide

  46. Merci beaucoup !
    @cyberdelia
    lanyrd.com/sxqqf
    (ne soyez pas timide, posez votre
    question)

    View Slide