Skip to main content
Onyx provides several layers of observability: usage analytics in the Admin panel, a Prometheus metrics endpoint for infrastructure monitoring, connector sync status, and chat feedback collection. This page explains each surface and how to use it.

Usage analytics (Enterprise Edition)

The Analytics section of the Admin panel shows platform usage over time. The default lookback window is 30 days; you can set a custom date range.

Query analytics

Daily counts of total queries, thumbs-up feedback, and thumbs-down feedback across all users.

Active users

Daily count of unique active users, based on query activity.

Assistant analytics

Per-assistant message counts and unique user counts over the selected time range.

OnyxBot analytics

For Slack-connected deployments: daily query totals and auto-resolved query counts.

Query history

The Query History page lets admins review all chat sessions across the deployment.
1

Open Query History

Go to Admin panel → Query History.
2

Filter sessions

Filter by date range or by feedback type (thumbs up / thumbs down) to find sessions of interest.
3

Inspect a session

Click any session to see the full message thread, the assistant used, and any feedback the user submitted.
4

Export to CSV

Click Export to generate a downloadable CSV of query history for the selected time range. Exports run as background tasks and appear in the exports list when ready.
Query history can be configured to anonymize or fully disable user attribution. If anonymization is enabled, all user emails are replaced with anonymous@anonymous.invalid in the history view and exports. If history is disabled, the Query History page is not accessible.

Chat feedback

Users can rate individual responses with a thumbs up or thumbs down directly in the chat interface. Admins can see aggregate feedback counts in the Analytics section and filter query history by feedback type. Feedback signals help identify:
  • Assistants or connectors producing low-quality results
  • Topics where Onyx’s answers are frequently unhelpful
  • Regression after configuration changes

Connector health

The Connectors section of the Admin panel shows the current status of every connector.
Each connector displays its current state: Running, Completed, Failed, or Paused. The last sync time and the number of indexed documents are shown for each connector.
Failed connectors display the error encountered during the last sync attempt. Click into a connector to see detailed error messages and the affected document count.
Each connector shows how many documents have been indexed. Use this to verify that a new connector has fully synced or to detect unexpected drops in document count after a sync.
The connector detail view lists recent indexing attempts with timestamps, durations, and outcomes. You can cancel an in-progress indexing attempt from this view.

System info panel

The System Info page (Admin panel → System Info) provides a snapshot of the current deployment state, including service versions and configuration details useful for troubleshooting.

Prometheus metrics

Onyx exposes Prometheus metrics at GET /metrics on the API server. All custom metrics use the onyx_ prefix.

HTTP request metrics

MetricTypeLabelsDescription
http_requests_totalCountermethod, status, handlerTotal request count
http_request_duration_secondsHistogrammethod, handlerRequest latency by handler
http_request_duration_highr_secondsHistogram(none)High-resolution latency across all handlers
http_request_size_bytesSummaryhandlerIncoming request content length
http_response_size_bytesSummaryhandlerOutgoing response content length
http_requests_inprogressGaugemethod, handlerIn-flight requests
onyx_api_slow_requests_totalCountermethod, handler, statusRequests exceeding the slow request threshold (default 1 second)
Configure the slow request threshold with the SLOW_REQUEST_THRESHOLD_SECONDS environment variable.

Database pool metrics

MetricTypeLabelsDescription
onyx_db_pool_checked_outGaugeengineCurrently checked-out connections
onyx_db_pool_checked_inGaugeengineIdle connections in the pool
onyx_db_pool_overflowGaugeengineOverflow connections beyond configured pool size
onyx_db_pool_sizeGaugeengineConfigured pool size
onyx_db_pool_checkout_totalCounterengineTotal connection checkouts
onyx_db_pool_checkin_totalCounterengineTotal connection checkins
onyx_db_pool_connections_created_totalCounterengineTotal new connections created
onyx_db_pool_invalidations_totalCounterengineTotal connection invalidations
onyx_db_pool_checkout_timeout_totalCounterengineTotal checkout timeouts
onyx_db_connections_held_by_endpointGaugehandler, engineConnections currently held, by endpoint
onyx_db_connection_hold_secondsHistogramhandler, engineDuration a connection is held per endpoint
The engine label is one of sync, async, or readonly.

Celery task metrics

MetricTypeLabelsDescription
onyx_celery_task_started_totalCountertask_name, queueTotal tasks started
onyx_celery_task_completed_totalCountertask_name, queue, outcomeTotal tasks completed (outcome: success or failure)
onyx_celery_task_duration_secondsHistogramtask_name, queueTask execution duration
onyx_celery_tasks_activeGaugetask_name, queueCurrently executing tasks
onyx_celery_task_retried_totalCountertask_name, queueTotal task retries
onyx_celery_task_revoked_totalCountertask_nameTotal cancelled tasks
onyx_celery_task_rejected_totalCountertask_nameTotal tasks rejected by workers

Indexing pipeline metrics

MetricTypeLabelsDescription
onyx_indexing_task_started_totalCountertask_name, source, tenant_id, cc_pair_idIndexing tasks started per connector
onyx_indexing_task_completed_totalCountertask_name, source, tenant_id, cc_pair_id, outcomeIndexing tasks completed per connector

OpenSearch metrics

MetricTypeLabelsDescription
onyx_opensearch_search_client_duration_secondsHistogramsearch_typeEnd-to-end client-side search latency
onyx_opensearch_search_server_duration_secondsHistogramsearch_typeServer-side search execution time
onyx_opensearch_search_totalCountersearch_typeTotal search requests sent to OpenSearch
onyx_opensearch_searches_in_progressGaugesearch_typeCurrently in-flight searches

Useful PromQL queries

histogram_quantile(0.99, sum by (handler, le) (rate(http_request_duration_seconds_bucket[5m])))

Token rate limiting

Token rate limits cap the number of LLM tokens a user or group can consume within a rolling time window. This prevents any single user or team from monopolizing the LLM budget. Rate limits are configured in Admin panel → Token Rate Limits.
Apply a token budget that each individual user cannot exceed within the configured time window. This is a global limit that applies to all users equally.Navigate to Token Rate Limits → Users and click Add Limit. Set the token count and the time period (e.g. 50,000 tokens per hour).
Token rate limits are an Enterprise Edition feature. Curators can view the rate limits for their assigned groups but cannot create or modify them.

Celery queue monitoring

Onyx uses Celery background workers for connector syncing, document processing, and other async tasks. Worker types include the primary worker, docfetching, docprocessing, light, heavy, monitoring, and beat (scheduler). The onyx_celery_tasks_active and onyx_celery_task_completed_total metrics give a real-time view of queue activity per worker queue. High values for onyx_celery_task_retried_total or onyx_celery_task_rejected_total on a given queue can indicate a worker is overloaded or misconfigured.
Use Grafana to visualize Celery metrics. Counter metrics should be plotted with rate() over a 5-minute window. Gauge metrics can be displayed as stat or time-series panels.

Build docs developers (and LLMs) love