mirai provides comprehensive OpenTelemetry (otel) tracing for observing async operations and distributed computation.
With otel and otelsdk installed and tracing enabled, mirai automatically creates spans tracking daemon management, async operations, and task execution lifecycles.
Detailed monitoring of:
Tracing enables automatically when:
otel and otelsdk packages are installedNo additional action needed - mirai automatically detects OpenTelemetry and begins tracing.
mirai creates several span types representing different operations.
daemons set / daemons reset
Root span for a compute profile, created when daemons are set/reset. Span name includes URL for easy identification.
internalserver.address (e.g. ‘127.0.0.1’ or ‘hostname’)server.port (where applicable)network.transport (e.g. ‘tcp’ or ‘ipc’)mirai.dispatcher (true/false)mirai.compute (profile name)daemon connect / daemon disconnect
Daemon process span, created when a daemon connects/disconnects. Span name includes URL for easy identification.
internalserver.address (e.g. ‘127.0.0.1’ or ‘hostname’)server.port (where applicable)network.transport (e.g. ‘tcp’ or ‘ipc’)mirai_map
Parallel map operation span encompassing the entire map operation across multiple mirai tasks.
internalmirai
Client-side async task span. Created when mirai() is called, ends when it returns.
clientmirai.id (unique task identifier)daemon eval
Server-side task evaluation span. Tracks actual mirai evaluation duration on the daemon.
serverSpans form a distributed structure tracing the complete async operation lifecycle:
daemons set (compute profile - top level)
daemon connect (daemon process 1 - top level)
...
daemon connect (daemon process N - top level)
mirai_map (top level) ──link→ daemons set
├── mirai (task 1) ──link→ daemons set
│ └── daemon eval ──link→ daemon connect
├── mirai (task 2) ──link→ daemons set
│ └── daemon eval ──link→ daemon connect
└── mirai (task N) ──link→ daemons set
└── daemon eval ──link→ daemon connect
mirai (top level) ──link→ daemons set
└── daemon eval ──link→ daemon connect
daemons reset ──link→ daemons set
daemon disconnect (daemon process 1) ──link→ daemon connect
...
daemon disconnect (daemon process N) ──link→ daemon connect
Context Propagation: Context automatically packaged with each mirai() call and extracted on the daemon side, enabling proper parent-child relationships across process boundaries.
Span Links: Tasks link to their compute profile’s daemons set span (client-side) and each daemon connect span (server-side), showing exactly where evaluation occurred. When daemons reset and disconnect, new spans record these events linking back to the originals.
daemon eval spans automatically track operation success or failure.
Status Values:
'ok' or 'unset' - successful completion'error' with description 'miraiError' - error failure'error' with description 'miraiInterrupt' - interruptedOpenTelemetry spans provide rich observability into mirai operations.
Performance Monitoring:
Error Analysis:
Distributed Tracing:
mirai’s OpenTelemetry implementation works seamlessly with any compatible observability platform:
The tracer name org.r-lib.mirai enables easy filtering and identification of mirai-related traces.