Traçabilité dans unearchitecture distribuéeavec Node.js et MongoDB[@jcreignou] Jérôme Creignou[@sebprunier] Sébastien Prun...
ArchitectureApplication Application ApplicationESB ESB ESBESBServiceSGBDRServiceRulesService ServiceCompositeServiceCompos...
InfrastructureLoad BalancerCluster 1Service AService AService ACluster 2Service AService AService A
Architecture &InfrastructureApp SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
Notre mission
Objectif 1
Traçabilité !App SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
Objectif 2
Détection danomaliesApp SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
Objectif 3
Mesure des performances !App SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
Vous avez 15 jours !KISS(Keep It Short and Simple)(Keep It Simple Stupid)(... *)* http://fr.wikipedia.org/wiki/Principe_KISS
Conseil (Xebia Essentials)
FBI (Fausse Bonne Idée)org.apache.log4j.jdbc.JDBCAppenderSGBDR
FBI (Fausse Bonne Idée)● CREATE TABLE ALL_LOGS (DATA BLOB)INEXPLOITABLE !● « On va abstraire la notion de log, créer unsch...
Notre solutionJohn Napier, en France Neper,théologien, physicien, astronome etmathématicien écossais.Log ~ Logarithme-> Jo...
NepROutil permettant de consolider unensemble de traces (logs) techniqueset applicatives et de les restituer selonplusieur...
Bonne pratique 1● Logguer dans des fichiers○ org.apache.log4j.FileAppenderLogFileLes données tracées sont brutes, non tran...
Bonne pratique 1● Que logue-t-on ?○ Horodatage○ Id unique de requête (RequestID)○ User○ Service et opération exécutée○ Mac...
Bonne pratique 1● RequestID○ ID unique généré pour chaque action utilisateur○ Transporté de couche en couche○ Permet de re...
Bonne pratique 2● Loguer au plus proche de l’environnement d’exécutionLa perte dinformation est limitéeLogFileLogFileLogFile
Bonne pratique 3● Consolider de manière asynchroneLes performances ne sont pas impactéesLogFileLogFileServeur deconsolidat...
Bonne pratique 4● Stocker de l’information structuréeLexploitation des informations est facilitéeLogFileServeur deconsolid...
Bonne pratique 5● Ne pas oublier de purger !Le cycle de vie des données est maîtrisé
Solution techniqueLogFileLogFileLogFileLogFilenepragentnepragentnepragentnepragentLogFileneprconsoleneprserverneprdbdocume...
Choix technologiques● Nepr agent & server : NodeJS○ Processus légers○ Simplicité de mise en œuvre○ Données structurées JSO...
nepr-server● REST API○ POST■ /data/:env/:couche/:machine○ GET■ /perfs/:env/:service/:operation■ /errors/:env/:service/:ope...
nepr-server● Map / Reducevar mapFn = function () {emit({service: this.service,operation: this.operation,couche: this.couch...
nepr-agent● Extraction de logs significatives via desregexps● Envoi de données structurées au serveur{type:perf,date:todat...
nepr-agent● Configurations centralisées sur le serveur● Mise à jour via "svn update"GET /conf/:env/LogFilenepragentneprser...
nepr-console● Démonstration !
Bilan de la version 1● Le POC est réussi !● La version 1 répond à un réel besoin○ mise en oeuvre lors des premiers déploie...
Nouvel objectifMise en production ! ** (vous avez 30 jours)
Roadmap version 2● Recentrage sur les besoins primordiaux desutilisateurs finaux de NepR● MongoDB -> Couchbase● Industrial...
nepr-server API v2● POST○ /data● GET○ /data/:type/:requestId■ :type = "error" ou "trace"○ /data/:type/:start/:end/:env/:la...
Pourquoi Couchbase ?● Vues (Map / Reduce)● Installation dun cluster● Console dadministration
Pourquoi Couchbase ?● Performances
Installation des agents● Installation via un navigateur○ http://nepr-server/agent/install-agent.vbs● install-agent.vbs○ no...
Configuration des agents● Les configurations sont stockées dansCouchbase○ GET /agent/config.js{"type": "agentConf","ip": "...
Monitoring des agents● Une collection qui stocke le timestamp de ladernière demande de configuration dechaque agent● Une p...
nepr-console● Adaptation des vues pour répondre aubesoin des utilisateurs○ Recherches■ par requestId■ par service / opérat...
Alternatives● Logstash● Logio● Graylog2● Loggly● ...
● Merci pour votre attention !● Des questions ?The end
Prochain SlideShare
Chargement dans…5
×

Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec NodeJS et MongoDB

1 073 vues

Publié le

Les architectures distribuées soulèvent un certains nombre de problématiques en terme de traçabilité : détection des anomalies, suivi des utilisateurs, mesure des performances des différents services … Durant cette session, nous vous montrerons - démonstration à l'appui - comment nous avons apporté une solution simple à ces problématiques, en mettant en place un système de consolidation de logs avec Node.js et MongoDb.

Poitou Charentes JUG - mai 2013 - http://www.poitoucharentesjug.org

0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 073
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
21
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec NodeJS et MongoDB

  1. 1. Traçabilité dans unearchitecture distribuéeavec Node.js et MongoDB[@jcreignou] Jérôme Creignou[@sebprunier] Sébastien Prunier
  2. 2. ArchitectureApplication Application ApplicationESB ESB ESBESBServiceSGBDRServiceRulesService ServiceCompositeServiceCompositeServiceLegacyMainframe
  3. 3. InfrastructureLoad BalancerCluster 1Service AService AService ACluster 2Service AService AService A
  4. 4. Architecture &InfrastructureApp SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
  5. 5. Notre mission
  6. 6. Objectif 1
  7. 7. Traçabilité !App SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
  8. 8. Objectif 2
  9. 9. Détection danomaliesApp SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
  10. 10. Objectif 3
  11. 11. Mesure des performances !App SGBDRL. B. L. B.AAAABBBBC1.1C1.2C2.1C2.2
  12. 12. Vous avez 15 jours !KISS(Keep It Short and Simple)(Keep It Simple Stupid)(... *)* http://fr.wikipedia.org/wiki/Principe_KISS
  13. 13. Conseil (Xebia Essentials)
  14. 14. FBI (Fausse Bonne Idée)org.apache.log4j.jdbc.JDBCAppenderSGBDR
  15. 15. FBI (Fausse Bonne Idée)● CREATE TABLE ALL_LOGS (DATA BLOB)INEXPLOITABLE !● « On va abstraire la notion de log, créer unschéma pivot, des convertisseurs et … »PAS EVOLUTIF !
  16. 16. Notre solutionJohn Napier, en France Neper,théologien, physicien, astronome etmathématicien écossais.Log ~ Logarithme-> John Neper ~ NepR
  17. 17. NepROutil permettant de consolider unensemble de traces (logs) techniqueset applicatives et de les restituer selonplusieurs axes d’analyse.
  18. 18. Bonne pratique 1● Logguer dans des fichiers○ org.apache.log4j.FileAppenderLogFileLes données tracées sont brutes, non transformées
  19. 19. Bonne pratique 1● Que logue-t-on ?○ Horodatage○ Id unique de requête (RequestID)○ User○ Service et opération exécutée○ Machine, nœud du cluster○ Couche applicative○ Environnement (dev, re7, prod …)○ Temps d’exécution○ En cas d’erreur■ Code d’erreur■ Message■ Stacktrace
  20. 20. Bonne pratique 1● RequestID○ ID unique généré pour chaque action utilisateur○ Transporté de couche en couche○ Permet de reconstruire l’enchaînement des services-Xrequestid=123456789<soap:Header><traces><requestid>123456789</requestid></traces></soap:Header>HTTPSOAP
  21. 21. Bonne pratique 2● Loguer au plus proche de l’environnement d’exécutionLa perte dinformation est limitéeLogFileLogFileLogFile
  22. 22. Bonne pratique 3● Consolider de manière asynchroneLes performances ne sont pas impactéesLogFileLogFileServeur deconsolidation
  23. 23. Bonne pratique 4● Stocker de l’information structuréeLexploitation des informations est facilitéeLogFileServeur deconsolidation{ts : "2013-03-18…" ,user : "johndoe",service : "xxxxx",op : "abcdef",elapsed : "154"}
  24. 24. Bonne pratique 5● Ne pas oublier de purger !Le cycle de vie des données est maîtrisé
  25. 25. Solution techniqueLogFileLogFileLogFileLogFilenepragentnepragentnepragentnepragentLogFileneprconsoleneprserverneprdbdocument tracedocument perfdocument anomalie
  26. 26. Choix technologiques● Nepr agent & server : NodeJS○ Processus légers○ Simplicité de mise en œuvre○ Données structurées JSON● Nepr db : MongoDB○ Stockage de données hétérogènes (schema less)○ Gros volumes de données en écriture○ L’ « eventual consistency » n’est pas un problème○ Stockage JSON
  27. 27. nepr-server● REST API○ POST■ /data/:env/:couche/:machine○ GET■ /perfs/:env/:service/:operation■ /errors/:env/:service/:operation■ /traces/:env/:requestid■ /stats/:env/:service/:operation
  28. 28. nepr-server● Map / Reducevar mapFn = function () {emit({service: this.service,operation: this.operation,couche: this.couche}, {count: 1,elapsed: this.elapsed});};var reduceFn = function (key, values) {var result = {count: 0,elapsed: 0};values.forEach(function (val) {result.count += val.count;result.elapsed += val.elapsed;});return result;};
  29. 29. nepr-agent● Extraction de logs significatives via desregexps● Envoi de données structurées au serveur{type:perf,date:todate(m[1]),userid:m[2],sessionid:m[3],requestid:m[4],service:m[5],operation:m[6],elapsed:parseInt(m[7], 10)}^ INFO|([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3})|([^|]*)|([^|]*)|([^|]*)|([^|]*)|([^|]*) TIME-USED;(d*);0;0
  30. 30. nepr-agent● Configurations centralisées sur le serveur● Mise à jour via "svn update"GET /conf/:env/LogFilenepragentneprserverLogFileLogFileLogFileLogFile???
  31. 31. nepr-console● Démonstration !
  32. 32. Bilan de la version 1● Le POC est réussi !● La version 1 répond à un réel besoin○ mise en oeuvre lors des premiers déploiement deservices○ utilisée pour lanalyse derreur lors de testsdintégration de services■ "une erreur est remontée à lutilisateur, quel service est fautif ?"○ utilisée lors des campagnes de performances■ "un problème de performance est détecté lors dun acte degestion, quel(s) service(s) est(sont) fautif(s) ?"
  33. 33. Nouvel objectifMise en production ! ** (vous avez 30 jours)
  34. 34. Roadmap version 2● Recentrage sur les besoins primordiaux desutilisateurs finaux de NepR● MongoDB -> Couchbase● Industrialisation de linstallation des agents● Monitoring des agents● KnockoutJS -> AngularJSWork In Progess ...
  35. 35. nepr-server API v2● POST○ /data● GET○ /data/:type/:requestId■ :type = "error" ou "trace"○ /data/:type/:start/:end/:env/:layer?/:op?■ :start & :end = intervalle de temps■ :env = "DEV", "RE7", "PROD" ...■ :layer = "esb", "composite", "rule" ...■ :op = service / opération
  36. 36. Pourquoi Couchbase ?● Vues (Map / Reduce)● Installation dun cluster● Console dadministration
  37. 37. Pourquoi Couchbase ?● Performances
  38. 38. Installation des agents● Installation via un navigateur○ http://nepr-server/agent/install-agent.vbs● install-agent.vbs○ nodejs.msi○ node-agent.js (en tant que service windows)○ démarre le node-agent● node-agent.js○ ZIP du code de nepr-agent○ configuration du nepr-agent○ toutes les 60 sec, réinstalle et redémarre si besoin
  39. 39. Configuration des agents● Les configurations sont stockées dansCouchbase○ GET /agent/config.js{"type": "agentConf","ip": "10.231.240.59","date": "2013-05-21T15:35:55.002Z","confs": [{"environment": "DEV","component": "esb"},{"environment": "RE7","component": "composite"}]}
  40. 40. Monitoring des agents● Une collection qui stocke le timestamp de ladernière demande de configuration dechaque agent● Une page de restitution des status pour lesadministrateurs de NepR
  41. 41. nepr-console● Adaptation des vues pour répondre aubesoin des utilisateurs○ Recherches■ par requestId■ par service / opération○ Filtres■ dates, environnement, couche○ Affichage des erreurs■ "twitter like"● Utilisation de AngularJS
  42. 42. Alternatives● Logstash● Logio● Graylog2● Loggly● ...
  43. 43. ● Merci pour votre attention !● Des questions ?The end

×