|
1 |
| -# Assign ‘TransactionId’ to each log statement |
| 1 | +# Attribuez un ‘TransactionId’ à chaque relevé du journal |
2 | 2 |
|
3 | 3 | <br/><br/>
|
4 | 4 |
|
5 |
| -### One Paragraph Explainer |
| 5 | +### Un paragraphe d'explication |
6 | 6 |
|
7 |
| -A typical log is a warehouse of entries from all components and requests. Upon detection of some suspicious line or error, it becomes hairy to match other lines that belong to the same specific flow (e.g. the user “John” tried to buy something). This becomes even more critical and challenging in a microservice environment when a request/transaction might span across multiple computers. Address this by assigning a unique transaction identifier value to all the entries from the same request so when detecting one line one can copy the id and search for every line that has similar transaction id. However, achieving this In Node is not straightforward as a single thread is used to serve all requests –consider using a library that that can group data on the request level – see code example on the next slide. When calling other microservices, pass the transaction id using an HTTP header like “x-transaction-id” to keep the same context. |
| 7 | +Un journal typique est un registre des entrées de tous les composants et requêtes. Lorsqu'une ligne ou une erreur suspecte est détectée, il devient difficile de faire correspondre d'autres lignes appartenant au même flux spécifique (par exemple, l'utilisateur "John" a essayé d'acheter quelque chose). Cela devient encore plus critique et difficile dans un environnement de micro-services lorsqu'une requête/transaction peut concerner plusieurs ordinateurs. Il convient de remédier à ce problème en attribuant une valeur d'identification de transaction unique à toutes les entrées d'une même requête, de sorte qu'en détectant une ligne, on puisse copier l'identifiant et rechercher toutes les lignes qui ont un identifiant de transaction similaire. Toutefois, la réalisation de cette opération dans Node n'est pas simple, car un seul processus est utilisé pour toutes les requêtes - envisagez d'utiliser une bibliothèque qui peut regrouper les données au niveau de la requête - voir l'exemple de code suivant. Lorsque vous appelez d'autres micro-services, transmettez l'identifiant de la transaction en utilisant une entête HTTP comme "x-transaction-id" pour conserver le même contexte. |
8 | 8 |
|
9 | 9 | <br/><br/>
|
10 | 10 |
|
11 |
| -### Code example: typical Express configuration |
| 11 | +### Exemple de code : configuration typique d'Express |
12 | 12 |
|
13 | 13 | ```javascript
|
14 |
| -// when receiving a new request, start a new isolated context and set a transaction id. The following example is using the npm library continuation-local-storage to isolate requests |
| 14 | +// à la réception d'une nouvelle requête, commencez un nouveau contexte isolé et définissez un identifiant de transaction. L'exemple suivant utilise la bibliothèque npm continuation-local-storage pour isoler les requêtes |
15 | 15 |
|
16 | 16 | const { createNamespace } = require('continuation-local-storage');
|
17 | 17 | const session = createNamespace('my session');
|
18 | 18 |
|
19 | 19 | router.get('/:id', (req, res, next) => {
|
20 |
| - session.set('transactionId', 'some unique GUID'); |
| 20 | + session.set('transactionId', 'un GUID unique'); |
21 | 21 | someService.getById(req.params.id);
|
22 |
| - logger.info('Starting now to get something by id'); |
| 22 | + logger.info('Début de l\'identification'); |
23 | 23 | });
|
24 | 24 |
|
25 |
| -// Now any other service or components can have access to the contextual, per-request, data |
| 25 | +// Désormais, tout autre service ou composant peut avoir accès aux données contextuelles par requête |
26 | 26 | class someService {
|
27 | 27 | getById(id) {
|
28 |
| - logger.info('Starting to get something by id'); |
29 |
| - // other logic comes here |
| 28 | + logger.info('Début de l\'identification'); |
| 29 | + // une autre logique vient ici |
30 | 30 | }
|
31 | 31 | }
|
32 | 32 |
|
33 |
| -// The logger can now append the transaction id to each entry so that entries from the same request will have the same value |
| 33 | +// Le journal peut désormais ajouter l'identifiant de la transaction à chaque entrée, de sorte que les entrées d'une même requête aient la même valeur |
34 | 34 | class logger {
|
35 | 35 | info (message) {
|
36 | 36 | console.log(`${message} ${session.get('transactionId')}`);
|
|
0 commit comments