SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
Traçabilité dans une
architecture distribuée
avec Node.js et MongoDB
[@jcreignou] Jérôme Creignou
[@sebprunier] Sébastien Prunier
Architecture
Application Application Application
ESB ESB ESBESB
Service
SGBDR
Service
Rules
Service Service
Composite
Service
Composite
Service
Legacy
Mainframe
Infrastructure
Load Balancer
Cluster 1
Service A
Service A
Service A
Cluster 2
Service A
Service A
Service A
Architecture &
Infrastructure
App SGBDRL. B. L. B.
A
A
A
A
B
B
B
B
C
1.1
C
1.2
C
2.1
C
2.2
Notre mission
Objectif 1
Traçabilité !
App SGBDRL. B. L. B.
A
A
A
A
B
B
B
B
C
1.1
C
1.2
C
2.1
C
2.2
Objectif 2
Détection d'anomalies
App SGBDRL. B. L. B.
A
A
A
A
B
B
B
B
C
1.1
C
1.2
C
2.1
C
2.2
Objectif 3
Mesure des performances !
App SGBDRL. B. L. B.
A
A
A
A
B
B
B
B
C
1.1
C
1.2
C
2.1
C
2.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.JDBCAppender
SGBDR
FBI (Fausse Bonne Idée)
● CREATE TABLE ALL_LOGS (DATA BLOB)
INEXPLOITABLE !
● « On va abstraire la notion de log, créer un
schéma pivot, des convertisseurs et … »
PAS EVOLUTIF !
Notre solution
John Napier, en France Neper,
théologien, physicien, astronome et
mathématicien écossais.
Log ~ Logarithme
-> John Neper ~ NepR
NepR
Outil permettant de consolider un
ensemble de traces (logs) techniques
et applicatives et de les restituer selon
plusieurs axes d’analyse.
Bonne pratique 1
● Logguer dans des fichiers
○ org.apache.log4j.FileAppender
Log
File
Les données tracées sont brutes, non transformées
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
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>
HTTP
SOAP
Bonne pratique 2
● Loguer au plus proche de l’environnement d’
exécution
La perte d'information est limitée
Log
File
Log
File
Log
File
Bonne pratique 3
● Consolider de manière asynchrone
Les performances ne sont pas impactées
Log
File
Log
File
Serveur de
consolidation
Bonne pratique 4
● Stocker de l’information structurée
L'exploitation des informations est facilitée
Log
File
Serveur de
consolidation
{
ts : "2013-03-18…" ,
user : "johndoe",
service : "xxxxx",
op : "abcdef",
elapsed : "154"
}
Bonne pratique 5
● Ne pas oublier de purger !
Le cycle de vie des données est maîtrisé
Solution technique
Log
File
Log
File
Log
File
Log
File
nepr
agent
nepr
agent
nepr
agent
nepr
agent
Log
File
nepr
console
nepr
server
nepr
db
document trace
document perf
document anomalie
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
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
nepr-server
● 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;
};
nepr-agent
● Extraction de logs significatives via des
regexps
● 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
nepr-agent
● Configurations centralisées sur le serveur
● Mise à jour via "svn update"
GET /conf/:env/
Log
File
nepr
agent
nepr
server
Log
FileLog
FileLog
FileLog
File
?
??
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éploiement de
services
○ utilisée pour l'analyse d'erreur lors de tests
d'intégration de services
■ "une erreur est remontée à l'utilisateur, quel service est fautif ?"
○ utilisée lors des campagnes de performances
■ "un problème de performance est détecté lors d'un acte de
gestion, quel(s) service(s) est(sont) fautif(s) ?"
Nouvel objectif
Mise en production ! *
* (vous avez 30 jours)
Roadmap version 2
● Recentrage sur les besoins primordiaux des
utilisateurs finaux de NepR
● MongoDB -> Couchbase
● Industrialisation de l'installation des agents
● Monitoring des agents
● KnockoutJS -> AngularJS
Work In Progess ...
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
Pourquoi Couchbase ?
● Vues (Map / Reduce)
● Installation d'un cluster
● Console d'administration
Pourquoi Couchbase ?
● Performances
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
Configuration des agents
● Les configurations sont stockées dans
Couchbase
○ 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"
}
]
}
Monitoring des agents
● Une collection qui stocke le timestamp de la
dernière demande de configuration de
chaque agent
● Une page de restitution des status pour les
administrateurs de NepR
nepr-console
● Adaptation des vues pour répondre au
besoin des utilisateurs
○ Recherches
■ par requestId
■ par service / opération
○ Filtres
■ dates, environnement, couche
○ Affichage des erreurs
■ "twitter like"
● Utilisation de AngularJS
Alternatives
● Logstash
● Logio
● Graylog2
● Loggly
● ...
● Merci pour votre attention !
● Des questions ?
The end

