OpenTelemetry 跟踪
OpenTelemetry 追踪
相关源文件
本章引用的主要源码文件:
cognee/__init__.pycognee/api/client.pycognee/api/v1/visualize/__init__.pycognee/api/v1/visualize/visualize.pycognee/modules/observability/__init__.pycognee/modules/observability/trace_context.pycognee/modules/observability/tracing.pycognee/modules/search/methods/get_retriever_output.pycognee/shared/utils.pycognee/tests/test_telemetry.pycognee/tests/unit/processing/utils/utils_test.py
OpenTelemetry 追踪为 Cognee 操作提供了性能监控、调试能力和可观测性。该系统使用 OpenTelemetry 标准捕获管线任务、数据库查询、大语言模型(LLM)调用和搜索操作的执行追踪。追踪数据会在内存中缓冲以便程序化访问,并可以选择通过 OTLP 导出到外部可观测性平台。
关于通用可观测性和使用分析,请参见遥测系统。关于通过来源字段追踪数据血缘,请参见数据来源与血缘。
追踪架构总览
Cognee 的追踪系统基于 OpenTelemetry SDK 构建,同时提供内存内追踪收集和可选的外部导出功能。
追踪系统组件
来源: cognee/modules/observability/tracing.py:1-218, cognee/modules/observability/trace_context.py:1-90, cognee/modules/observability/__init__.py:45-81
启用和禁用追踪
程序化控制
可以通过公共 API 以编程方式启用和禁用追踪。enable_tracing 会使用内存中的 CogneeSpanExporter 设置 TracerProvider cognee/modules/observability/trace_context.py:16-24。
import cognee
# 启用追踪(可选控制台输出)
cognee.enable_tracing(console_output=True)
# 禁用追踪并关闭 TracerProvider
cognee.disable_tracing()
来源: cognee/modules/observability/trace_context.py:16-32, cognee/modules/observability/tracing.py:13-27
环境变量配置
可以通过环境变量自动启用追踪。is_tracing_enabled() 函数会检查这些变量,并在请求时惰性初始化追踪 cognee/modules/observability/trace_context.py:34-62。
| 环境变量 | 值 | 描述 |
|---|---|---|
COGNEE_TRACING_ENABLED | true、1、yes | 启动时启用追踪 |
OTEL_EXPORTER_OTLP_ENDPOINT | URL | 用于外部导出的 OTLP 端点 |
来源: cognee/modules/observability/trace_context.py:34-62, cognee/modules/observability/tracing.py:7-27
CogneeSpanExporter:内存 Span 缓冲区
CogneeSpanExporter 类实现了 OpenTelemetry 的 SpanExporter 接口,并维护一个有限的内存缓冲区来存储已完成的 Span cognee/modules/observability/tracing.py:100-105。
缓冲区管理
- Span 按
trace_id分组到不同的追踪中cognee/modules/observability/tracing.py:115-133。 - 最多保留 50 个不同的追踪(
_MAX_TRACES = 50)cognee/modules/observability/tracing.py:92。 - 当超过限制时,最旧的追踪会被淘汰
cognee/modules/observability/tracing.py:138-140。 - 使用
threading.Lock()确保线程安全访问cognee/modules/observability/tracing.py:108。
Span 字典结构
导出到缓冲区的每个 Span 会被转换为包含以下字段的字典 cognee/modules/observability/tracing.py:116-132:
name:操作名称。trace_id/span_id/parent_span_id:十六进制标识符。duration_ms:计算方式为(end_time - start_time) / 1,000,000。status:OTEL 状态码名称(例如 "OK"、"ERROR")。attributes:元数据的键值对。
来源: cognee/modules/observability/tracing.py:100-168
语义属性
Cognee 定义了标准语义属性,以确保追踪之间的一致性。
V1 和 V2 属性
| 常量 | 值 | 用途 |
|---|---|---|
COGNEE_DB_SYSTEM | "cognee.db.system" | 数据库类型(例如 "kuzu"、"neo4j") |
COGNEE_LLM_MODEL | "cognee.llm.model" | 大语言模型(LLM)模型标识符 |
COGNEE_SEARCH_TYPE | "cognee.search.type" | 使用的检索策略 |
COGNEE_RESULT_COUNT | "cognee.result.count" | 检索到的项目数量 cognee/modules/observability/tracing.py:44 |
COGNEE_RESULT_SUMMARY | "cognee.result.summary" | 人类可读的结果摘要 cognee/modules/observability/tracing.py:43 |
COGNEE_SESSION_ID | "cognee.session.id" | 唯一会话标识符 |
COGNEE_GRAPH_EDGES_SYNCED | "cognee.graph.edges_synced" | 同步到会话的边数量 |
来源: cognee/modules/observability/tracing.py:32-58
在检索和 Memify 中的集成
追踪深度集成到搜索和记忆系统中,以提供对检索性能和数据流的可见性。
检索追踪
get_retriever_output 函数使用多个 Span 来追踪搜索过程的不同阶段 cognee/modules/search/methods/get_retriever_output.py:19-89:
cognee.retrieval.get_objects:追踪从数据库原始检索数据的过程cognee/modules/search/methods/get_retriever_output.py:35-45。cognee.retrieval.get_context:追踪从检索对象中提取上下文的过程cognee/modules/search/methods/get_retriever_output.py:51-60。cognee.retrieval.get_completion:追踪大语言模型(LLM)生成阶段cognee/modules/search/methods/get_retriever_output.py:66-79。
来源: cognee/modules/search/methods/get_retriever_output.py:33-76
检索和分析追踪
追踪检索 API
get_last_trace():返回缓冲区中最近完成的追踪cognee/modules/observability/trace_context.py:65-73。get_all_traces():返回所有缓冲的CogneeTrace对象列表cognee/modules/observability/trace_context.py:76-82。clear_traces():重置内存缓冲区cognee/modules/observability/trace_context.py:85-89。
CogneeTrace 类
CogneeTrace 类提供对追踪 Span 的只读视图 cognee/modules/observability/tracing.py:172-175。
spans():返回按start_time_ns排序的 Span 字典扁平列表cognee/modules/observability/tracing.py:178-180。summary():返回聚合字典,包含总持续时间、Span 数量和错误列表cognee/modules/observability/tracing.py:182-203。
来源: cognee/modules/observability/trace_context.py:65-90, cognee/modules/observability/tracing.py:172-218
密钥脱敏
为防止在追踪中泄露敏感信息,Cognee 使用了 redact_secrets() 函数。该函数使用正则表达式模式识别并掩码类似 API 密钥(例如 OpenAI sk-...)、Bearer 令牌和密码的字符串 cognee/modules/observability/tracing.py:63-78。
来源: cognee/modules/observability/tracing.py:61-78
系统流程:追踪收集
此图连接了追踪生命周期中涉及的代码实体,特别聚焦于搜索流程。
来源: cognee/modules/observability/trace_context.py:16-73, cognee/modules/observability/tracing.py:100-157, cognee/modules/search/methods/get_retriever_output.py:33-76