AI OBSERVABILITY

QYL.

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

OTLP

HTTP + gRPC ingestion on standard ports. Any language, any SDK. Point your existing OpenTelemetry setup at qyl and it works.

:5100/v1/traces · :4317 gRPC
GENAI

Token costs, model usage, latency percentiles. Native GenAI analytics, not bolted on. OTel Semantic Conventions v1.39.

OpenAI · Anthropic · Google · Azure · Bedrock · Cohere · Mistral
DASHBOARD

Embedded React UI with real-time SSE streaming. Sessions, traces, logs, GenAI analytics. Dark mode. Zero polling.

React 19 · Tailwind 4 · SSE live updates
MCP

30+ tools for Claude, GPT, and any AI agent. Your agents query their own telemetry. Sessions, errors, costs, traces.

qyl.list_sessions · qyl.get_genai_stats · qyl.analyze_session_errors
01

Run the container

docker run -d -p 5100:5100 -p 4317:4317 -v ~/.qyl:/data ghcr.io/ancplua/qyl:latest
02

Point your OTLP SDK at qyl

PYTHON
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:5100
.NET
builder.Services.AddOpenTelemetry() .WithTracing(t => t.AddOtlpExporter(o => o.Endpoint = new Uri("http://localhost:5100/v1/traces")));
NODE.JS
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:5100 node app.js
03

Open the dashboard

open http://localhost:5100

Your 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.

TOKENS
input · output · total
COST
USD per call · per session
LATENCY
P50 · P95 · P99
MODELS
usage · provider · tools

Your agents observe themselves. qyl exposes 30+ MCP tools so Claude, GPT, or any agent can query sessions, analyze errors, and track costs directly.

> qyl.get_genai_stats // token usage, costs, latency summary
> qyl.list_sessions // all AI sessions with error counts
> qyl.analyze_session_errors // every error in a session
> qyl.get_session_transcript // human-readable timeline
> qyl.search_spans // find anything in your telemetry
{ "mcpServers": { "qyl": { "command": "dotnet", "args": ["run", "--project", "src/qyl.mcp"], "env": { "QYL_COLLECTOR_URL": "http://localhost:5100" } } } }
QYL JAEGER GRAFANA DATADOG
Setup1 commandCassandra/ESPrometheus stackSaaS account
StorageDuckDB (1 file)External DBExternal DBCloud only
GenAI nativeYesNoAdd-onAdd-on
MCP tools30+NoNoNo
Real-timeSSE streamingLimitedGrafana LiveYes
CostFreeFreeFree$$$
VariableDefaultPurpose
QYL_PORT5100HTTP API + Dashboard
QYL_GRPC_PORT4317gRPC OTLP ingestion
QYL_DATA_PATH./qyl.duckdbDuckDB file location
QYL_TOKEN(none)Auth token (disabled if unset)
QYL_MAX_RETENTION_DAYS30Days to retain telemetry
QYL_MAX_SPAN_COUNT1,000,000Max spans before cleanup