74
@ZouheirCadi #DevopsMyCode Devops my Code

Devops mycode devoxx-france-2015-v2

  • Upload
    waizou

  • View
    84

  • Download
    0

Embed Size (px)

Citation preview

@ZouheirCadi #DevopsMyCode

Devops  my  Code  

@ZouheirCadi #DevopsMyCode

DEVOPS  MY  CODE  

@Zouheircadi Dev.Archi Java, NoSQL, Prod Co-organisateur DevoxxFr (Ancien …) Paris JUG

@ZouheirCadi #DevopsMyCode

Agenda  • Objectif • Métriques pour les services métiers

•  Metriques : Générations et mesures

•  Démo : Logstash Statsd, Graphite

• Design 4 failure • Qui suis-je ? • Conclusion

@ZouheirCadi #DevopsMyCode

Objec:f  •  Sensibilisation des devs (java ?) à produire du code auditable/

exploitable •  Initiation à la stratégie et aux outils de monitoring

@ZouheirCadi #DevopsMyCode

Diagramme  de  déploiement  

@ZouheirCadi #DevopsMyCode

Diagramme  de  composant  

@ZouheirCadi #DevopsMyCode

Diagramme  de  déploiement  SCM C. I. REPO.

@ZouheirCadi #DevopsMyCode

Produc:on  

@ZouheirCadi #DevopsMyCode

Produc:on  

@ZouheirCadi #DevopsMyCode

Produc:on  

@ZouheirCadi #DevopsMyCode

Produc:on  

@ZouheirCadi #DevopsMyCode

Produc:on  SCM C. I.

DEV. Q. A. PRODUCTION

REPO.

@ZouheirCadi #DevopsMyCode

Produc:on  

@ZouheirCadi #DevopsMyCode

Produc:on  

@ZouheirCadi #DevopsMyCode

METRIQUES  

@ZouheirCadi #DevopsMyCode

METRIQUES  Layer Example Metric

Application layer

API Calls Type, rate

Service layer Apache, Storage, Caches, …

Apache : request rate, response time, busu workers RDMMS : Busy/sleeping connections, query rates

Physical layer CPU, memory, disk, network

CPU : user, system, %wait Disk : space utilization, I/O rates, %wait Network : bytes in/out

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

spring.xml

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

PetstoreAspect.java

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

PetstoreAspect.java

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

PetstoreAspect.java

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

PetstoreAspect.java

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

logback.xml

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

logback.xml

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

2014-10-11 12:39:23 INFO service.catalog.impl.CatalogServiceImpl.findCategory YES 253

Timestamp Données

@ZouheirCadi #DevopsMyCode

Genera:on  de  metriques  

www.logstash.net/docs/1.4.2/learn

@ZouheirCadi #DevopsMyCode

Logstash  

@ZouheirCadi #DevopsMyCode

Logstash  input { file { type => "audit-log" path => "/${TOMCAT_HOME}/log/business.layer.log" } } filter { if [type] == "audit-log" { grok { match => [ "message" , "%{TIMESTAMP_ISO8601:timestamp} %{DATA:THREAD} %{WORD:LEVEL} %{DATA:method} %{WORD:returnCode} %{NUMBER:responseTime}" ] } } } output { statsd { host => "localhost" port => 8125 timing => [ "%{method}.time_ms", "%{responseTime}" ] } }

@ZouheirCadi #DevopsMyCode

Statsd  • Deamon NodeJS •  Fonctionne sous le protocole réseau UDP •  Ecoute des statistiques et les agrègent avant envoi vers

Graphite •  Fournit un support pour différents types de métriques

•  Counter •  Timer •  Gauges •  Set

@ZouheirCadi #DevopsMyCode

Statsd  • Counting / Sampling : send increments from your application

com.ServiceImpl.authenticate:1|c

com.ServiceImpl.createUser:1|c|@0.1

@ZouheirCadi #DevopsMyCode

Statsd  • Timing : •  time •  Statistique la plus intéressante pour récolter les métriques

d’un service métier

com.ServiceImpl.findCategory:230 | ms

@ZouheirCadi #DevopsMyCode

Cen:le  •  Effectif d’une distribution divisée en 100 parts égales •  Distribution coupée en tranches de 1% •  Médiane C50

•  50% des valeurs lui sont inférieures •  50% des valeurs lui sont supérieures

•  90Percentile •  90% des valeurs lui sont inférieures •  10% des valeurs lui sont supérieures

