Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
205ab30
feat(telemetry): add the crate with its event model and OTLP encoding
pblazej Oct 1, 2026
fc0ef58
docs(telemetry): specify resource attributes, events, logs and spans
pblazej Oct 1, 2026
2716873
fix(telemetry): stamp records at capture and keep open spans resolvable
pblazej Oct 6, 2026
6271ffe
fix(telemetry): enforce the custom attribute limit atomically and own…
pblazej Oct 6, 2026
0424f50
refactor(telemetry): add TelemetryEvent::default and a span kind conv…
pblazej Oct 6, 2026
0f95504
docs(telemetry): add the README, SPEC rules and a stage-true changeset
pblazej Oct 6, 2026
b559dab
fix(telemetry): reserve otel.*, own span status, calibrate size hints…
pblazej Oct 7, 2026
b417592
refactor(telemetry): drop span-event attributes, add problem_drops, r…
pblazej Oct 7, 2026
94107d2
docs(telemetry): document drain, late span steps and upload counters
pblazej Oct 7, 2026
126996b
Merge remote-tracking branch 'origin/main' into blaze/telemetry-stack…
pblazej Oct 7, 2026
775b105
fix(telemetry): take a record's session attributes at capture, not at…
pblazej Oct 8, 2026
87f13dd
feat(telemetry): count and warn when a span's attributes or checkpoin…
pblazej Oct 8, 2026
e6c2d3f
refactor(telemetry): derive Default for TelemetryEvent and Severity
pblazej Oct 9, 2026
ec9508a
chore(telemetry): merge main into the stage-1 branch
pblazej Oct 9, 2026
5599155
chore(telemetry): merge main into the stage-1 branch
pblazej Oct 13, 2026
182e545
Merge remote-tracking branch 'origin/main' into blaze/telemetry-stack…
pblazej Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/add-livekit-telemetry-crate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
livekit-telemetry: minor
---

Add `livekit-telemetry`, the internal client telemetry core shared by the LiveKit client SDKs.
51 changes: 51 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ members = [
"livekit-rpc",
"livekit-ffi",
"livekit-datatrack",
"livekit-telemetry",
"livekit-token",
"livekit-token-source",
"livekit-ffi-node-bindings",
Expand Down Expand Up @@ -59,6 +60,7 @@ livekit-api = { version = "0.9.1", path = "livekit-api" }
livekit-capture = { version = "0.1.6", path = "livekit-capture" }
livekit-ffi = { version = "0.13.0", path = "livekit-ffi" }
livekit-datatrack = { version = "0.2.4", path = "livekit-datatrack" }
livekit-telemetry = { version = "0.1.0", path = "livekit-telemetry" }
livekit-signaling = { version = "0.1.7", path = "livekit-signaling" }
livekit-token = { version = "0.3.1", path = "livekit-token" }
livekit-token-source = { version = "0.1.4", path = "livekit-token-source" }
Expand Down
8 changes: 8 additions & 0 deletions knope.toml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,14 @@ versioned_files = [
]
changelog = "livekit-datatrack/CHANGELOG.md"

[packages.livekit-telemetry]
versioned_files = [
"livekit-telemetry/Cargo.toml",
"Cargo.lock",
{ path = "Cargo.toml", dependency = "livekit-telemetry" },
]
changelog = "livekit-telemetry/CHANGELOG.md"

[packages.livekit-common]
versioned_files = [
"livekit-common/Cargo.toml",
Expand Down
1 change: 1 addition & 0 deletions livekit-telemetry/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Changelog
25 changes: 25 additions & 0 deletions livekit-telemetry/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[package]
name = "livekit-telemetry"
description = "Client telemetry core for LiveKit: buffers events on-device and exports them as OTLP"
version = "0.1.0"
readme = "README.md"
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
license.workspace = true
edition.workspace = true
repository.workspace = true

[dependencies]
log = { workspace = true }
prost = { workspace = true }
rand = { workspace = true }
# OTLP message types only (`gen-tonic-messages` = prost structs, no tonic). Same prost as
# livekit-protocol so a single prost is linked.
opentelemetry-proto = { version = "0.32", default-features = false, features = ["logs", "trace", "gen-tonic-messages"] }
uniffi = { workspace = true, features = ["scaffolding-ffi-buffer-fns"], optional = true }

[features]
uniffi = ["dep:uniffi"]

# How CI checks this crate's features, read by
# `.github/workflows/feature-combinations-curated.yml` via `cargo metadata`.
[package.metadata.feature-combinations]
mode = "powerset"
19 changes: 19 additions & 0 deletions livekit-telemetry/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# LiveKit Telemetry

**Important**:
This is an internal crate for client telemetry in LiveKit client SDKs and is not meant to be
used directly.

It currently holds the shared data model and its encoding:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm sure you've considered this, but what's the downside of having this data model declared in protocol as shared protos?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


- **Records.** `TelemetryEvent`, `LogRecord`, `Attribute` / `AttributeValue`, `Severity` and
`SpanOutcome`: the events, log lines and span outcomes a platform SDK hands over.
- **Buffers.** Bounded, drop-oldest queues for records and spans, each filed under the session
(trace) it belongs to; every drop is counted.
- **Encoding.** [OTLP/HTTP](https://opentelemetry.io/docs/specs/otlp/) protobuf logs and traces,
using the `opentelemetry-proto` message types only (no gRPC stack).

The pipeline that batches, caches and uploads records is not part of the crate yet.

Event names, attributes and span rules are defined in [`SPEC.md`](SPEC.md). It is the contract
for the whole crate, including the parts not implemented yet.
Loading
Loading