可观测性与监控
可观测性与监控
相关源文件
以下文件为本维基页面的生成提供了上下文:
backend/ee/onyx/background/celery_utils.pybackend/ee/onyx/background/task_name_builders.pybackend/onyx/background/celery/tasks/monitoring/tasks.pybackend/onyx/background/task_utils.pybackend/onyx/chat/chat_processing_checker.pybackend/onyx/chat/stop_signal_checker.pybackend/onyx/connectors/google_site/connector.pybackend/onyx/connectors/jira/connector.pybackend/onyx/connectors/jira/utils.pybackend/onyx/federated_connectors/oauth_utils.pybackend/onyx/key_value_store/factory.pybackend/onyx/key_value_store/store.pybackend/onyx/mcp_server_main.pybackend/onyx/server/features/release_notes/utils.pybackend/onyx/server/metrics/perm_sync_metrics.pybackend/onyx/utils/platform.pybackend/onyx/utils/telemetry.pybackend/tests/daily/connectors/confluence/test_confluence_basic.pybackend/tests/daily/connectors/confluence/test_confluence_permissions_basic.pybackend/tests/daily/connectors/jira/test_jira_basic.pybackend/tests/external_dependency_unit/connectors/confluence/test_confluence_group_sync.pybackend/tests/external_dependency_unit/connectors/google_drive/test_google_drive_group_sync.pybackend/tests/external_dependency_unit/connectors/jira/test_jira_doc_sync.pybackend/tests/external_dependency_unit/connectors/jira/test_jira_group_sync.pybackend/tests/unit/onyx/connectors/jira/test_jira_bulk_fetch.pybackend/tests/unit/onyx/connectors/jira/test_jira_checkpointing.pybackend/tests/unit/onyx/connectors/jira/test_jira_large_ticket_handling.pybackend/tests/unit/server/metrics/test_perm_sync_metrics.pyprofiling/README.mdprofiling/prometheus.yml
本文档介绍了 Onyx 的可观测性与监控基础设施,包括错误追踪、分析、健康检查、日志记录,以及针对 API 服务器和后台索引管线的 Prometheus 指标。
概述
Onyx 采用多层可观测性方案来确保系统可靠性和性能:
- 错误追踪:通过 Sentry 集成后端(FastAPI)和前端(Next.js)。
- 产品分析:集成 PostHog,并配置自定义代理。
- 健康检查:提供 HTTP 端点供编排器探针和外部服务校验使用。
- 日志记录:标准化日志,包含租户上下文和延迟追踪。
- 运维指标:Prometheus 收集器,用于监控数据库连接池健康、Celery 队列深度和索引进度。
来源:backend/onyx/main.py:329-336, backend/onyx/background/celery/tasks/monitoring/tasks.py:145-170, backend/onyx/utils/telemetry.py:99-106
错误追踪(Sentry)
Sentry 提供实时异常监控。系统采用多环境配置,以捕获不同执行上下文中的错误。
后端 Sentry 配置
后端在创建 FastAPI 应用时初始化 Sentry。它集成了 Starlette 和 FastAPI,用于捕获未处理的异常和性能追踪。
后端 Sentry 初始化流程
来源:backend/onyx/main.py:329-336
前端 Sentry 配置
Next.js 前端使用 @sentry/nextjs,并针对服务器、边缘和浏览器环境进行了特定配置。该功能根据构建时的环境变量(如 NEXT_PUBLIC_SENTRY_DSN)条件启用。
来源:web/next.config.js:159-188
产品分析(PostHog)
PostHog 追踪用户交互和系统里程碑事件。为防止广告拦截器干扰,Onyx 通过自身的 Next.js 后端代理 PostHog 流量。
PostHog 代理架构
来源:web/next.config.js:80-91, backend/onyx/utils/telemetry.py:181-193
指标收集(Prometheus)
Onyx 在 GET /metrics 端点暴露运维指标。这些指标分为 API 指标和后台基础设施指标。
1. API 和数据库指标
API 服务器使用自定义收集器来监控 SQLAlchemy 连接池健康和 API 性能。
| 指标名称 | 类型 | 描述 |
|---|---|---|
onyx_db_pool_checked_out | 仪表盘(Gauge) | 当前活跃的数据库连接数 |
onyx_db_pool_checked_in | 仪表盘(Gauge) | 连接池中的空闲连接数 |
onyx_db_pool_overflow | 仪表盘(Gauge) | 超出 pool_size 的连接数 |
onyx_api_slow_requests_total | 计数器(Counter) | 超过阈值的请求数 |
2. 索引管线指标
基础设施指标由 monitoring Celery 工作进程收集。这些指标用于监控后台任务健康状况和资源使用情况。
索引管线监控架构
关键实现细节:
- 队列长度:
_collect_queue_metrics函数使用celery_get_queue_length监控docfetching、docprocessing和vespa_metadata_sync等队列backend/onyx/background/celery/tasks/monitoring/tasks.py:145-170。 - 进程内存:
emit_process_memory使用psutil追踪各工作进程的内存使用情况backend/onyx/background/celery/tasks/monitoring/tasks.py:24-24。 - 指标发送:
Metric类提供了标准接口,用于记录日志并通过optional_telemetry可选地发送遥测数据backend/onyx/background/celery/tasks/monitoring/tasks.py:85-102。
来源:backend/onyx/background/celery/tasks/monitoring/tasks.py:1-170, backend/onyx/background/celery/celery_redis.py:22-22
健康检查与遥测
健康端点
- 存活探针:
/health(默认 FastAPI 检查)。 - 就绪状态:
/api/manage/get-state报告系统就绪状态。 - MCP 服务器:模型上下文协议(MCP)服务器包含自己的 uvicorn 入口点和追踪配置
backend/onyx/mcp_server_main.py:15-32。
遥测系统
optional_telemetry 函数负责处理匿名使用报告。在多租户环境中,它使用 uuid5 生成稳定的匿名租户标识符。
遥测数据流
来源:backend/onyx/utils/telemetry.py:99-150, backend/onyx/utils/telemetry.py:49-51
日志记录与性能追踪
Onyx 使用标准 Python 日志记录,并针对生产环境进行了特定增强:
- 结构化指标:监控任务中的
Metric模型会记录结构化 JSON,供日志聚合器入库backend/onyx/background/celery/tasks/monitoring/tasks.py:93-100。 - 键值存储:关键配置和实例元数据(如
KV_CUSTOMER_UUID_KEY)持久化存储在混合的 Postgres/RedisPgRedisKVStore中backend/onyx/key_value_store/store.py:19-30。
标准化指标日志格式:
{
"metric": "docprocessing_queue_length",
"value": 42,
"tags": {"tenant_id": "default"}
}
来源:backend/onyx/background/celery/tasks/monitoring/tasks.py:95-100, backend/onyx/key_value_store/store.py:15-53, backend/onyx/utils/telemetry.py:11-13