SlideShare une entreprise Scribd logo
Jérôme Creignou - @jcreignou
Sébastien Prunier - @sebprunier
Application
 Application                                                           Application




                        ESB                        ESB
                                                                               ESB

 ESB

                                                                        Controler
                     Rules                   Controler




Service [R]    Service [R]           Service [W]                                     Legacy
                                                         Service [W]




                                                                       Mainframe
                                SGBDR
Load
                                      Balancer




            Cluster 1                                        Cluster 2




                          Service A                                         Service A
Service A                                        Service A




              Service A                                         Service A
Application



                           load bal.



      cluster                                 cluster




ESB               ESB                   ESB               ESB




                           load bal.




        cluster                                 cluster




Serv.             Serv.                 Serv.             Serv.




                            SGBDR
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
Application



                           load bal.



      cluster                                 cluster




ESB               ESB                   ESB               ESB




                           load bal.




        cluster                                 cluster




Serv.             Serv.                 Serv.             Serv.




                            SGBDR
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
Application



                         load bal.



      cluster                               cluster




ESB             ESB                   ESB               ESB




                         load bal.




      cluster                                 cluster




                Serv.                 Serv.             Serv.




                          SGBDR
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
Application



                           load bal.



      cluster                                 cluster




ESB               ESB                   ESB               ESB




                           load bal.




        cluster                                 cluster




Serv.             Serv.                 Serv.             Serv.




                            SGBDR
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
SGBDR


org.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 et … »
* Log  Logarithme  John Neper  NepR
Outil permettant de consolider un
 ensemble de traces (logs) techniques
et applicatives et de les restituer selon
       plusieurs axes d’analyse.
1


   Loguer dans des fichiers


                        Log
                        File


            org.apache.log4j.FileAppender


                  Données brutes
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
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>
2


   Loguer au plus proche de l’environnement
    d’exécution
                                          Log
                                          File
                 Log
                 File



                                   Log
                                   File




          La perte d’informations est limitée
3


   Consolider de manière asynchrone

            Log
            File




                   Log
                   File




       Les performances ne sont pas impactées
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
5


   Ne pas oublier de purger !




     Les données brutes & les données consolidées
nepr
 Log      nepr
                          console
 File    agent




  Log     nepr
File
  File   agent
                  nepr
                 server
 Log      nepr
 File    agent


 Log
                  nepr
          nepr
 File    agent     db

                              Objet « trace »

                              Objet « perf »

                              Objet « anomalie »
   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
   REST API
    ◦ POST
      /data/:env/:couche/:machine
    ◦ GET
        /perfs/:env/:service/:operation
        /errors/:env/:service/:operation
        /traces/:env/:requestid
        /stats/:env/:service/:operation
   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;
                                   };
    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])
                           }
   Configurations centralisées sur le serveur


             nepr
            agent   GET /conf/:env/


                                       nepr
                                      server



   Mise à jour via « svn update » / « git pull »
   Démonstration !

Contenu connexe

PDF
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
PDF
EBIZNEXT-RIAK
PDF
Riak introduction
PDF
kubernetes, pourquoi et comment
PDF
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
PDF
Kubernetes University, Cap sur l’orchestration Docker
PPTX
Realtime Web avec Kafka, Spark et Mesos
PDF
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
EBIZNEXT-RIAK
Riak introduction
kubernetes, pourquoi et comment
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
Kubernetes University, Cap sur l’orchestration Docker
Realtime Web avec Kafka, Spark et Mesos
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !

Tendances (20)