Contenu connexe

Tendances

Bases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISBases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISOmar El Kharki
 
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston PostOpenStack Korea Community
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Cctp migration servers
Cctp migration serversCctp migration servers
Cctp migration serversQuentinVERY
 
Cassandra pour les développeurs java
Cassandra pour les développeurs javaCassandra pour les développeurs java
Cassandra pour les développeurs javaJérémy Sevellec
 
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Loic Ortola
 
Modern DevOps - kill the bottleneck (part 1/2)
Modern DevOps - kill the bottleneck (part 1/2)Modern DevOps - kill the bottleneck (part 1/2)
Modern DevOps - kill the bottleneck (part 1/2)Loic Ortola
 
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production MongoDB
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Saïd Bouras
 
Big Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostBig Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostAlexander DEJANOVSKI
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
Presentation Base Mission
Presentation Base MissionPresentation Base Mission
Presentation Base Missiongloute
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
Consolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic BeatsConsolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic Beatsgcatt
 
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...Sébastien Prunier
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherAnthony Sigogne
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?Membré Guillaume
 
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...Sébastien Prunier
 

Tendances (20)

Bases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISBases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGIS
 
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post
[2017년 5월 정기세미나] Network with OpenStack - OpenStack Summit Boston Post
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Cctp migration servers
Cctp migration serversCctp migration servers
Cctp migration servers
 
Cassandra pour les développeurs java
Cassandra pour les développeurs javaCassandra pour les développeurs java
Cassandra pour les développeurs java
 
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)
 
Modern DevOps - kill the bottleneck (part 1/2)
Modern DevOps - kill the bottleneck (part 1/2)Modern DevOps - kill the bottleneck (part 1/2)
Modern DevOps - kill the bottleneck (part 1/2)
 
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017
 
Big Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostBig Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez Chronopost
 
Charles proxy
Charles proxyCharles proxy
Charles proxy
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Presentation Base Mission
Presentation Base MissionPresentation Base Mission
Presentation Base Mission
 
gRPC
gRPCgRPC
gRPC
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Consolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic BeatsConsolidez vos journaux et vos métriques avec Elastic Beats
Consolidez vos journaux et vos métriques avec Elastic Beats
 
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec Rancher
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
 

En vedette

Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...Jean-Michel Franco
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache ZookeeperMichaël Morello
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Alexis Seigneurin
 
I Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaI Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaJay Kreps
 
Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1Knoldus Inc.
 
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017Michael Noll
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Introduction to Apache ZooKeeper
Introduction to Apache ZooKeeperIntroduction to Apache ZooKeeper
Introduction to Apache ZooKeeperSaurav Haloi
 
Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1Mickaël Le Baillif
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignMichael Noll
 
4 d is a corporate foundation for you karen cooper fr
4 d is a corporate foundation for you karen cooper fr4 d is a corporate foundation for you karen cooper fr
4 d is a corporate foundation for you karen cooper frVolunteer Canada
 
Recortes for maiatza
Recortes for maiatzaRecortes for maiatza
Recortes for maiatzaIrune Jimenez
 

En vedette (20)

Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
Spark : 5 moyens simples et rapides pour exploiter vos Big Data avec Spark et...
 
Ben Broeckx
Ben BroeckxBen Broeckx
Ben Broeckx
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache Zookeeper
 
Apache Kafka at LinkedIn
Apache Kafka at LinkedInApache Kafka at LinkedIn
Apache Kafka at LinkedIn
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
 
I Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache KafkaI Heart Log: Real-time Data and Apache Kafka
I Heart Log: Real-time Data and Apache Kafka
 
Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1Introduction to Apache Kafka- Part 1
Introduction to Apache Kafka- Part 1
 
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
Introducing Apache Kafka's Streams API - Kafka meetup Munich, Jan 25 2017
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
 
Introduction to Apache ZooKeeper
Introduction to Apache ZooKeeperIntroduction to Apache ZooKeeper
Introduction to Apache ZooKeeper
 
Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1Hi-Media Couchbase meetup Paris Nb #1
Hi-Media Couchbase meetup Paris Nb #1
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - Verisign
 
