A Grafana app plugin for visualizing LLM (Large Language Model) traces stored in Grafana Tempo.
Supports multiple span conventions out of the box:
- OpenInference (Phoenix, Traceloop, etc.)
- OTel GenAI (OpenTelemetry Semantic Conventions for GenAI)
- Vertex AI (GCP Vertex AI Agent Builder)
- Browse and search LLM traces via TraceQL
- Inspect input/output messages with Markdown rendering
- View tool calls with JSON payloads
- Multi-convention detection tabs (LLM / OpenInference / OTel GenAI)
- Token usage and estimated cost per span
- Trace timeline with span hierarchy visualization
- Resizable detail panels
| Component | Version |
|---|---|
| Grafana | ≥ 11.1.0 |
| Node.js | ≥ 22.6 (for development) |
| A configured Tempo datasource |
- Download the latest release zip from the Releases page
- Extract it into your Grafana plugins directory:
unzip llm-traces-app-*.zip -d /var/lib/grafana/plugins/ - Add the plugin to Grafana's allow list (required for unsigned community plugins):
[plugins] allow_loading_unsigned_plugins = llm-traces-app
- Restart Grafana
A ready-to-run stack with Grafana + Tempo is included for local development:
# Build the plugin first
npm install && npm run build:standalone
# Start the stack (run from repo root)
docker compose -f docker/docker-compose.yml up --buildOpen http://localhost:3000 (admin / admin). Tempo OTLP endpoints are available at localhost:4317 (gRPC) and localhost:4318 (HTTP).
Requires Docker Compose v2.17+ for
dockerfile_inlinesupport.
To auto-enable the plugin (Grafana app plugins must be explicitly enabled):
# /etc/grafana/provisioning/plugins/llm-traces.yaml
apiVersion: 1
apps:
- type: llm-traces-app
org_id: 1
disabled: false- Navigate to LLM Traces in the Grafana side menu
- Select a Tempo datasource
- Use the search bar or TraceQL to find traces
- Click a trace to see the full span hierarchy
- Click an LLM span to inspect messages, parameters, and token usage
# Install dependencies (also sets up pre-commit hook via Husky)
npm install
# Build (standalone — no Grafana monorepo needed)
npm run build:standalone
# Run all unit tests
npm test
# Run individual test files
node --experimental-strip-types tests/llmUtils.unit.test.ts
node --import ./tests/node-loader.mjs --experimental-strip-types tests/tempoClient.unit.test.ts
node --experimental-strip-types tests/costUtils.unit.test.ts
node --experimental-strip-types tests/prism-traceql.unit.test.ts
# Lint & typecheck
npm run typecheck
npm run lintNote: Node.js >= 22.6 is required for the
--experimental-strip-typesflag used by the test runner and build scripts.
See CONTRIBUTING.md for detailed contribution guidelines.
Copyright 2026 Agoda Services Co., Ltd.