Tracing across the stack follows, as much as possible, the Open Telemetry specifications. Configuration environment variables are specified in the OpenTelemetry Environment Variable Specification where possible. The Boxo Tracing documentation is the basis for tracing here.
Note
A major distinction from the more general tracing enabled in boxo is that when tracing is enabled it is restricted to flows through HTTP Gateway requests, rather than also included background processes.
To sample a % of requests set RAINBOW_SAMPLING_FRACTION
to a value between 0
and 1
.
Per-request tracing is possible when a non-empty RAINBOW_TRACING_AUTH
is set in Rainbow and when there are both valid
Authorization and Traceparent
HTTP headers passed in the request.
When tracing, it is often useful to skip local blockcache by setting Rainbow-No-Blockcache
header to true
.
Per-request tracing exmaple:
$ export RAINBOW_TRACING_AUTH=CHANGEME-tracing-auth-secret # use value from Rainbow config
$ export CID=bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
$ curl -H "Authorization: $RAINBOW_TRACING_AUTH" -H "Traceparent: 00-$(openssl rand -hex 16)-00$(openssl rand -hex 7)-01" -H "Rainbow-No-Blockcache: true" http://127.0.0.1:8090/ipfs/$CID -v -o /dev/null
...
> Authorization: CHANGEME-tracing-auth-secret
> Traceparent: 00-b617dc6b6e302ccbabe0115eac80320b-00033792c7de8fc6-01
...
Now you can search for trace_id = b617dc6b6e302ccbabe0115eac80320b
to find the trace.