Meetup Nantes Monitoring - Supervision d'une application web (et de son architecture)
1. Supervision d'une application web
(et de son architecture)
Meetup Nantes Monitoring - novembre 2016
Arthur Lutz (Logilab) @arthurlutz @logilab
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 1
4. Plan
supervision applicative (web avec django ou cubicweb) avec
statsd
supervision frontal (apache/nginx/varnish) avec statsd
supervision métier (exemple ElasticSearch) avec SaltStack
supervision métriques performance web (sitespeed)
collecte des métriques avec carbon/graphite
visualisation des métriques avec grafana
supervision crashs / erreurs / bugs avec sentry
supervision performances côté client (coté javascript)
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 4
6. supervision applicative avec statsd
(pour cubicweb ou django)
statsd projet d'origine : statsd
serveur statsd : python-pystatsd
cubicweb
django avec django-statsd
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 6
7. statsd
On livre via UDP de manière asynchrone (send and forget), presque
indolore en terme de performances.
Format :
<metricname>:<value>|<type>
Envoyer :
echo "foo:1|c" | nc u w0 127.0.0.1 8125
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 7
8. Exemple en python / django
https://django-statsd.readthedocs.io/en/latest/
Dans le code
from django_statsd.clients import statsd
statsd.incr('response.200')
dans le middleware WSGI :
MIDDLEWARE_CLASSES = (
'django_statsd.middleware.GraphiteRequestTimingMiddleware',
'django_statsd.middleware.GraphiteMiddleware',
) + MIDDLEWARE_CLASSES
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 8
9. Exemple en python / cubicweb
Quelques stats de base :
cache_hit
doexec
etc.
decorateur CubicWeb
@statsd_timeit
def generate_search_view(args, **kwargs):
[snip]
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 9
10. supervision frontal
(apache/nginx/varnish) avec statsd
les temps de réponse
le nombre de requêtes par code HTTP
les stats par "verbe" HTTP (GET, POST, etc.)
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 10
13. Extraire et pousser des données avec
SaltStack
SaltStack
on déploie un module (python) pour extraire la donnée
on renvoie les données sérialisables avec le returner carbon
[option] : on utilise le bus de communication de salt (zmq)
pour transporter la donnée et ensuite un returner
Autres présentations à ce sujet : fosdem, cfgmgmtcamp, etc.
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 13
15. supervision métriques performance web
sitespeed.io
headless javascript (phantom.js) - renvoie à carbon
nombre de requêtes HTTP
taille des pages/assets/javascript
etc.
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 15
17. performance web
La suite :
lighthouse pour les bonnes pratiques web
format HAR
stylestats pour les CSS
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 17
18. collecte des métriques avec
carbon/graphite
carbon écoute
whisper stocke
graphite pour faire des requêtes et transformations
http://graphiteapp.org ou https://github.com/brutasse/graphite-api
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 18
23. supervision crashs / erreurs / bugs
avec sentry
http://slides.logilab.fr/2016/meetup_python_nantes_sentry/
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 23
24. supervision performances côté client
(côté javascript)
piwik
boomerang
raven-js (breadcrumbs)
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 24
25. Fin
Blog d'origine : [cubicweb.org] Monitor all the things! ... and
early too!
Des questions ?
Des ajouts ?
Présentation :
http://slides.logilab.fr/2016/meetup_monitoring_webapp.pdf
Contact : @arthurlutz @logilab
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 25