> ## Documentation Index
> Fetch the complete documentation index at: https://ctrlrun.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# OTelEventSink

> Export every `Event` and `Receipt` as OpenTelemetry spans (SPEC-v0.2 §8).

`ctrlrun.otel.OTelEventSink` — class, defined at `src/ctrlrun/otel.py:45`

```python theme={null}
from ctrlrun.otel import OTelEventSink
```

Needs the `otel` extra: `pip install "ctrlrun[otel]"`. Importing it without that raises `MissingDependency` carrying the install command.

```python theme={null}
class OTelEventSink
    def __init__(*, tracer_provider: Any = None, arguments: bool = False, max_open_spans: int = DEFAULT_MAX_OPEN_SPANS)
```

Export every `Event` and `Receipt` as OpenTelemetry spans (SPEC-v0.2 §8).

**Never blocks.** Spans are handed to whatever span processor the application configured
and nothing is flushed synchronously; with no configured tracer provider the API's no-op
provider makes the whole thing free. A process that dies mid-action leaves that span
unended — stated, not solved.

## Next

* [Python API index](/reference/api/index).
* [Get started](/get-started/quickstart) · [Why](/why).


## Related topics

- [Receipts into OpenTelemetry](/cookbook/receipts-to-opentelemetry.md)
- [Export to OpenTelemetry](/guides/export-to-opentelemetry.md)
- [Receipts and evidence](/concepts/receipts-and-evidence.md)
- [Install](/get-started/install.md)
- [Python API](/reference/api/index.md)