Internet
InternetInternet
Internet
 
Vih sida
Vih sidaVih sida
Vih sida
 
4 d is a corporate foundation for you karen cooper fr
4 d is a corporate foundation for you karen cooper fr4 d is a corporate foundation for you karen cooper fr
4 d is a corporate foundation for you karen cooper fr
 
Laplatja
LaplatjaLaplatja
Laplatja
 
Abril2013
Abril2013Abril2013
Abril2013
 
El atletismo
El atletismoEl atletismo
El atletismo
 
Recortes for maiatza
Recortes for maiatzaRecortes for maiatza
Recortes for maiatza
 

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

Saas Libre
Saas LibreSaas Libre
Saas Libregrolland
 
Panel de solutions javascript
Panel de solutions javascriptPanel de solutions javascript
Panel de solutions javascriptjp_mouton
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...MSDEVMTL
 
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...Publicis Sapient Engineering
 
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...sebastienmoreno
 
BBL - Monitoring - kyriba
BBL - Monitoring - kyribaBBL - Monitoring - kyriba
BBL - Monitoring - kyribaOlivier BAZOUD
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Jean Gabès
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfboulonvert
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationStéphane Traumat
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Jean-Baptiste Claramonte
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreStéphane Traumat
 
Plateformes et infrastructure infonuagique natif de ville de Montréall
Plateformes et infrastructure infonuagique natif de ville de MontréallPlateformes et infrastructure infonuagique natif de ville de Montréall
Plateformes et infrastructure infonuagique natif de ville de MontréallCloudOps2005
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Stephan Lagraulet
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 

Similaire à Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec NodeJS et MongoDB (20)

Saas Libre
Saas LibreSaas Libre
Saas Libre
 
Panel de solutions javascript
Panel de solutions javascriptPanel de solutions javascript
Panel de solutions javascript
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
XebiCon'17 : Migration d’une application web vers un Paas Openshift - Akram B...
 
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
 
BBL - Monitoring - kyriba
BBL - Monitoring - kyribaBBL - Monitoring - kyriba
BBL - Monitoring - kyriba
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libre
 
Plateformes et infrastructure infonuagique natif de ville de Montréall
Plateformes et infrastructure infonuagique natif de ville de MontréallPlateformes et infrastructure infonuagique natif de ville de Montréall
Plateformes et infrastructure infonuagique natif de ville de Montréall
 
Meetup PM2 @delicious-insights
Meetup PM2 @delicious-insightsMeetup PM2 @delicious-insights
Meetup PM2 @delicious-insights
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
Perf university
Perf universityPerf university
Perf university
 

Plus de Sébastien Prunier

De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...Sébastien Prunier
 
De votre idée géniale à votre Minimum Viable Product - Rencontres National...
De votre idée géniale à votre Minimum Viable Product - Rencontres National...De votre idée géniale à votre Minimum Viable Product - Rencontres National...
De votre idée géniale à votre Minimum Viable Product - Rencontres National...Sébastien Prunier
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?Sébastien Prunier
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 
MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !Sébastien Prunier
 
Nantes JUG - Les News - 2013-10-10
Nantes JUG - Les News - 2013-10-10Nantes JUG - Les News - 2013-10-10
Nantes JUG - Les News - 2013-10-10Sébastien Prunier
 
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDBJugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDBSébastien Prunier
 
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...Sébastien Prunier
 

Plus de Sébastien Prunier (9)

De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
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...
De votre idée géniale à votre Minimum Viable Product - Rencontres National...De votre idée géniale à votre Minimum Viable Product - Rencontres National...
De votre idée géniale à votre Minimum Viable Product - Rencontres National...
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 
MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !
 
