meetup nantes monitoring - supervision d'une application web (et de son architecture)
TRANSCRIPT
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
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
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
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
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
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
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
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
Supervision métier
(exemple ElasticSearch) avec SaltStack
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 12
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
/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
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
performance webLa suite :
lighthouse pour les bonnes pratiques web
format HAR
stylestats pour les CSS
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 17
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
grafana : visualisation des métriques
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 20
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
supervision crashs / erreurs / bugs
avec sentry
http://slides.logilab.fr/2016/meetup_python_nantes_sentry/
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 23
supervision performances côté client(côté javascript)
piwik
boomerang
raven-js (breadcrumbs)
Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 24
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