
- Each event belongs to a span; it cannot exist independently.
- An event has a single timestamp (there is no start/end time).
- Events can carry structured attributes to provide contextual detail.

| Characteristic | Why it matters | Typical attributes |
|---|---|---|
| Belongs to a span | Keeps events tied to trace context for correlation | trace_id, span_id |
| Single timestamp | Pinpoints when an event occurred | timestamp |
| Structured attributes | Attach context (errors, counts, metadata) | exception.type, exception.message, result_length |
exception.type, exception.message, and exception.stacktrace. Example JSON event:
OpenTelemetry recommends recording exceptions as span events so they remain connected to the trace context and are timestamped for easier debugging.




- Capturing a stack trace or exception details when an error occurs.
- Marking retries or backoff events inside a span.
- Annotating application-specific checkpoints (e.g., parsing completed, cache miss).
- Recording important external call completions or timeouts.

add_event (or equivalent) API in your SDK. Example in Python:
- OpenTelemetry: Exceptions semantic conventions
- OpenTelemetry: Tracing overview
- OpenTelemetry SDKs and APIs