@ZouheirCadi #DevopsMyCode

StatsD  • Gauges

•  Sets

• Multi-Metric Packets

@ZouheirCadi #DevopsMyCode

Graphite  

collecting-metrics-with-graphite-and-statsd

@ZouheirCadi #DevopsMyCode

Graphite  -­‐  architecture  • Graphite web

•  Front end. •  Visualisation des métriques sous forme de graphique. •  « Powerfull plotting API »

• Carbon •  Ensemble de 3 process en charge de la réception,

l’agrégation et la persistance des données sur disque • Whisper

•  Base de données de séries chronologiques

@ZouheirCadi #DevopsMyCode

All  in  one  

LOGS LOGSTASH STATSD GRAPHITE

@YourTwitterHandle @YourTwitterHandle @ZouheirCadi #DevopsMyCode

Demo

@ZouheirCadi #DevopsMyCode

Métriques  -­‐  process  • Mesurer (ligne de log)

• Monitorer

• Alerter

• Decider

• Agir

@ZouheirCadi #DevopsMyCode

Monitoring  -­‐  Aler:ng  • Monitoring

•  Graphite, •  Ganglia (monitoring des systèmes distribués) •  Outils payants : newRelic, AppDynamics

• Alerting •  Nagios •  Outils payants : newRelic, AppDynamics

@ZouheirCadi #DevopsMyCode

Supervision  batch/audit  

@ZouheirCadi #DevopsMyCode

Supervision  audit  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Résilience  

@ZouheirCadi #DevopsMyCode

Quelle(s)  métrique(s)  • Metrique de contrôle du fonctionnement courant

•  1 appel = 1 metrique •  Interception des appels de la couche métier •  AccessLogs

•  Tomcat => Valve

@ZouheirCadi #DevopsMyCode

Quelle(s)  métrique(s)  • Métrique de dysfonctionnement

•  $$$$$ •  Dégrade le fonctionnement

@ZouheirCadi #DevopsMyCode

@ZouheirCadi #DevopsMyCode

Qui  suis-­‐je  

@ZouheirCadi #DevopsMyCode

Qui  suis-­‐je  ?  

@ZouheirCadi #DevopsMyCode

Qui  suis-­‐je  ?  •  Plugin maven : properties-maven-plugin • Génération d’un fichier • Contenant les deux properties

•  project.version •  maven.build.timestamp

•  Properties lues grâce à un service

@ZouheirCadi #DevopsMyCode

Qui  suis-­‐je  ?  

@ZouheirCadi #DevopsMyCode

Qui  suis-­‐je  ?  

@ZouheirCadi #DevopsMyCode

Health-­‐check  • Resource fournissant des informations sur l’application

•  Serveur d’application •  Service accédé via le serveur d’application

• Utilisé par des humains (dev, integrateurs, sysadmin, …)

• Used by automates for monitoring

@ZouheirCadi #DevopsMyCode

Health-­‐check  

@ZouheirCadi #DevopsMyCode

Que  fais-­‐je  ?  

@ZouheirCadi #DevopsMyCode

Ou  suis-­‐je  :  Dans  quelle  organisa:on  ?  

@YourTwitterHandle @YourTwitterHandle @ZouheirCadi #DevopsMyCode

CONCLUSION

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

Conclusion  

@ZouheirCadi #DevopsMyCode

URLographie  •  http://pivotallabs.com/139-metrics-metrics-everywhere/ •  https://wooster.checkmy.ws/fr/doc/graphite/ •  https://wooster.checkmy.ws/2013/12/time-series-databases/

•  https://github.com/hopsoft/docker-graphite-statsd •  http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html •  http://java.dzone.com/articles/java-performance-troubleshooti-0

•  http://rubynaut.net/2012/08/30/application-monitoring/ •  http://www.logstash.net/docs/1.4.2/learn

•  http://fr.slideshare.net/itnig/collecting-metrics-with-graphite-and-statsd •  http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/

index.html

@ZouheirCadi #DevopsMyCode

Bibliographie  •  Web operations, keeping the data on time, John Allspaw and Jesse Robbins,

2010, O’Reilly Ed. •  Continuous delivery, Jez Humble and David Farley, 2010, Addison Wesley

Ed.

@ZouheirCadi #DevopsMyCode

Con:nuous  delivery  

@YourTwitterHandle @YourTwitterHandle @ZouheirCadi #DevopsMyCode

Q & A