Observe everything. Judge nothing. Document perfectly.
GenAI-native telemetry. One Docker command. Your data stays yours.
docker run -d -p 5100:5100 -p 4317:4317 -v ~/.qyl:/data ghcr.io/ancplua/qyl:latest
Then visit localhost:5100
HTTP + gRPC ingestion on standard ports. Any language, any SDK. Point your existing OpenTelemetry setup at qyl and it works.
Token costs, model usage, latency percentiles. Native GenAI analytics, not bolted on. OTel Semantic Conventions v1.39.
Embedded React UI with real-time SSE streaming. Sessions, traces, logs, GenAI analytics. Dark mode. Zero polling.
30+ tools for Claude, GPT, and any AI agent. Your agents query their own telemetry. Sessions, errors, costs, traces.
Run the container
docker run -d -p 5100:5100 -p 4317:4317 -v ~/.qyl:/data ghcr.io/ancplua/qyl:latestPoint your OTLP SDK at qyl
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:5100builder.Services.AddOpenTelemetry()
.WithTracing(t => t.AddOtlpExporter(o =>
o.Endpoint = new Uri("http://localhost:5100/v1/traces")));OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:5100 node app.jsOpen the dashboard
open http://localhost:5100Your telemetry is there. Real-time. No setup.
Other tools bolt GenAI on. qyl was built for it. Every LLM call is captured with full semantic context.
Your agents observe themselves. qyl exposes 30+ MCP tools so Claude, GPT, or any agent can query sessions, analyze errors, and track costs directly.
{
"mcpServers": {
"qyl": {
"command": "dotnet",
"args": ["run", "--project", "src/qyl.mcp"],
"env": { "QYL_COLLECTOR_URL": "http://localhost:5100" }
}
}
}| QYL | JAEGER | GRAFANA | DATADOG | |
|---|---|---|---|---|
| Setup | 1 command | Cassandra/ES | Prometheus stack | SaaS account |
| Storage | DuckDB (1 file) | External DB | External DB | Cloud only |
| GenAI native | Yes | No | Add-on | Add-on |
| MCP tools | 30+ | No | No | No |
| Real-time | SSE streaming | Limited | Grafana Live | Yes |
| Cost | Free | Free | Free | $$$ |
| Variable | Default | Purpose |
|---|---|---|
| QYL_PORT | 5100 | HTTP API + Dashboard |
| QYL_GRPC_PORT | 4317 | gRPC OTLP ingestion |
| QYL_DATA_PATH | ./qyl.duckdb | DuckDB file location |
| QYL_TOKEN | (none) | Auth token (disabled if unset) |
| QYL_MAX_RETENTION_DAYS | 30 | Days to retain telemetry |
| QYL_MAX_SPAN_COUNT | 1,000,000 | Max spans before cleanup |