Monitoring
BBL Kyriba
Vendredi 29 Novembre
Sommaire
Principes
Monitoring
Dashboard
Alerting
Conclusion
Intervenant
Olivier Bazoud @obazoud
Developpeur
Spring-*/JEE, DevOps, Node.js
Scala bientôt ;)
Co-auteur de “Spring Batch ...
Et vous ?
Principes
Principes
Comment se comporte mon application en
production ?
Comment analyser les problèmes ?
Comment anticiper le “capac...
Principes
● Business
○ nombre de virements, de connexions, workflow

● Application
○ consommation mémoire, temps de traite...
Principes
Partager les informations
● Dev
● Ops
● PO
● Direction
Principes
“Si ce n’est pas monitoré, ça ne va pas en
production!”
“Si tu ne peux pas le mesurer, tu ne peux pas l’
amélior...
Monitoring
Graphite
“Graphite is an enterprise-scale monitoring tool
that runs well on cheap hardware.”
Graphite
Permet de
1. Stocker les “numeric time-series”
2. Visualiser des graphes
N’est pas un collecteur de données
Graphite
Mode Push
Stockage fichiers
URL API: graphes, json, csv
Fonctions
Graphite

http://graphite.readthedocs.org/en/latest/who-is-using.html
Graphite
whisper

Ecr
it

en p
ytho

n

carbon (cache/relay/ aggregation)
graphite-web
Graphite
visualise
metric

lire dans le
cache

cache

Carbon

Graphite Web

whisper

whisper

collecteurs
écrire

lire

FS
Carbon
“The plaintext protocol”
echo "local.my.metric 123.45 `date +%s`" | nc localhost 2003