PDF
Bases de données Spatiales - POSTGIS
PDF
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post
PPTX
Cassandra pour les développeurs java
PPT
PostgreSQL sous linux
PDF
Cctp migration servers
PPTX
Retour AFUP du forumphp 2017
PPT
Big Data Paris 2015 - Cassandra chez Chronopost
PDF
Modern DevOps - kill the bottleneck (part 2/2)
PDF
Modern DevOps - kill the bottleneck (part 1/2)
PDF
Meetup kafka 21 Novembre 2017
PPT
Presentation Base Mission
PPTX
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
PPTX
Charles proxy
ODP
Rex docker en production meeutp-docker-nantes
PDF
Mariadb pour les developpeurs - OSDC
PDF
Consolidez vos journaux et vos métriques avec Elastic Beats
PDF
Les Nouveautés de zabbix 2.2 par Alain Ganuchaud
PPTX
PDF
Cassandra Ippevent 20 Juin 2013
PDF
Déploiement et gestion d'un site web avec Rancher
Bases de données Spatiales - POSTGIS
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post
Cassandra pour les développeurs java
PostgreSQL sous linux
Cctp migration servers
Retour AFUP du forumphp 2017
Big Data Paris 2015 - Cassandra chez Chronopost
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 1/2)
Meetup kafka 21 Novembre 2017
Presentation Base Mission
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Charles proxy
Rex docker en production meeutp-docker-nantes
Mariadb pour les developpeurs - OSDC
Consolidez vos journaux et vos métriques avec Elastic Beats
Les Nouveautés de zabbix 2.2 par Alain Ganuchaud
Cassandra Ippevent 20 Juin 2013
Déploiement et gestion d'un site web avec Rancher
Publicité

En vedette (20)

