Meetup Nantes Monitoring - Supervision d'une application web (et de son architecture)

25
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

Transcript of Meetup Nantes Monitoring - Supervision d'une application web (et de son architecture)

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

warning

Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 2

3

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

5

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:  elasticsearch­stats:    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

16

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

Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 19

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

grafana : dashboards paramétrables

Meetup Nantes Monitoring novembre 2016 @arthurlutz @logilab 22

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