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

  2. Nous écrivons du code.

    View full-size slide

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

    View full-size slide

  4. Notre code est
    un sous-produit.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. “Ce code ne peut pas échouer”

    View full-size slide

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

    View full-size slide

  10. “Ce code ne peut pas fonctionner”

    View full-size slide

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

    View full-size slide

  12. Cela affecte nos
    décisions.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. Mesurez-le,
    vous le saurez.

    View full-size slide

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

    View full-size slide

  18. Mesurer,
    continuellement,
    en production.

    View full-size slide

  19. Et python dans tout ça ?

    View full-size slide

  20. pip installwhisper
    carbon
    graphite-web
    statsd
    metrology

    View full-size slide

  21. librato
    newrelic
    ( )

    View full-size slide

  22. Gauges
    Counters
    Meters
    Histograms
    Timers

    View full-size slide

  23. Gauges
    Il y a n workers actifs

    View full-size slide

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

    View full-size slide

  25. Gauges
    Counters
    Meters
    Histograms
    Timers

    View full-size slide

  26. Counters
    Il y a n jobs en attente

    View full-size slide

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

    View full-size slide

  28. Gauges
    Counters
    Meters
    Histograms
    Timers

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  31. Gauges
    Counters
    Meters
    Histograms
    Timers

    View full-size slide

  32. Histograms
    La taille de la réponse

    View full-size slide

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

    View full-size slide

  34. Gauges
    Counters
    Meters
    Histograms
    Timers

    View full-size slide

  35. Timers
    Temps de réponse

    View full-size slide

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

    View full-size slide

  37. Collecter,
    Agréger,
    Monitorer.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide