Jérôme Creignou - @jcreignouSébastien Prunier - @sebprunier
Application Application                                                           Application                        ESB  ...
Load                                      Balancer            Cluster 1                                        Cluster 2  ...
Application                           load bal.      cluster                                 clusterESB               ESB ...
Application                           load bal.      cluster                                 clusterESB               ESB ...
Application                         load bal.      cluster                               clusterESB             ESB       ...
Application                           load bal.      cluster                                 clusterESB               ESB ...
SGBDRorg.apache.log4j.jdbc.JDBCAppender
   CREATE TABLE ALL_LOGS (DATA BLOB)   « On va abstraire la notion de log, créer un    schéma pivot, des convertisseurs ...
* Log  Logarithme  John Neper  NepR
Outil permettant de consolider un ensemble de traces (logs) techniqueset applicatives et de les restituer selon       plus...
1   Loguer dans des fichiers                        Log                        File            org.apache.log4j.FileAppen...
1   Que logue-t-on ?    ◦   Horodatage    ◦   Id unique de requête (RequestID)    ◦   User    ◦   Service et opération ex...
1   RequestID    ◦ ID unique généré pour chaque action utilisateur    ◦ Transporté de couche en couche    ◦ Permet de rec...
2   Loguer au plus proche de l’environnement    d’exécution                                          Log                 ...
3   Consolider de manière asynchrone            Log            File                   Log                   File       L...
4   Stocker de l’information structurée                                  {                                      ts : "201...
5   Ne pas oublier de purger !     Les données brutes & les données consolidées
nepr Log      nepr                          console File    agent  Log     neprFile  File   agent                  nepr   ...
   Nepr agent & server : NodeJS    ◦ Processus légers    ◦ Simplicité de mise en œuvre    ◦ Données structurées JSON   N...
   REST API    ◦ POST      /data/:env/:couche/:machine    ◦ GET        /perfs/:env/:service/:operation        /errors/...
   Map Reduce var mapFn = function () {    emit({        service: this.service,        operation: this.operation,        ...
    Extraction de logs significatifs via des regexp^ INFO|([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}...
   Configurations centralisées sur le serveur             nepr            agent   GET /conf/:env/                        ...
   Démonstration !
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB
Prochain SlideShare
Chargement dans…5
×

Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB

1 574 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.

Nantes JUG - mars 2013 - http://www.nantesjug.org

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB

  1. 1. Jérôme Creignou - @jcreignouSébastien Prunier - @sebprunier
  2. 2. Application Application Application ESB ESB ESB ESB Controler Rules ControlerService [R] Service [R] Service [W] Legacy Service [W] Mainframe SGBDR
  3. 3. Load Balancer Cluster 1 Cluster 2 Service A Service AService A Service A Service A Service A
  4. 4. Application load bal. cluster clusterESB ESB ESB ESB load bal. cluster clusterServ. Serv. Serv. Serv. SGBDR
  5. 5. Application load bal. cluster clusterESB ESB ESB ESB load bal. cluster clusterServ. Serv. Serv. Serv. SGBDR
  6. 6. Application load bal. cluster clusterESB ESB ESB ESB load bal. cluster cluster Serv. Serv. Serv. SGBDR
  7. 7. Application load bal. cluster clusterESB ESB ESB ESB load bal. cluster clusterServ. Serv. Serv. Serv. SGBDR
  8. 8. SGBDRorg.apache.log4j.jdbc.JDBCAppender
  9. 9.  CREATE TABLE ALL_LOGS (DATA BLOB) « On va abstraire la notion de log, créer un schéma pivot, des convertisseurs et … »
  10. 10. * Log  Logarithme  John Neper  NepR
  11. 11. Outil permettant de consolider un ensemble de traces (logs) techniqueset applicatives et de les restituer selon plusieurs axes d’analyse.
  12. 12. 1 Loguer dans des fichiers Log File org.apache.log4j.FileAppender  Données brutes
  13. 13. 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
  14. 14. 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>
  15. 15. 2 Loguer au plus proche de l’environnement d’exécution Log File Log File Log File  La perte d’informations est limitée
  16. 16. 3 Consolider de manière asynchrone Log File Log File  Les performances ne sont pas impactées
  17. 17. 4 Stocker de l’information structurée { ts : "2013-03-18…" , Log user : "johndoe", File service : "xxxxx", op : "abcdef", elapsed : "154" }  L’exploitation des informations est facilitée
  18. 18. 5 Ne pas oublier de purger !  Les données brutes & les données consolidées
  19. 19. nepr Log nepr console File agent Log neprFile File agent nepr server Log nepr File agent Log nepr nepr File agent db Objet « trace » Objet « perf » Objet « anomalie »
  20. 20.  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
  21. 21.  REST API ◦ POST  /data/:env/:couche/:machine ◦ GET  /perfs/:env/:service/:operation  /errors/:env/:service/:operation  /traces/:env/:requestid  /stats/:env/:service/:operation
  22. 22.  Map Reduce var 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; };
  23. 23.  Extraction de logs significatifs via des regexp^ 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;  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]) }
  24. 24.  Configurations centralisées sur le serveur nepr agent GET /conf/:env/ nepr server Mise à jour via « svn update » / « git pull »
  25. 25.  Démonstration !

×