mirai provides comprehensive OpenTelemetry (otel) tracing support for observing asynchronous operations and distributed computation.
When the otel and otelsdk packages are
installed and tracing is enabled, mirai automatically creates spans to
track the lifecycle of daemon management, async operations, and task
execution.
This enables detailed monitoring of:
Tracing is automatically enabled when:
otel and otelsdk packages are
installed and availableNo additional configuration is required - mirai will automatically detect the presence of OpenTelemetry and begin tracing.
mirai creates several types of spans to represent different operations:
daemons /
daemons->reset - Root span for a compute
profile
internal
url, n
(number of daemons), dispatcher (true/false),
compute_profile
daemon / daemon->end -
Individual daemon process span
internal
url
mirai_map - Parallel map operation
span
internal
mirai - Client-side async task span
client
mirai.id (unique task
identifier)mirai() is
called, ended as soon as it returnsdaemon->eval - Server-side task
evaluation span
server
The spans form a distributed structure that traces the complete lifecycle of async operations:
daemons (compute profile - top level)
daemon (daemon process 1 - top level)
...
daemon (daemon process N - top level)
mirai_map (top level) ──link→ daemons
├── mirai (task 1) ──link→ daemons
│ └── daemon->eval ──link→ daemon
├── mirai (task 2) ──link→ daemons
│ └── daemon->eval ──link→ daemon
└── mirai (task N) ──link→ daemons
└── daemon->eval ──link→ daemon
mirai (top level) ──link→ daemons
└── daemon->eval ──link→ daemon
daemon->end (daemon process 1) ──link→ daemon
...
daemon->end (daemon process N) ──link→ daemon
daemons->reset ──link→ daemons
Context Propagation: The context is automatically
packaged with each mirai() call and extracted on the daemon
side, enabling proper parent-child relationships across process
boundaries.
Span Links: Tasks are linked to their compute
profile’s daemons span on the client side, and to each
daemon span on the server side, showing exactly where each
evaluation happened. When daemons are reset and the respective daemons
terminated, these events are recorded in new spans which link back to
the original spans.
daemon->eval spans automatically track the success or
failure of operations:
Status Values:
'ok' or 'unset' - completed
successfully'error', with description 'miraiError' -
failed with an error'error', with description 'miraiInterrupt'
- was interruptedThe OpenTelemetry spans provide rich observability into mirai operations:
Performance Monitoring:
Error Analysis:
Distributed Tracing:
mirai’s OpenTelemetry implementation works seamlessly with any OpenTelemetry-compatible observability platform, including:
The tracer name used by mirai is "org.r-lib.mirai",
making it easy to filter and identify mirai-related traces.