Skip to content

Commit 7deff5b

Browse files
committed
feat : translated advanced/Tracing section to French
1 parent 9cd112f commit 7deff5b

2 files changed

Lines changed: 84 additions & 0 deletions

File tree

Sources/VaporDocs/Languages.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ let languages: [Language] = [
267267
"Services": "Services",
268268
"Sessions": "Sessions",
269269
"Testing": "Tests",
270+
"Tracing": "Traçage",
270271
"Transactions": "Transactions",
271272
"Upgrading": "Mettre à jour",
272273
"Validation": "La validation de données",

docs/4.0/advanced/tracing.fr.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Traçage
2+
3+
Le traçage est un outil puissant de surveillance et débogage pour systèmes distribués. L'API Tracing de Vapor permet aux développeurs de suivre facilement le cycle de vie d'une requête, de propager des méta-données, et de s'intégrer à des plateformes populaires comme OpenTelemetry.
4+
5+
L'API Tracing de Vapor est basée sur [swift-distributed-tracing](https://github.com/apple/swift-distributed-tracing), ce qui la rend compatible avec toutes les [implémentations backend](https://github.com/apple/swift-distributed-tracing/blob/main/README.md#tracing-backends) de swift-distributed-tracing.
6+
7+
Si vous n'êtes pas familiarisé avec le traçage et la notion de portée en Swift, lisez la [documentation sur les Traces OpenTelemetry](https://opentelemetry.io/docs/concepts/signals/traces/) et la [documentation de swift-distributed-tracing](https://swiftpackageindex.com/apple/swift-distributed-tracing/main/documentation/tracing).
8+
9+
## TracingMiddleware
10+
11+
Pour créer automatiquement un span entièrement renseigné pour chaque requête, ajoutez le `TracingMiddleware` à votre application.
12+
13+
```swift
14+
app.middleware.use(TracingMiddleware())
15+
```
16+
17+
Pour obtenir des mesures de span précises et s'assurer que les identifiants de traces sont bien transmis aux autres services, ajoutez ce middleware avant tout autre middlewares.
18+
19+
## Ajout de Spans
20+
21+
Lorsque vous ajoutez des spans dans vos routes, il faut idéalement les associer avec le span racine de la requête. Cela s'appelle la "propagation de span" et peut être fait de deux manières différentes : automatiquement ou manuellement.
22+
23+
### Propagation automatique
24+
25+
Vapor permet la propagation automatique de spans entre middleware et routes. Pour l'activer, définissez la valeur de la propriété `Application.traceAutoPropagation` à true dans votre configuration.
26+
27+
```swift
28+
app.traceAutoPropagation = true
29+
```
30+
31+
!!! Note
32+
Activer l'auto-propagation peut causer une dégradation de performances sur des APIs fortement sollicitées dont les besoins de traçage sont minimes, car les méta-données du span de la requête doivent être restaurées pour chaque route, que des spans y soient créés ou non.
33+
34+
Des spans peuvent ensuite être créés dans la route en utilisant la syntaxe classique de traçage distribué.
35+
36+
```swift
37+
app.get("fetchAndProcess") { req in
38+
let result = try await fetch()
39+
return try await withSpan("getNameParameter") { _ in
40+
try await process(result)
41+
}
42+
}
43+
```
44+
45+
### Propagation manuelle
46+
47+
Pour éviter les implications de performance de la propagation automatique, vous pouvez restaurer manuellement les méta-données de span là ou ce sera nécessaire. Le `TracingMiddleware` définit automatiquement une propriété `Request.serviceContext` que l'on peut directement utiliser dans le paramètre `context` de `withSpan`.
48+
49+
```swift
50+
app.get("fetchAndProcess") { req in
51+
let result = try await fetch()
52+
return try await withSpan("getNameParameter", context: req.serviceContext) { _ in
53+
try await process(result)
54+
}
55+
}
56+
```
57+
58+
Pour restaurer les méta-données de span sans créer un nouveau span, utilisez `ServiceContext.withValue`. Cela vous servira si vous savez que des librairies asynchrones en aval émettent leurs propres spans de traçage, qui devraient être encapsulés dans le span de la requête parente.
59+
60+
```swift
61+
app.get("fetchAndProcess") { req in
62+
try await ServiceContext.withValue(req.serviceContext) {
63+
try await fetch()
64+
return try await process(result)
65+
}
66+
}
67+
```
68+
69+
## Considérations relatives à NIO
70+
71+
Étant donné que `swift-distributed-tracing` utilise des propriétés de type [`TaskLocal`](https://developer.apple.com/documentation/swift/tasklocal) pour la propagation, vous devez manuellement restaurer à nouveau le contexte dès que vous franchissez les frontières d'un `EventLoopFuture NIO` pour vous assurer que les spans sont correctement liés. **Cette étape est nécessaire même si la propagation automatique est activée**.
72+
73+
```swift
74+
app.get("fetchAndProcessNIO") { req in
75+
withSpan("fetch", context: req.serviceContext) { span in
76+
fetchSomething().map { result in
77+
withSpan("process", context: span.context) { _ in
78+
process(result)
79+
}
80+
}
81+
}
82+
}
83+
```

0 commit comments

Comments
 (0)