Supervision d'une application web (et de son...
Transcript of Supervision d'une application web (et de son...
![Page 1: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/1.jpg)
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
![Page 2: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/2.jpg)
warning
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 2
![Page 3: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/3.jpg)
3
![Page 4: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/4.jpg)
Plansupervision applicative (web avec django ou cubicweb) avecstatsd
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
![Page 5: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/5.jpg)
5
![Page 6: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/6.jpg)
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
![Page 7: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/7.jpg)
statsdOn livre via UDP de manière asynchrone (send and forget), presqueindolore 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
![Page 8: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/8.jpg)
Exemple en python / djangohttps://django-statsd.readthedocs.io/en/latest/
Dans le code
from django_statsd.clients import statsdstatsd.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
![Page 9: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/9.jpg)
Exemple en python / cubicwebQuelques stats de base :
cache_hit
doexec
etc.
decorateur CubicWeb
@statsd_timeitdef generate_search_view(args, **kwargs): [snip]
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 9
![Page 10: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/10.jpg)
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
![Page 11: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/11.jpg)
Exemple apache
<Location /> Statsd On StatsdHost statsd.example.com # defaults to localhost StatsdPort 8155 # defaults to 8125 StatsdTimeUnit microseconds # defaults to milliseconds StatsdPrefix prod.httpd # defaults to NULL StatsdSuffix webserver001 # defaults to NULL</Location>
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 11
![Page 12: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/12.jpg)
Supervision métier
(exemple ElasticSearch) avec SaltStack
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 12
![Page 13: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/13.jpg)
Extraire et pousser des données avecSaltStack
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
![Page 14: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/14.jpg)
/srv/salt/states/_modules/lglb_es.py
import requestsdef stats(): return request.get('http://localhost:9200/_stats').json()
/srv/salt/pillars/schedule/elasticsearch.sls
schedule: elasticsearchstats: function: "lglb_es.stats" minutes: 1 returner: "carbon"
/etc/salt/minion.d/carbon.conf
carbon.host: graphite.example.org #carbon.host {{ pillar['carbon_host'] }}carbon.port: 2003
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 14
![Page 15: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/15.jpg)
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
![Page 16: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/16.jpg)
16
![Page 17: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/17.jpg)
performance webLa suite :
lighthouse pour les bonnes pratiques web
format HAR
stylestats pour les CSS
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 17
![Page 18: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/18.jpg)
collecte des métriques aveccarbon/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
![Page 19: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/19.jpg)
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 19
![Page 20: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/20.jpg)
grafana : visualisation des métriques
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 20
![Page 21: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/21.jpg)
grafana : sourcesgraphite
elasticsearch
influxdb
annotations
mélanges de types de données et de sources
http://grafana.org/features/
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 21
![Page 22: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/22.jpg)
grafana : dashboards paramétrables
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 22
![Page 23: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/23.jpg)
supervision crashs / erreurs / bugs
avec sentry
http://slides.logilab.fr/2016/meetup_python_nantes_sentry/
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 23
![Page 24: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/24.jpg)
supervision performances côté client(côté javascript)
piwik
boomerang
raven-js (breadcrumbs)
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 24
![Page 25: Supervision d'une application web (et de son architecture)slides.logilab.fr/2016/meetup_monitoring_webapp.pdf · Meetup Nantes Monitoring - novembre 2016 Arthur Lutz (Logilab) @arthurlutz](https://reader033.fdocuments.in/reader033/viewer/2022050416/5f8caaef8b405207744ac022/html5/thumbnails/25.jpg)
FinBlog d'origine : [cubicweb.org] Monitor all the things! ... andearly 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