Request Tracing
Every request needs: a span, RED metrics, and trace context propagation.
Required Attributes
| Attribute | Example | Note |
|-----------|---------|------|
| http.method | GET, POST | Required |
| http.route | /api/orders/:id | Template, not actual path! |
| http.status_code | 200, 500 | Required |
| user.tier | premium | Recommended (not user_id!) |
RED Metrics
Rate: http.requests.count{method, route, status}
Errors: http.requests.errors{method, route, error_type}
Duration: http.request.duration{method, route} (histogram p50/p95/p99)
Middleware Flow
Request → Extract trace context (W3C traceparent)
→ Start span (method + route)
→ Start timer
→ Call handler
→ Set status_code
→ Record duration histogram
→ If 4xx/5xx: increment error counter
→ End span
→ Inject trace context into response
Context Propagation
Critical: Always propagate to downstream services:
// Outgoing request
propagator.inject(ctx, headers)
Common Mistakes
- Using actual path →
/api/orders/12345creates millions of unique values - Missing propagation → Traces break at service boundaries
- Only tracking success → Must track errors with
error_type
References
references/methodology/red-methodology.mdreferences/platforms/{platform}/http.md