Le feedback rapide offert par le monitoring est un element essentiel des bonnes pratiques de Continuous Delivery. Java dispose dans son ecosysteme d'un composant robuste dedie a cela : JMX.
Cependant, la difficulte de raccordement de JMX a des outils de supervision et de graphe a longtemps ete un frein a son adoption.
Jetez aux orties les solutions bancales a base de logs applicatifs ou d'interface web mal protegees, et venez decouvrir une voie ouverte. Une nouvelle generation d'outils Open Source permet de grapher simplement les metriques de vos applications et de les fournir a un systeme de supervision et d'alerte.
Dans une logique DevOps, nous verrons ensemble comment integrer la dimension Monitoring dans un projet : de la conception des metriques par les developpeurs, a l'integration des besoins des equipes Ops et Q&A, en deploiement traditionnel ou dans le Cloud. JmxTrans, Graphite et Nagios, ce tryptique peut vous faciliter la vie, venez decouvrir comment.
L'application demo : http://demo-cocktail.jmxtrans.cloudbees.net
Le code source de l'application demo : https://github.com/jmxtrans/embedded-jmxtrans-samples/tree/master/embedded-jmxtrans-webapp-coktail
Embedded JmxTrans : https://github.com/jmxtrans/embedded-jmxtrans
Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013
1. Monitoring Open Source pour Java avec
JmxTrans, Graphite et Nagios
27 au 29 mars 2013
Wednesday, March 27, 13
2. Speaker
@cyrilleleclerc CTO
Architect
Cyrille Le Clerc
Fort Traffic
Cloud, DevOps
Open Source
Wednesday, March 27, 13
3. Speaker
@hgomez Architecte CI
Henri Gomez
Intégration Continue
DevOps
Open Source
Wednesday, March 27, 13
4. Vous ?
Dev ? Qa ? Ops ?
Expérience monitoring ?
Wednesday, March 27, 13
5. Agenda
27 au 29 mars 2013
Wednesday, March 27, 13
6. Agenda
• L’application
• Le monitoring à réaliser
• Instrumenter une webapp Java avec JMX
• Monitorer
• Grapher avec Graphite
• Alerter avec Seyren (et Nagios)
• Monitoring & Continuous Delivery
• Déploiement de Graphite
• Conclusion
Wednesday, March 27, 13
7. Votre mission, si toutefois vous
l’acceptez ...
e-commerce SOS Cocktails
http://www.flickr.com/photos/23791504@N08/2607814349
Mettre en place le monitoring technique et métier
Wednesday, March 27, 13
14. Pourquoi JMX ?
• JMX vs. pages web vs. logs vs. ...
• Simple et sécurisé
• Exposable vers pages web et les logs
• Des alternatives à JMX
Wednesday, March 27, 13
15. JMX vs. logs vs. pages web vs. ...
• Logs de monitoring
• Parser des Go de fichiers texte ?
• Détail par invocation vs. moyenne par minute
• Pages web
• Historisation ?
• Applications en clusters ?
• Sécurité ?
Wednesday, March 27, 13
16. JMX avec Spring
<beans
...>
...
<context:mbean-‐export/>
...
</beans>
@ManagedResource("cocktail:name=ShoppingCartController,type=...")
class
ShoppingCartController
{
final
AtomicInteger
revenueInCentsCounter
=
new
AtomicInteger();
@ManagedAttribute
public
int
getRevenueInCentsCounter()
{
return
revenueInCentsCounter.get();
}
void
purchase(...){
...
revenueInCentsCounter.addAndGet(priceInCents);
}
Wednesday, March 27, 13
22. Alternatives à JMX
Servo ) teger()
;
er
{ COUNTER ew
AtomicIn
ontroll ts",
type= ter
=
n
oppin gCartC ueInCen ntsCoun
n
cl ass
Sh name="reve revenueInCe
@Mo nitor( icInteger
m
fin al
Ato
) { C ents);
ase(... priceIn
void
purch AndGet(
ter.add
... ntsCoun
nueInCe
reve
}
Wednesday, March 27, 13
23. Alternatives à JMX
Metrics
class
Shopp
ingCartCont
roller
{
final
Coun
Servo
ter
revenue
InCentsCoun
) ter
=t eger()
;
ntrolle r
{
Shpe=COUNTER ew
AtomicIn
Metrics.new
oppingCartC
y Counter(
artCo
nCents",
t Counter
=
nontroller,
"revenue-‐
Sho ppingC ev
void
purcInCents
enueI ue hase(.. in-‐cents");
class
r(name="r
...en r rev
.){
o e
@Monit tomicInteg
re
inal
A venueInCent
f
} { sCounter.in ts);
...) c(
InCen priceInCents);
( e
urchase e t(pric
void
p a ddAndG
o unter.
... nueInCentsC
reve
}
Wednesday, March 27, 13
24. JMX
•OS: Sysload
•JVM: Garbage Collector
•Tomcat: activeSessions
•Application: Web Site Revenue
Wednesday, March 27, 13
34. jmxtrans
•OS: Sysload
•JVM: Garbage Collector
•Tomcat: activeSessions
•Application: Web Site Revenue
Wednesday, March 27, 13
35. Graphite
27 au 29 mars 2013
Wednesday, March 27, 13
36. Graphite
• BD de Time Series et solution de Graphe
• Utilisé par des grands du Web
• Similaires
Simplicité et Self Service
Wednesday, March 27, 13
37. Ecriture / Alimentation
• Création automatique des métriques
• Protocoles socket “plain text” & sérialisation Python Pickle
echo
"devoxx.happyCounter
1.2
1364338989"
|
nc
localhost
2003
• Précision et durée de stockage par configuration
[sales_1min_for_15days_5min_for_1year]
pattern
=
^sales.
1.7MB
retentions
=
60s:30d,300s:365d
Wednesday, March 27, 13
38. Lecture / Consommation
• Composer de graphe & URL API
• Tout le monde peut créer ses graphes
• Fonctions Riches
• sum, scale, derivative, timeshift, deviation, filter, ...
• Exports variés : png, svg, csv, json, raw text
Wednesday, March 27, 13
40. Demo Graphite sur le Cloud
• http://hostedgraphite.com/ 1 email: admin@jmxtrans.org
password: devoxx2013
• Graphite as a Service 2
• Pas de ‘tracas’ d’installation
• addons: Tasseo
• No-OPS
3
Wednesday, March 27, 13
41. Les métriques
Gauge Ever Increasing Counter
• Exemples: activeRequests, dataSource.activeConnection, ... • Exemples: requestsCount, revenue, ...
• Information exploitable immédiatement • Conversion nécessaire en “par minute”
Wednesday, March 27, 13
42. Des graphes et des formules
?
Ever Increasing Counter Revenue per Second
Wednesday, March 27, 13
43. Des graphes et des formules
derivative()
?
Ever Increasing Counter Revenue per Second
Wednesday, March 27, 13
44. Des graphes et des formules
?
Per Second -> Per Hour Revenue per Hour
Wednesday, March 27, 13
45. Des graphes et des formules
summarize()
?
Per Second -> Per Hour Revenue per Hour
Wednesday, March 27, 13
46. Des graphes et des formules
?
2 servers Total Revenue per Hour
Wednesday, March 27, 13
47. Des graphes et des formules
sumSeries()
?
2 servers Total Revenue per Hour
Wednesday, March 27, 13
48. Des graphes et des formules
?
Ignore reset to zero
server restart
Wednesday, March 27, 13
49. Des graphes et des formules
nonNegativeDerivative()
?
Ignore reset to zero
server restart
Wednesday, March 27, 13
50. Des graphes et des formules
Compare to ?
last week
Wednesday, March 27, 13
51. Des graphes et des formules
Compare to timeShift()
?
last week
Wednesday, March 27, 13
52. Des graphes et des formules
•OS: Sysload
•JVM: Garbage Collector
•Tomcat: activeSessions
•Application: Web Site Revenue
Wednesday, March 27, 13
53. Dashoards Wiki
dashboard.prod.md
#
Sales
<table>
<tr>
<td>
<img
src="http://graphite.prod.mycompany/graphite/render/?
width=400&height=300&title=Revenue&xFormat=%25a%20%25d
%25p&vtitle=USD&lineWidth=3&from=-‐5days&target=alias(scale(summarize(sumS
eries(nonNegativeDerivative(edu.servers.*.sales.revenueInCentsCounter))
%2C%221h%22)%2C0.01)%2C%22Revenue%20per%20Hour%22)...">
</td>
<td>
<img
src="http://graphite.prod.mycompany/graphite/render/?...">
</td>
<tr>
</table>
Wiki
https://github.com/jmxtrans/embedded-jmxtrans-samples/wiki/Dashboard-PROD
Wednesday, March 27, 13
54. Dashoards by Email
Envoyer les graphes par email
Wednesday, March 27, 13
55. L’alerting
Intégrer Graphite à de l’alerting
URL Api
Seyren
Nagios
27 au 29 mars 2013
Wednesday, March 27, 13
56. Intégrer Graphite à l’alerting
• Utiliser l’URL API
• Format rawText ou JSON
• Pattern /render?from=-‐11minutes&until=-‐1minutes&format=raw&target=****
Exemple
$
curl
"http://graphite.exemple.com/render?from=-‐11minutes&until=-‐1minutes&format=raw&
target=keepLastValue(servers.cloudbees.jvm.os.SystemLoadAverage)"
my-‐metric,1363225680,1363226340,60|0.03,0.01,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
Wednesday, March 27, 13
57. Alerting - Seyren
• Alerting Dashboard for Graphite
• Open Source
• Java .war + MongoDB
• Alertes email, PagerDuty, ...
Wednesday, March 27, 13
58. Alerting - Seyren
http://seyren.jmxtrans.cloudbees.net/
•OS: Sysload
•JVM: Garbage Collector
•Tomcat: activeSessions
•Application: Web Site Revenue
Wednesday, March 27, 13
59. Nagios
• Infrastructure Monitoring
• Open Source
• Standard de facto en entreprise
• check_graphite plugin
• Pierre-Yves Ritschard
• Jason Dixon / obfuscurity
Wednesday, March 27, 13
61. Monitoring & Continuous Delivery
• Livrer le monitoring avec l’application
• Les indicateurs
• Les dashboards
• Builder en continue les configs par environnement
• Require: topologie des environnements intégrées au build
• Déploiement sur un repo (Maven, ...)
• Déployer en automatique le monitoring
Wednesday, March 27, 13
66. Cadeau bonus !
27 au 29 mars 2013
Wednesday, March 27, 13
67. Promo Code
• http://hostedgraphite.com/
• 60 days trial with “DEVOXX” promo code
(2) Enter Promo Code “DEVOXX”
(1) Signup
help: cleclerc@cloudbees.com (3) Promo Code “DEVOXX”
Wednesday, March 27, 13
68. Conclusion
27 au 29 mars 2013
Wednesday, March 27, 13
69. Conclusion
• Monitoring technique et métier
• Monitoring intégrée au Continuous Delivery de l’appli
• L’approche self-service transforme le monitoring
• Solutions Open Source disponibles
Monitoring no longer sucks in Java!
http://lusislog.blogspot.fr/2011/06/why-monitoring-sucks.html
Wednesday, March 27, 13