“The pickle protocol”
[(path...
Carbon
cache
aggregator
relay
Carbon cache
Réceptionne les métriques
Stockage en mémoire
○ Si le cache est tué, perte des métrics du cache

Ecriture sur...
Carbon aggregator
Calcul des aggrégations de métriques
○ avg, min, max, pourcentile, ...

Réduction des I/O
Carbon relay
Réplication
➔ Basé sur des règles
“Sharding”
➔ “Consistent hashing”
➔ “Scale horizontally”

Carbon
Relay

Car...
Carbon
● MAX_CACHE_SIZE
○ Taille du cache

● MAX_CREATES_PER_MINUTE
○ Permet de réduire les I/O

● MAX_UPDATES_PER_SECOND
...
Whisper

“Whisper is a fixed-size database (...). It provides fast,
reliable storage of numeric data over time. Whisper al...
Whisper
Création à la demande
1 métric = 1 fichier
Métric “dev.ks.load.shortterm”
-> ./dev/ks/load/shortterm.wsp
Whisper
Header + Zones de retention

http://www.aosabook.org/en/graphite.html
Whisper
[carbon]
pattern = ^load.
retentions = 10s:1d,1m:7d,4m:30d
1 point toutes les 10s pendant 1 jour
1 point par minut...
Whisper
[carbon]
pattern = ^load.
retentions = 10s:1d,30s:7d,5m:30d,15m:1y
1 point toutes les 10s pendant 1 jour
1 point t...
Whisper
[carbon]
pattern = ^load.
retentions = 10s:1d,30s:30d,2m:1y
1 point toutes les 10s pendant 1 jour
1 point toutes l...
Whisper
[carbon]
pattern = ^load.
retentions = 10s:15d,30s:180d,1m:3y
1 point toutes les 10s pendant 15 jours
1 point tout...
Whisper
Aggrégations lors changement de rétention:
min
max
sum
avg
Graphite web
Apache / Django
SQLite3 / MySQL
● Options
○ LDAP
○ Memcached
○ Email
Graphite web
➔
➔
➔
➔
➔
➔

Composer des graphes
URL API: PNG, JSON, CSV
Fonctions Aggrégation pré-calculer
Blacklist / Whit...
Graphite web
Graphite web
Auto Monitoring
Fonctions
Fonctions
Transformer
Combiner
Calculer
~ 90 fonctions
Fonctions
/render/?width=800&height=600&target=dev.
monitoring.load.load.shortterm
/render/?
width=800&height=600&target=n...
Fonctions
derivative()
integral()
summarize()
sumSeries()
drawAsInifinite()
alias()
…

scale()
nonNegativeDerivative()
tim...
Fonctions
alias
color
dashed
constantLine
Fonctions
drawAsInfinite(“events.deploy.back”)
Fonctions
timeShift

http://obfuscurity.com/2012/04/Unhelpful-Graphite-Tip-10
Fonctions
● Pie
Nomenclature des métriques
${env}.${host}.${category..}.[path..].metricName
Exemple
dev.monitoring.load.load.shortterm
Scaling: Retour d’expérience
●
●
●
●
●
●
●

1 VM “graphite” + 25 VMs
~ 22 000 métrics - ~ 9 500 répertoires
~ de 500 à 200...
Collectors
Collecteurs
Collectd
(système)

JMXTrans
(application)

KS
Metrics
(business)

Graphite
Collectd
Démon qui recueille périodiquement des
statistiques de performance du système
Ecrit en C
Collectd
Plugins
Load, CPU, Interface,Swap, ...
JMXTrans
Données JMX de la JVM -> Graphite
MBean
Standalone ou Embedded
JMXTrans
Metrics

“Metrics is a Java library which gives you
unparalleled insight into what your code does in
production”
Metrics
● Gauges, Counters, Meters, Histogram,
Timers, HealthCheck
Extensions
➢ Jetty, Logback, Log4j, HttpClient, …
Third...
Statsd
“Simple daemon for easy stats aggregation”
Node.js
Envoi en UDP les données vers Graphite
Logster
“Parse log files, generate metrics for Graphite”
Python / Crontab
Facile
Logster
DIY
Python, Ruby, Node.js, Bash, ...
Oracle, RabbitMQ, JBoss, ...
Dashboard
Graphite
Dashboards War
Graphitus

“A simple, client-side, JSON-based Graphite
logical-dashboard UI built with bootstrap and
underscore.js”
Graphitus
Alerting
Nagios
Pont Nagios - Graphite via l’URL JSON
Nagios
Seyren
Seyren
● Ecrit en Java
● Pull http / Real time
● Alertes
○ Email, PagerDuty
○ HipChat, Hubot, Flowdock, IRCCat
○ PushOver ...
Skyline

“Skyline is a real-time* anomaly detection*
system*”

https://github.com/etsy/skyline
Skyline
Conclusion
Conclusion
Vision des environnements (production)
Mesurer / Visualiser / Améliorer
Partager des métriques / Dashboards
Ale...
Questions ?
Next step: Logs ?
ROTI
Intéressant, j'ai
appris des
choses

Excellent !
Encore !

Bien,
mais
sans
plus

Bof,
j'ai
baillé

J'ai
perdu
mon
tem...
Archives
Alternatives ?
Alternatives
Graphite :)
● Ceres storage
○ “Eventually Fixed Size”
○ Moins de place

● Cassandra ?
Alternatives
NewRelic
SAAS, Agent, Trace
Blueflood
Rackspace, Java, Cassandra
Sensu
Monitoring, Alerting, Ruby, Redis, Rab...
Alternatives
Ganglia
OpenTSDB
InfluxDB
Time series database, http, cluster (en
cours)
https://github.com/monitoringsucks/t...
BBL - Monitoring - kyriba
BBL - Monitoring - kyriba
Upcoming SlideShare
Loading in …5
×

BBL - Monitoring - kyriba

935 views

Published on

http://www.brownbaglunch.fr/baggers.html#Olivier_BAZOUD

Monitoring: regarder votre application à la loupe!

Regarder fonctionner votre application sous toutes les coutures.
Nous verrons comment alimenter Graphite, un excellent outil de métrologie, dans une architecture java (je peux m'adapter à vote langage): collectd, jmxtrans, metrics, statsd,.. afin de prendre des mesures au niveau du système, de l'applicatif, des batchs et du métier (KPI). Nous aborderons ensuite la corrélation tous ces métriques de façon très visuelle et comment réveiller vos sysadmins en cas d'urgence ;)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
935
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

BBL - Monitoring - kyriba

  1. 1. Monitoring BBL Kyriba Vendredi 29 Novembre
  2. 2. Sommaire Principes Monitoring Dashboard Alerting Conclusion
  3. 3. Intervenant Olivier Bazoud @obazoud Developpeur Spring-*/JEE, DevOps, Node.js Scala bientôt ;) Co-auteur de “Spring Batch in Action”
  4. 4. Et vous ?
  5. 5. Principes
  6. 6. Principes Comment se comporte mon application en production ? Comment analyser les problèmes ? Comment anticiper le “capacity planning” de la plate forme ?
  7. 7. Principes ● Business ○ nombre de virements, de connexions, workflow ● Application ○ consommation mémoire, temps de traitement ● Systèmes ○ load, swap, interface réseau
  8. 8. Principes Partager les informations ● Dev ● Ops ● PO ● Direction
  9. 9. Principes “Si ce n’est pas monitoré, ça ne va pas en production!” “Si tu ne peux pas le mesurer, tu ne peux pas l’ améliorer!” “Metric Driven Development”
  10. 10. Monitoring
  11. 11. Graphite “Graphite is an enterprise-scale monitoring tool that runs well on cheap hardware.”
  12. 12. Graphite Permet de 1. Stocker les “numeric time-series” 2. Visualiser des graphes N’est pas un collecteur de données
  13. 13. Graphite Mode Push Stockage fichiers URL API: graphes, json, csv Fonctions
  14. 14. Graphite http://graphite.readthedocs.org/en/latest/who-is-using.html
  15. 15. Graphite whisper Ecr it en p ytho n carbon (cache/relay/ aggregation) graphite-web
  16. 16. Graphite visualise metric lire dans le cache cache Carbon Graphite Web whisper whisper collecteurs écrire lire FS
  17. 17. Carbon “The plaintext protocol” echo "local.my.metric 123.45 `date +%s`" | nc localhost 2003 “The pickle protocol” [(path, (timestamp, value)), ...] AMQP TCP UDP
  18. 18. Carbon cache aggregator relay
  19. 19. Carbon cache Réceptionne les métriques Stockage en mémoire ○ Si le cache est tué, perte des métrics du cache Ecriture sur disque via whisper
  20. 20. Carbon aggregator Calcul des aggrégations de métriques ○ avg, min, max, pourcentile, ... Réduction des I/O
  21. 21. Carbon relay Réplication ➔ Basé sur des règles “Sharding” ➔ “Consistent hashing” ➔ “Scale horizontally” Carbon Relay Carbon Cache Carbon Cache Carbon Cache
  22. 22. Carbon ● MAX_CACHE_SIZE ○ Taille du cache ● MAX_CREATES_PER_MINUTE ○ Permet de réduire les I/O ● MAX_UPDATES_PER_SECOND ○ Permet de réduire les I/O
  23. 23. Whisper “Whisper is a fixed-size database (...). It provides fast, reliable storage of numeric data over time. Whisper allows for higher resolution (seconds per point) of recent data to degrade into lower resolutions for long-term retention of historical data.” http://graphite.readthedocs.org/en/latest/whisper.html
  24. 24. Whisper Création à la demande 1 métric = 1 fichier Métric “dev.ks.load.shortterm” -> ./dev/ks/load/shortterm.wsp
  25. 25. Whisper Header + Zones de retention http://www.aosabook.org/en/graphite.html
  26. 26. Whisper [carbon] pattern = ^load. retentions = 10s:1d,1m:7d,4m:30d 1 point toutes les 10s pendant 1 jour 1 point par minute pendant 7 jours 1 point tous les 4 minutes pendant 30 jours 346 Ko
  27. 27. Whisper [carbon] pattern = ^load. retentions = 10s:1d,30s:7d,5m:30d,15m:1y 1 point toutes les 10s pendant 1 jour 1 point toutes les 30s pendant 7 jours 1 point tous les 4 minutes pendant 30 jours 1 point tous les 15 minutes pendant 1 an 850 Ko
  28. 28. Whisper [carbon] pattern = ^load. retentions = 10s:1d,30s:30d,2m:1y 1 point toutes les 10s pendant 1 jour 1 point toutes les 30s pendant 30 jours 1 point tous les 2 minutes pendant 1 an 4.1 M o
  29. 29. Whisper [carbon] pattern = ^load. retentions = 10s:15d,30s:180d,1m:3y 1 point toutes les 10s pendant 15 jours 1 point toutes les 30s pendant 180 jours 1 point tous les minutes pendant 3 ans 26 M o
  30. 30. Whisper Aggrégations lors changement de rétention: min max sum avg
  31. 31. Graphite web Apache / Django SQLite3 / MySQL ● Options ○ LDAP ○ Memcached ○ Email
  32. 32. Graphite web ➔ ➔ ➔ ➔ ➔ ➔ Composer des graphes URL API: PNG, JSON, CSV Fonctions Aggrégation pré-calculer Blacklist / Whitelist / Rewrite Dashboard Graph templates
  33. 33. Graphite web
  34. 34. Graphite web
  35. 35. Auto Monitoring
  36. 36. Fonctions
  37. 37. Fonctions Transformer Combiner Calculer ~ 90 fonctions
  38. 38. Fonctions /render/?width=800&height=600&target=dev. monitoring.load.load.shortterm /render/? width=800&height=600&target=nonNegativeDe rivative(dev.monitoring.load.load.shortterm)
  39. 39. Fonctions derivative() integral() summarize() sumSeries() drawAsInifinite() alias() … scale() nonNegativeDerivative() timeShift() nPercentile() mostDevian color() ... https://graphite.readthedocs.org/en/latest/functions.html
  40. 40. Fonctions alias color dashed constantLine
  41. 41. Fonctions drawAsInfinite(“events.deploy.back”)
  42. 42. Fonctions timeShift http://obfuscurity.com/2012/04/Unhelpful-Graphite-Tip-10
  43. 43. Fonctions ● Pie
  44. 44. Nomenclature des métriques ${env}.${host}.${category..}.[path..].metricName Exemple dev.monitoring.load.load.shortterm
  45. 45. Scaling: Retour d’expérience ● ● ● ● ● ● ● 1 VM “graphite” + 25 VMs ~ 22 000 métrics - ~ 9 500 répertoires ~ de 500 à 2000 métrics/VM ~ 300 à 1.1 Go/VM ~ 13 Go global ~ 100 000 points/s ~ 10mn de cache avant écriture
  46. 46. Collectors
  47. 47. Collecteurs Collectd (système) JMXTrans (application) KS Metrics (business) Graphite
  48. 48. Collectd Démon qui recueille périodiquement des statistiques de performance du système Ecrit en C
  49. 49. Collectd Plugins Load, CPU, Interface,Swap, ...
  50. 50. JMXTrans Données JMX de la JVM -> Graphite MBean Standalone ou Embedded
  51. 51. JMXTrans
  52. 52. Metrics “Metrics is a Java library which gives you unparalleled insight into what your code does in production”
  53. 53. Metrics ● Gauges, Counters, Meters, Histogram, Timers, HealthCheck Extensions ➢ Jetty, Logback, Log4j, HttpClient, … Third Party ➢ Spring, Spring Batch ;) ➢ Akka (en cours)
  54. 54. Statsd “Simple daemon for easy stats aggregation” Node.js Envoi en UDP les données vers Graphite
  55. 55. Logster “Parse log files, generate metrics for Graphite” Python / Crontab Facile
  56. 56. Logster
  57. 57. DIY Python, Ruby, Node.js, Bash, ... Oracle, RabbitMQ, JBoss, ...
  58. 58. Dashboard
  59. 59. Graphite
  60. 60. Dashboards War
  61. 61. Graphitus “A simple, client-side, JSON-based Graphite logical-dashboard UI built with bootstrap and underscore.js”
  62. 62. Graphitus
  63. 63. Alerting
  64. 64. Nagios Pont Nagios - Graphite via l’URL JSON
  65. 65. Nagios
  66. 66. Seyren
  67. 67. Seyren ● Ecrit en Java ● Pull http / Real time ● Alertes ○ Email, PagerDuty ○ HipChat, Hubot, Flowdock, IRCCat ○ PushOver (mobile notifications)
  68. 68. Skyline “Skyline is a real-time* anomaly detection* system*” https://github.com/etsy/skyline
  69. 69. Skyline
  70. 70. Conclusion
  71. 71. Conclusion Vision des environnements (production) Mesurer / Visualiser / Améliorer Partager des métriques / Dashboards Alertes
  72. 72. Questions ?
  73. 73. Next step: Logs ?
  74. 74. ROTI Intéressant, j'ai appris des choses Excellent ! Encore ! Bien, mais sans plus Bof, j'ai baillé J'ai perdu mon temps
  75. 75. Archives
  76. 76. Alternatives ?
  77. 77. Alternatives Graphite :) ● Ceres storage ○ “Eventually Fixed Size” ○ Moins de place ● Cassandra ?
  78. 78. Alternatives NewRelic SAAS, Agent, Trace Blueflood Rackspace, Java, Cassandra Sensu Monitoring, Alerting, Ruby, Redis, RabbitMQ https://github.com/monitoringsucks/tool-repos
  79. 79. Alternatives Ganglia OpenTSDB InfluxDB Time series database, http, cluster (en cours) https://github.com/monitoringsucks/tool-repos

×