PDF
Oxalide Workshop #3 - Elasticearch, an overview
PPT
Chapitre1 elk chez_psa
PDF
Plateforme centralisée d’analyse des logs des frontaux http en temps réel dan...
PPTX
Séminaire Log Management
PPT
Chapitre2 prise en_main_kibana
PPT
Chapitre3 elk concepts_avances
PDF
[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...
PPTX
PDF
Découverte de Elastic search
PDF
Présentation de ElasticSearch / Digital apéro du 12/11/2014
PDF
Artimag N11 Février 2011
PDF
Artimag N12 Mars 2011
PDF
GUIA DE TARDOR
PDF
Le rôle du product manager en Social Gaming - Exemple du jeu Goobox de Kobojo
PPTX
Newsletter 1
PPT
Andres
PPT
Grenoble Ville augmentée
PPTX
Guadeloupe
Oxalide Workshop #3 - Elasticearch, an overview
Chapitre1 elk chez_psa
Plateforme centralisée d’analyse des logs des frontaux http en temps réel dan...
Séminaire Log Management
Chapitre2 prise en_main_kibana
Chapitre3 elk concepts_avances
[Sildes] plateforme centralisée d’analyse des logs des frontaux http en temps...
Découverte de Elastic search
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Artimag N11 Février 2011
Artimag N12 Mars 2011
GUIA DE TARDOR
Le rôle du product manager en Social Gaming - Exemple du jeu Goobox de Kobojo
Newsletter 1
Andres
Grenoble Ville augmentée
Guadeloupe
Publicité

Similaire à Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et MongoDB (20)

PPTX
Optimisation du stockage share point 2010
PDF
Orchestrating Docker in production - TIAD Camp Docker
PDF
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
KEY
Paris RailsCamp 2009
ODP
Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...
PPT
Session GWT Devoxx France 2012 Cobra
PPTX
JBoss clustering et tuning (lab 3/3)
PPTX
Administration glassfish 3
DOCX
Mysql
PPTX
Formation Google App Engine
PDF
Azure Roadshow
PDF
JENKINS_OWF11_OSDC_PARIS20110924
KEY
Comment reprendre un (gros) projet Ruby on Rails
PDF
ArchiTech Load Balancing (NLB), Fermes et Jardins
PDF
Appalications JEE avec Servlet/JSP
PPTX
Global Azure Bootcamp 2019 Strasbourg - Cosmos DB
PPTX
Sql Server et SharePoint le couple de l'année 2012
KEY
Chef - Paris BlockCamp - Nov 09
PDF
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
PDF
BBL - Monitoring - kyriba
Optimisation du stockage share point 2010
Orchestrating Docker in production - TIAD Camp Docker
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
Paris RailsCamp 2009
Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...
Session GWT Devoxx France 2012 Cobra
JBoss clustering et tuning (lab 3/3)
Administration glassfish 3
Mysql
Formation Google App Engine
Azure Roadshow
JENKINS_OWF11_OSDC_PARIS20110924
Comment reprendre un (gros) projet Ruby on Rails
ArchiTech Load Balancing (NLB), Fermes et Jardins
Appalications JEE avec Servlet/JSP
Global Azure Bootcamp 2019 Strasbourg - Cosmos DB
Sql Server et SharePoint le couple de l'année 2012
Chef - Paris BlockCamp - Nov 09
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
BBL - Monitoring - kyriba

Plus de Sébastien Prunier (11)

PDF
De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
PDF
De votre idée géniale à votre Minimum Viable Product - Rencontres National...
PDF
MongoDB et Elasticsearch, meilleurs ennemis ?
PDF
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
PDF
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
PDF
MongoDB Aggregation Framework in action !
PDF
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
PDF
Nantes JUG - Les News - 2013-10-10
PDF
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
PPTX
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
PPTX
Nantes Jug - Java 7
De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
De votre idée géniale à votre Minimum Viable Product - Rencontres National...
MongoDB et Elasticsearch, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
MongoDB Aggregation Framework in action !
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
Nantes JUG - Les News - 2013-10-10
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
Nantes Jug - Java 7

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

  • 1. Jérôme Creignou - @jcreignou Sébastien Prunier - @sebprunier
  • 2. Application Application Application ESB ESB ESB ESB Controler Rules Controler Service [R] Service [R] Service [W] Legacy Service [W] Mainframe SGBDR
  • 3. Load Balancer Cluster 1 Cluster 2 Service A Service A Service A Service A Service A Service A
  • 4. Application load bal. cluster cluster ESB ESB ESB ESB load bal. cluster cluster Serv. Serv. Serv. Serv. SGBDR
  • 10. Application load bal. cluster cluster ESB ESB ESB ESB load bal. cluster cluster Serv. Serv. Serv. Serv. SGBDR
  • 13. Application load bal. cluster cluster ESB ESB ESB ESB load bal. cluster cluster Serv. Serv. Serv. SGBDR
  • 16. Application load bal. cluster cluster ESB ESB ESB ESB load bal. cluster cluster Serv. Serv. Serv. Serv. SGBDR
  • 20. CREATE TABLE ALL_LOGS (DATA BLOB)  « On va abstraire la notion de log, créer un schéma pivot, des convertisseurs et … »
  • 21. * Log  Logarithme  John Neper  NepR
  • 22. Outil permettant de consolider un ensemble de traces (logs) techniques et applicatives et de les restituer selon plusieurs axes d’analyse.
  • 23. 1  Loguer dans des fichiers Log File org.apache.log4j.FileAppender  Données brutes
  • 24. 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
  • 25. 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>
  • 26. 2  Loguer au plus proche de l’environnement d’exécution Log File Log File Log File  La perte d’informations est limitée
  • 27. 3  Consolider de manière asynchrone Log File Log File  Les performances ne sont pas impactées
  • 28. 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
  • 29. 5  Ne pas oublier de purger !  Les données brutes & les données consolidées
  • 30. nepr Log nepr console File agent Log nepr File File agent nepr server Log nepr File agent Log nepr nepr File agent db Objet « trace » Objet « perf » Objet « anomalie »
  • 31. 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
  • 32. REST API ◦ POST  /data/:env/:couche/:machine ◦ GET  /perfs/:env/:service/:operation  /errors/:env/:service/:operation  /traces/:env/:requestid  /stats/:env/:service/:operation
  • 33. 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; };
  • 34. 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]) }
  • 35. Configurations centralisées sur le serveur nepr agent GET /conf/:env/ nepr server  Mise à jour via « svn update » / « git pull »
  • 36. Démonstration !