wyrd/tools
esc

    ↑↓ Move ↵ Open xolotl results first Search by Pagefind
    Releases

    Telemetry

    Xolotl exports traces, logs and metrics over OTLP/HTTP when telemetry.otlp_endpoint is set. It writes logs to stdout in any case.

    Export

    [telemetry]
    otlp_endpoint = "http://openobserve:5080/api/default"   # OpenObserve: /api/<org>
    service_name = "xolotl"
    metrics_interval_secs = 30
    dashboard_url = "https://openobserve.example.lan"       # linked from the web UI

    Xolotl adds /v1/traces, /v1/metrics and /v1/logs to the endpoint. Put header values, for example Authorization, in the OpenBao secret telemetry:

    bao kv put secret/xolotl/telemetry Authorization="Basic ..."

    The OpenBao values win over [telemetry.otlp_headers].

    Logs

    SettingValues
    log_format (XOLOTL_LOG_FORMAT)pretty (default) or json. The container image uses json
    log_filterA RUST_LOG-style filter. Default info

    Metrics

    MetricAttributesMeaning
    xolotl.requestsprovider, model, endpoint, status, clientProxied LLM requests
    xolotl.request.durationprovider, model, endpointRequest duration
    xolotl.tokensprovider, model, direction, clientTokens by direction (input, output, cached)
    xolotl.account.usage_percentaccount, provider, windowUsage of each account window
    xolotl.account.availableaccount, provider1 when the account can take requests
    xolotl.upstream.errorsprovider, status or kindUpstream errors of subscription accounts
    xolotl.oauth.refreshesprovider, resultOAuth token refreshes. result=uncertain: the provider may have used the refresh token, but no usable answer came back
    xolotl.vault.unsaved_credentialsRefreshed tokens not yet written to OpenBao. Alert when this stays above 0
    xolotl.mcp.tool_callsserver, tool, statusMCP tool calls
    xolotl.mcp.tool_call.durationserver, toolMCP tool call duration
    xolotl.mcp.executionsstatusexecute calls
    xolotl.limit.consumptionclient, unit (requests, tokens), window (minute, day)Rate limit consumption of each key
    xolotl.limit.rejectionspolicy, client, limitRequests refused by a rate limit
    xolotl.session.context_tokensprovider, modelPrompt size of each successful request
    xolotl.session.context_utilizationprovider, modelPrompt size as a fraction of the model’s context window, when known
    xolotl.session.locksevent (formed, broken), provider, and reason when brokenContext locks. See Context lock
    xolotl.tool_callsclient, toolTool calls named in LLM responses
    xolotl.export.rowssink (clickhouse, nats), outcomeExchanges exported. ClickHouse: inserted, dropped (queue full) or failed (ClickHouse refused the batch). NATS: published, dropped (queue full) or refused (too large for the stream). See ClickHouse export and NATS export

    Request log

    Every LLM request is also in the SQLite request log, for database.retention_days (90). Read it with xolotl usage or on the web UI’s Usage screen. Each row holds session_key, a digest that identifies its conversation, context_tokens, the prompt’s size, and context_window, the model’s window when known.