Products
LensAI
See latency, cost, tokens, errors, and volume across models and agents. LensAI is the observe layer of the control plane — fleet SLOs and cost attribution, not a replacement for your APM.
When to use
- You need p50/p95/p99 and $/task by tenant, agent, and model
- Finance and platform must share one cost number
- You want anomaly feeds that jump to TraceForge via trace_id
Ingest path
eBPF tracer or HTTP/SDK events
↓
streaming ingest :8080
↓
Redpanda
↓
ClickHouse
↓
Grafana :3000 ← dashboards
Inferix :4000 ← /v1/observe/metrics queryControl plane API stays on :4000. Do not point chat clients at ingest or Grafana ports. Streaming stack: infra-ai-streaming; eBPF: ebpf-llm-tracer.
Required labels
| Label | Why |
|---|---|
tenant_id | Cost attribution; reject if missing |
model_id | Model mix and SLO by revision |
trace_id | Join spike → TraceForge waterfall |
agent_id | Per-agent burn and errors |
env | Keep chaos/shadow out of prod SLO |
Core metrics
lensai.latency.p50/p95/p99— inference latency (ms)lensai.tokens.input/output— finalize streams or under-countlensai.cost.usd/cost.per_successful_tasklensai.errors.timeout,provider_5xx,rate_limit.429slensai.ingest.lag_ms,cardinality.active_series
Operator failure modes
| ID | Problem | Next action |
|---|---|---|
| L08 | Missing tenant_id → unattributed cost | Reject unlabeled at ingest |
| L09 | Token under-count on streams | Hook stream-end events |
| L12 | HTTP 200 with empty body | Treat empty as error class |
| L13 | 429 thrash burns retry cost | Respect Retry-After; jitter |
| L20 | Fallback to strong model spikes bill | Budget caps in RouteIQ |
| L23 | Cannot jump spike → trace | Require trace_id on events |
| L01 | Cardinality explosion | Drop high-churn labels; aggregate |
| L18 | Sampling hides rare errors | Always sample errors + slow |
Config knobs
observe: lensai: true sample_rate: 1.0 # spans only; metrics stay full require_tenant_id: true redact_pii: true
Source
Spans, tool taxonomy, business success.
TraceForge →