Summary
Redesign Knowhere's anonymous self-hosted telemetry into a formal OSS usage metric system for Ontos operators, with:
- Emitter schema v2 (
2026-07-telemetry-v2) — real periodic heartbeats, SaaS-/usage-parity aggregates, document-type + client-type mix, success rates
- Official clients auto-attaching
document_metadata.created_by_client / client_version
knowhere-metrics-dashboard /telemetry UI matching the planned Core usage + adoption story
- User-facing transparency (knowhere + self-hosted docs + dashboard disclosure)
Primary audience: Ontos operators understanding open-source / self-hosted adoption.
Transport: PostHog (unchanged). Logfire/OTEL out of scope.
Goals / product questions
| Question |
Metric |
| How many installs are alive? |
Active installs = distinct installation ID with ≥1 heartbeat in 7d / 30d |
| Are installs sticking? |
W0→W1 / W+4 retention via started ∩ heartbeat |
Same KPIs as SaaS /usage? |
Fleet Core usage: created/done/failed, success rate, backlog, pages, avg/P95 duration, trends, source type |
| Which clients create jobs? |
Allowlisted document_metadata.created_by_client |
| What documents do they handle? |
Allowlisted extension buckets + jobs/pages/success rate (never filenames) |
| Version / config / health? |
Last-known version & flags; real heartbeat probes |
Cross-repo scope
| Phase |
Repo(s) |
Outcome |
| P0 |
knowhere |
ADR-0004 — taxonomy, privacy, allowlists, metric IDs |
| P1 |
knowhere |
Emitter v2 + contract tests + README/.env.example |
| P2 |
knowhere-node-sdk, knowhere-cli, knowhere-dashboard, notebook/MCP |
Auto-attach created_by_client |
| P3 |
knowhere-metrics-dashboard |
/telemetry queries + UI (SaaS /usage parity) |
| P4 |
knowhere, knowhere-self-hosted, knowhere-dashboard |
Transparency docs / Settings disclosure |
Track follow-up PRs in those repos and link them here.
Implementation checklist
P0 — ADR
P1 — Emitter v2 (knowhere)
P2 — Official clients
P3 — Operator UI (knowhere-metrics-dashboard)
P4 — Transparency
Locked design notes
- Reuse existing job create
document_metadata.created_by_client / client_version — do not invent a new API field (JobCreateBase).
- Keep existing PostHog event names for continuity; add the two new aggregate events only.
- Do not emit free-form
client_version into PostHog aggregates in v1 (cardinality).
- Opt-out remains default-on +
TELEMETRY_ENABLED=false (document clearly; do not flip to opt-in in v1).
Non-goals (v1)
- Replacing Logfire/OTEL
- Per-user / content / filename / geo telemetry
- Model/provider popularity charts; GitHub stars merge into Telemetry
- Measuring installs that disabled telemetry
- Perfect multi-pod API counters
- Customer-facing OSS adoption charts in
knowhere-dashboard
Acceptance
References
- SaaS KPI reference:
knowhere-metrics-dashboard /usage
- Current emitter:
knowhere/packages/shared-python/shared/services/telemetry/
- Current Telemetry UI:
knowhere-metrics-dashboard/app/(dashboard)/telemetry/page.tsx
Summary
Redesign Knowhere's anonymous self-hosted telemetry into a formal OSS usage metric system for Ontos operators, with:
2026-07-telemetry-v2) — real periodic heartbeats, SaaS-/usage-parity aggregates, document-type + client-type mix, success ratesdocument_metadata.created_by_client/client_versionknowhere-metrics-dashboard/telemetryUI matching the planned Core usage + adoption storyPrimary audience: Ontos operators understanding open-source / self-hosted adoption.
Transport: PostHog (unchanged). Logfire/OTEL out of scope.
Goals / product questions
/usage?document_metadata.created_by_clientCross-repo scope
knowhereknowhere.env.exampleknowhere-node-sdk,knowhere-cli,knowhere-dashboard, notebook/MCPcreated_by_clientknowhere-metrics-dashboard/telemetryqueries + UI (SaaS/usageparity)knowhere,knowhere-self-hosted,knowhere-dashboardTrack follow-up PRs in those repos and link them here.
Implementation checklist
P0 — ADR
docs/adr/0004-anonymous-self-hosted-telemetry.md(+ index)schema_version = 2026-07-telemetry-v2created_by_client,source_typedone / (done + failed)as 0–1oss.active_installs_*,oss.usage.*,oss.client_*,oss.document_type_*, …)P1 — Emitter v2 (
knowhere)events.pyallowlists +normalize_document_type/normalize_client_namesuccess_rate_24h,job_duration_p95_seconds_24h, source_* counts, capability bucketsself_hosted_document_type_aggregate,self_hosted_client_aggregateTELEMETRY_*in.env.example+ README Telemetry sectionP2 — Official clients
knowhere-node-sdk— defaultcreated_by_client=node-sdk+ package versionknowhere-cli—cliknowhere-dashboard—dashboardP3 — Operator UI (
knowhere-metrics-dashboard)/telemetrypage sections (match planned mock; Core usage Chinese labels like SaaS/usage)docs/requirements.md+docs/guide.md; expand unit testsP4 — Transparency
knowhere-self-hostedconfiguration docs (en + zh)BILLING_ENABLED=falseLocked design notes
document_metadata.created_by_client/client_version— do not invent a new API field (JobCreateBase).client_versioninto PostHog aggregates in v1 (cardinality).TELEMETRY_ENABLED=false(document clearly; do not flip to opt-in in v1).Non-goals (v1)
knowhere-dashboardAcceptance
/telemetrywith the same KPI set as SaaS/usage(fleet aggregates)created_by_clientby defaultReferences
knowhere-metrics-dashboard/usageknowhere/packages/shared-python/shared/services/telemetry/knowhere-metrics-dashboard/app/(dashboard)/telemetry/page.tsx