Nantes JUG - Les News - 2013-10-10
Nantes JUG - Les News - 2013-10-10Nantes JUG - Les News - 2013-10-10
Nantes JUG - Les News - 2013-10-10
 
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDBJugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
 
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
 

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

  • 1. Traçabilité dans une architecture distribuée avec Node.js et MongoDB [@jcreignou] Jérôme Creignou [@sebprunier] Sébastien Prunier
  • 2. Architecture Application Application Application ESB ESB ESBESB Service SGBDR Service Rules Service Service Composite Service Composite Service Legacy Mainframe
  • 3. Infrastructure Load Balancer Cluster 1 Service A Service A Service A Cluster 2 Service A Service A Service A
  • 4. Architecture & Infrastructure App SGBDRL. B. L. B. A A A A B B B B C 1.1 C 1.2 C 2.1 C 2.2
  • 7. Traçabilité ! App SGBDRL. B. L. B. A A A A B B B B C 1.1 C 1.2 C 2.1 C 2.2
  • 9. Détection d'anomalies App SGBDRL. B. L. B. A A A A B B B B C 1.1 C 1.2 C 2.1 C 2.2
  • 11. Mesure des performances ! App SGBDRL. B. L. B. A A A A B B B B C 1.1 C 1.2 C 2.1 C 2.2
  • 12. Vous avez 15 jours ! KISS(Keep It Short and Simple) (Keep It Simple Stupid) (... *) * http://fr.wikipedia.org/wiki/Principe_KISS
  • 14. FBI (Fausse Bonne Idée) org.apache.log4j.jdbc.JDBCAppender SGBDR
  • 15. FBI (Fausse Bonne Idée) ● CREATE TABLE ALL_LOGS (DATA BLOB) INEXPLOITABLE ! ● « On va abstraire la notion de log, créer un schéma pivot, des convertisseurs et … » PAS EVOLUTIF !
  • 16. Notre solution John Napier, en France Neper, théologien, physicien, astronome et mathématicien écossais. Log ~ Logarithme -> John Neper ~ NepR
  • 17. NepR Outil permettant de consolider un ensemble de traces (logs) techniques et applicatives et de les restituer selon plusieurs axes d’analyse.
  • 18. Bonne pratique 1 ● Logguer dans des fichiers ○ org.apache.log4j.FileAppender Log File Les données tracées sont brutes, non transformées
  • 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. 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> HTTP SOAP
  • 21. Bonne pratique 2 ● Loguer au plus proche de l’environnement d’ exécution La perte d'information est limitée Log File Log File Log File
  • 22. Bonne pratique 3 ● Consolider de manière asynchrone Les performances ne sont pas impactées Log File Log File Serveur de consolidation
  • 23. Bonne pratique 4 ● Stocker de l’information structurée L'exploitation des informations est facilitée Log File Serveur de consolidation { ts : "2013-03-18…" , user : "johndoe", service : "xxxxx", op : "abcdef", elapsed : "154" }
  • 24. Bonne pratique 5 ● Ne pas oublier de purger ! Le cycle de vie des données est maîtrisé
  • 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. 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. nepr-server ● 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; };
  • 29. nepr-agent ● Extraction de logs significatives via des regexps ● 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. nepr-agent ● Configurations centralisées sur le serveur ● Mise à jour via "svn update" GET /conf/:env/ Log File nepr agent nepr server Log FileLog FileLog FileLog File ? ??
  • 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 de services ○ utilisée pour l'analyse d'erreur lors de tests d'intégration de services ■ "une erreur est remontée à l'utilisateur, quel service est fautif ?" ○ utilisée lors des campagnes de performances ■ "un problème de performance est détecté lors d'un acte de gestion, quel(s) service(s) est(sont) fautif(s) ?"
  • 33. Nouvel objectif Mise en production ! * * (vous avez 30 jours)
  • 34. Roadmap version 2 ● Recentrage sur les besoins primordiaux des utilisateurs finaux de NepR ● MongoDB -> Couchbase ● Industrialisation de l'installation des agents ● Monitoring des agents ● KnockoutJS -> AngularJS Work In Progess ...
  • 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. Pourquoi Couchbase ? ● Vues (Map / Reduce) ● Installation d'un cluster ● Console d'administration
  • 37. Pourquoi Couchbase ? ● Performances
  • 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. Configuration des agents ● Les configurations sont stockées dans Couchbase ○ 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. Monitoring des agents ● Une collection qui stocke le timestamp de la dernière demande de configuration de chaque agent ● Une page de restitution des status pour les administrateurs de NepR
  • 41. nepr-console ● Adaptation des vues pour répondre au besoin des utilisateurs ○ Recherches ■ par requestId ■ par service / opération ○ Filtres ■ dates, environnement, couche ○ Affichage des erreurs ■ "twitter like" ● Utilisation de AngularJS
  • 42. Alternatives ● Logstash ● Logio ● Graylog2 ● Loggly ● ...
  • 43. ● Merci pour votre attention ! ● Des questions ? The end