Roblox

How Roblox Built LLM Observability with OpenTelemetry, Kafka and StarRocks

Roblox extended its existing OpenTelemetry pipeline to cover LLM traffic, using StarRocks on object storage for LLM logs and traces. Every service behind its internal model gateway now gets LLM observability by default, at 100% sampling.

100%

of LLM traffic captured

Sampling rate for services behind the internal model gateway; no downsampling or throttling

50+

LLM services in production

Alongside 12 coding harnesses and 50 models, at millions of tokens per second

20x

fewer users with slow first-token times

Reduction within a single month, from performance work listed among the platform's results

CompanyRoblox
Use caseGenAI / LLM observability (logs and traces)
Previous solutionNo common pipeline; each LLM system used its own format and destination
Employees3,000+

Originally published at: LinkedIn

About Roblox

Roblox runs a large internal observability platform built on open-source components. As LLM-based tools spread across the company, its observability team extended that platform to cover AI agents, bots and coding tools, and added StarRocks as the store for LLM logs and traces.

Roblox did not build separate infrastructure for AI workloads. It extended its existing OpenTelemetry pipeline at a few points: an LLM gateway, StarRocks for LLM logs and traces, and Grafana plugins.

Key takeaway · Extend the existing platform

The original post, "GenAI Observability at Roblox: Where We Started," was written by Jay Moorthi of Roblox.

The challenge

Within a short time, Roblox had dozens of LLM-based systems: AI agents, classifiers, support bots and coding harnesses. Some were custom builds, some used LangChain, and some wrapped Claude or OpenCode. Roblox's other services had reliable observability data; these new systems mostly did not, even though LLM behavior varies widely from one request to the next.

There were no internal design patterns or industry standards to follow yet. Each system produced telemetry in its own format, sent it to its own destination and used no shared schema. Bug reports from engineers described symptoms such as a tool that seemed slow, a session that hung or a bot that gave confused answers, and the team could neither act on them nor reproduce them.

Capacity was not the main problem. Roblox's existing pipeline, which combines OpenTelemetry clients and the OpenTelemetry Collector with Apache Kafka, Logstash, Elastic, VictoriaMetrics, Ceph Object Storage and Grafana, already carries more than 10 million messages per second, or trillions each week. The harder questions were about the data itself. LLM telemetry has a different shape from other telemetry, raises new security concerns, and its outliers are often where the important problems show up.

Design principles

Before choosing components, the team agreed on six principles:

  • Meet users where they are: no new UI, query language or workflow.
  • Make LLMs part of the service graph: the same diagnostic support whether or not a system calls an LLM.
  • Sample only as a last resort: outlier agent behavior often matters most, so keep 100% of LLM traffic, with no downsampling or throttling.
  • Build in security from day one: LLM traffic gets the same guardrails and access controls as PII.
  • Reuse existing scale: run on internal systems that already meet strict SLAs.
  • Stay on open standards and open source: remain vendor-agnostic and contribute fixes upstream.

These principles pointed to four additions: one place to instrument LLM traffic, a standard telemetry stream, storage that could keep full-fidelity LLM data, and a means of showing that data in tools engineers already used.

The solution

A gateway as the instrumentation point

While this work was in progress, Roblox rolled out a LiteLLM-based LLM gateway, which became the single instrumentation point. Services behind it emit a standard telemetry stream without custom onboarding code or extra work for their engineers.

Routing LLM data to StarRocks

Telemetry leaves the gateway and enters the OpenTelemetry Collector, which normalizes, enriches and redacts it, then routes it into the existing pipeline. Kafka acts as a durable buffer. For the new kind of data, LLM logs and traces, Roblox chose StarRocks: open-source OLAP that runs on object storage and supports RBAC and query isolation.

Because routing is handled in the OpenTelemetry Collector, the team could add StarRocks quickly and with little risk to the rest of the pipeline. Running StarRocks on object storage keeps storage costs at HDD level, while compute scales independently for both interactive queries and large analytical jobs.

Pipeline diagram: LLM sources send OTLP to the OpenTelemetry Collector, then Kafka and StarRocks; StarRocks feeds Grafana, data access and benchmarking and scales out to object storage; Kafka also feeds streaming analytics
LLM observability pipeline based on OpenTelemetry, Kafka, StarRocks and Grafana

In the diagram, StarRocks, labeled as disaggregated OLAP with 100% sampling, serves three consumers: Grafana, data access through MCP servers, a CLI and a troubleshooting skill, and benchmarking with agent-bench and a regression suite. Its storage scales out to object storage that needs no SSDs, and object storage feeds batch analytics in the data lake in Parquet format. Kafka also feeds near-real-time streaming analytics for intent and sentiment, and agent-bench runs flow back into the pipeline as a new source.

Grafana for engineers

Grafana was already in wide use at Roblox, so the team built Grafana plugins that let engineers browse LLM sessions and turns there. The plugins follow the OpenTelemetry semantic conventions for LLM data.

StarRocksLiteLLMOpenTelemetry CollectorApache KafkaObject storageGrafana

The results

All LLM telemetry now flows through one OpenTelemetry-based platform. Every service behind the internal model gateway is covered by default, sampled at 100%, with no onboarding code. The platform reports tokens and cost for human and service usage alike, and code fingerprinting traces every AI-authored line of code back to where it came from.

Results reported so far:

  • Scale: more than 50 production LLM services, 12 coding harnesses and 50 models, at millions of tokens per second.
  • Troubleshooting: engineers find the root cause of problems with their coding agents on their own.
  • Cost visibility: one set of cost dashboards covers all of Roblox's AI coding tools.
  • Performance: within one month, the number of users who hit slow first-token times fell by 20x.
  • Code attribution: all new code at Roblox is fingerprinted. Most of it is attributed to either a coding harness and model pair or an automated code generator, backed by an agent trace.

What's next

Roblox is adding batch and streaming analytics, continuous classifiers for intent, sentiment, safety and other signals, and benchmarking and evaluation tools.