您的位置首页 >人工智能 >

为数十亿事件建 Agentic Knowledge Graph复现 Netflix 本体驱动可观测性的关键决定

我先核对 Netflix 侧关于知识图谱、本体驱动可观测性的公开材料,以及 “数十亿事件” 规模下的图存储和 Agent 查询实现细节。

核心材料已经找到,来自 Netflix 官方的 Observability Ontology 分享。我再补一下原始博客里的分层管道、QuipuDB 存储细节和 AutoRCA 的边界。

Netflix 这套系统真正做的事,是先把 “事件背后有哪些实体、它们怎么关联” 变成一份机器能查的事实表,而不是把每秒 3800 万条日志全部塞进图数据库。原始事件仍然留在 MELT 采集层,图里存的是应用、事故、发布、告警、变更、讨论这些实体,以及它们之间的 ownedBy、deployedIn、affects、precededBy 关系。规模数字只是背景:每天 20 亿次以上请求、每秒 3800 万条实时日志、2024 年 11 月那场拳赛约 6500 万并发流;真正拖慢排障的是四个小时里大部分时间花在 “把 application、service、cluster 对上号”,而不是算不动。

复现它并不需要先买一个巨大的图集群。按公开材料还原,关键决定只有六个:先定身份再建图、拒绝泛化的 Service 类型、用类型系统约束 LLM、把富化管道顺序化、把相关性当成带证据的假设、让 Agent 只提议不拍板。下面按这六条拆开讲,并给出一个中小团队能落地的版本。

先把规模算清楚:38M / 秒 不是图的写入量

按每秒 3800 万条折算,一天约 3.28 万亿条日志事件。这个量级全量入图,写入放大和查询成本都无法接受,而且绝大多数事件对 “根因” 没有边际价值。Netflix 的做法是先分四层,再把每层产出收敛成事实:

MELT 层回答什么问题图上留下什么
Metrics指标是否偏离基线异常节点、时间窗、严重度
Events发生了什么发布、配置变更、扩缩容、实验
Logs具体错在哪错误模式、样本引用、首次出现时间
Traces调用链哪一跳慢端到端瓶颈、服务依赖边

这张表解释了一个常见误解:Agentic Knowledge Graph 不是 “事件的数据库”,而是 “事件语义的索引”。事件本身留在时序库和日志系统,图负责回答 “这次发布影响了哪些应用、哪些事故和它同一时间窗、谁在 Slack 里提到过类似现象”。

四小时里,三小时在 “对不上号”

一个首页渲染慢 1.5 秒的回归,嫌疑面可以横跨客户端版本、A/B 实验、基础设施限流、六跳下游的 GraphQL 服务。每个系统单独看都自洽,合起来就互相不认识:Atlas 里叫 application,Radar 里叫 service,另一个系统里叫 cluster,名字还差一个后缀、大小写不同,或者只有两个老员工记得改过名。

Netflix 用六个三元组把这类问题压成一次查询:

api-gateway rdf:type ops:Application .

api-gateway ops:ownedBy "Team Bedrock" .

api-gateway ops:deployedIn "us-east-1" .

INC-5377 rdf:type ops:Incident .

INC-5377 ops:affects api-gateway .

INC-5377 ops:severity "SEV 2" .

“Team Bedrock 在 us-east-1 的应用,最近被哪些事故影响?” 原来要查事故系统、发布系统、告警系统三处,现在是一条 SPARQL。省下来的不是计算时间,是人在三个界面之间来回确认实体身份的时间。

本体的两个硬决定

第一个决定是拒绝泛化的 Service 类型。官方给出的理由是:Service 在他们的工具链里有四种不同含义,混在一起就永远 join 不上。所有应用统一收敛为 ops:Application,创建实体前必须过一遍约 4.9 万条的软件目录;用户名、团队名、从网络拓扑里抓来的依赖名,一律不允许变成 application。依赖边还做了双向上限,否则一个热门服务的反向依赖能有几千条,直接把图查询拖垮。

第二个决定是把 “人的推理” 也建模。事故频道里被否掉的假设、最后生效的缓解措施、谁知道为什么,这些信息在频道静默后就蒸发了。Netflix 把一条 200 条消息、50 个人、15 个服务的事故频道,转成有序三元组。遥测记录系统做了什么,讨论记录人理解了什么,后者对下一次排障往往更值钱。

实体关键属性关系
Application名称、负责团队、区域ownedBy、deployedIn、dependsOn
Incident严重度、状态、时间affects、causedBy、resolvedBy
Deployment版本、时间、变更单deployedTo、precededBy
Alert阈值、触发时间triggeredFor、correlatesWith
Discussion频道、参与者、结论discussedIn、proposedHypothesis

五层熵减:让随机工具产出确定图

LLM 摘要、模糊匹配、概率因果链,单看每一个都不稳定。Netflix 的处理思路是把管道当成一架 “熵减梯子”:每一层都只允许输出被类型系统约束过的东西,单层随机,串起来却能得到确定的图。

官方公开材料详细展开了 Enricher 这一层,契约很窄:

class Enricher:

async def _enrich_async(self, ...):

raw = await self.fetch(...) 读噪声输入

result = self.analyze(raw) 处理,可能随机

graph.add((uri, RDF.type, OPS.X)) 只发有类型的三元组

graph.add((uri, OPS.pred, Literal(result.value)))

return EnrichmentResult(success=True, triples_added=count)

三个不变量贯穿所有 enricher:每个实体必须有 rdf:type;每个 URI 遵循同一套命名;每个 ops:Application 必须过软件目录。LLM 可以自由生成一段散文,但它不能发出违反类型系统的三元组。分类字段被枚举卡死,比如 category 只能是 incident、question、discussion、decision,sentiment 只能是 positive、neutral、negative、urgent。

顺序执行是另一个容易被抄错的地方。管道按 “加载图、写三元组、保存” 串行推进,牺牲了墙钟时间,换掉了整类竞态条件。对外部指标、日志、事件系统的调用是 best-effort,慢接口只让这一轮富化降级,不能阻塞整条 harvest。

相关引擎:13 类信号、10 分钟窗、0.6 阈值

相关引擎读十三类信号:日志错误、指标异常、慢 trace 与失败 trace、告警、事故、发布、配置变更、实验、自动扩缩容、提交、端到端瓶颈、错误模式。它不直接下结论,只找路径。

有些有序对是已知因果,带高先验权重:发布在日志错误之前、配置变更在指标异常之前、失败 trace 在事故之前。其余高相关组合被当作相关链,按时间接近程度和严重度打分,窗口十分钟,低于 0.6 置信度的链直接丢弃。一条 0.87 的链是 “强假设”,不是 “答案”;链和支撑它的图记录一起落库,消费方能看到这个分数是怎么来的。

这套设计的价值在于可反驳。工程师拿到的是 “发布 A 之后 90 秒,服务 B 的 P99 上升,和事故 C 同窗”,而不是一句 “可能是发布导致的”。前者能验证,后者只能猜。

存储与查询:QuipuDB 与 Turtle 的两个细节

图存在 QuipuDB,Netflix 自研的分布式 RDF quad store,底层是 Rust 的 redb 嵌入式 KV。选 RDF 而不是属性图,主要是为了 W3C 那套标准:RDF 做数据模型、OWL 做本体、SHACL 做校验、SPARQL 做查询,换存储时模型可迁移。

SHACL 的作用被很多人低估。它能把业务规则写成约束,比如 “服务可以在 AWS 上终止,但如果容量占比超过 10%,就不允许终止”。这类规则放进本体,Agent 在提议动作时会被直接挡回来,不需要靠提示词提醒它 “别乱删”。

每次 harvest 还会产出一份完整的 Turtle 序列化用于归档。官方说这个 “人类可读、可 diff” 的副产物,在调试时比他们预期的更有用。对复现者来说,这相当于给图加了一层可审计的快照,出问题能回放。

Agent 层:AutoRCA 把本体当接口

AutoRCA 是一组专家 Agent 围着一个问题转,分别看 trace、日志、发布、配置。它们不互相交换自由格式的结论,而是都读写同一套本体。做 trace 的团队把发现写成关于 ops:Application 的三元组,做日志的团队读同一个 ops:Application,两边不需要知道对方的存在。新加一个专家,学一次词汇表,就能读到前面六类专家写下的全部内容。

这条设计比 “多 Agent 互相聊天” 稳的地方在于:接口是 schema,不是自然语言。自然语言会漂移,schema 不会。

边界也很明确。告警照样在下午 3:30 触发,工程师照样要权衡证据,修复照样得由懂代码的人写。Agent 压缩的是 “找负责团队、还原发布、跨系统对齐、回忆上次类似事故” 这一到两个小时。官方承认排序假设有时会错,所以每条假设都必须带证据。

复现路线:从一个域、五个实体开始

阶段做什么产出别做什么
1选一个域,比如 “首页渲染” 或 “支付失败”域内实体清单一上来铺 12 个命名空间
2定权威目录应用清单、团队清单让 LLM 自由发明实体名
3建最小本体5—8 个类、10—15 个关系建万能 Service 类型
4先做确定性 enricherID、URL、时间戳、目录校验先上 LLM 做分类
5加受约束的 LLM 分类枚举字段、置信度让模型自由写三元组
6接相关引擎3—4 类信号、10 分钟窗把相关当因果
7接只读 AgentSPARQL 工具 + 证据返回给 Agent 写权限
8本体当代码管版本、评审、SHACL 测试让本体散落在文档里

存储不必照抄 QuipuDB。支持 RDF/SPARQL 的 Oxigraph、Apache Jena TDB2、Blazegraph 都能起步;如果团队已经在用属性图,Neo4j 也能做,但要把本体和约束层单独补回来,否则会退化成 “一张有关系的表”。AWS 的语义层方案给了另一种思路:用虚拟知识图把关系库、数仓、数据湖联邦起来,Neptune 存物化三元组,DB Streams 触发推理,不必把数据全部搬进图。AWS

规模化取舍:四个必须提前定的选择

选择偏保守偏激进建议
入图范围只入窗口聚合后的事实原始事件全量入图先聚合,按查询需求补样本
富化顺序串行,后写读先写全并行串行,慢接口 best-effort
本体变更PR 评审 + SHACL 回归线上直接改当代码管
Agent 权限只读 + 提议直接执行修复人类审批,先跑影子模式

最容易踩的六个坑

  • 把图当事件库。 写入放大先拖垮存储,再拖垮查询。图要存语义,不存流水。
  • 先上 LLM 再定本体。 输出无法校验,最后得到一堆看起来像知识、实际不可查的文本。
  • 保留泛 Service 类型。 四套语义混在一个类里,跨系统 join 永远对不上。
  • 并行跑 enricher。 后写的读不到先写的,关系链断裂,还很难复现。
  • 把 0.87 当结论。 置信度只是排序依据,证据链必须一起返回。
  • 没有权威目录。 用户名、团队名、拓扑抓来的字符串都会变成 “应用”,图很快被污染。

Netflix 官方在文末给了八条原则,最值得抄的是三条:身份先于一切、本体当代码、用类型系统约束随机工具。其余五条 —— 概念与实例分离、开放标准、富化有序且 best-effort、把人的推理一起建模、人类保留审批权 —— 决定了这套系统能不能从 demo 长成基础设施。

这套架构也不是没有争议。Hacker News 上的讨论就指出,原文提出了 1.5 秒的延迟问题,却没有给出改造前后的量化对比;还有人对 “全局本体是否必要” 提出质疑,认为 Agent 直接调工具、按需拼 schema 也能达到类似效果。这些质疑成立,所以复现时更应该先做一个可测量的子域,用 “排障时长、跨系统查询次数、假设命中率” 三个指标验证,而不是先论证本体有多优雅。Themata.AI

【常见问题】

问题 1:为数十亿事件构建 Agentic Knowledge Graph,真的要把每条事件都存进图吗?

回答 1:不用。每秒 3800 万条是采集层量级,为数十亿事件构建 Agentic Knowledge Graph 存的是事件背后的实体和关系;原始事件留在 MELT 层,图里只保留窗口内的事实、证据和引用。

问题 2:Netflix 的本体驱动可观测性,为什么拒绝泛 Service 类型?

回答 2:因为 Service 在四套工具里含义不同,混在一起就无法跨系统对齐。Netflix 的本体驱动可观测性要求应用只解析为 ops:Application,并用约 4.9 万条软件目录校验,未通过校验的字符串不能成为应用。

问题 3:复现 Netflix 式本体驱动可观测性,最少要投多少人?

回答 3:先做一个域,2—3 人够用:一人管本体与 SHACL,一人管 enricher 与采集,一人管 SPARQL 查询和只读 Agent。复现 Netflix 式本体驱动可观测性的关键不是人数,而是先定权威目录,再谈图的规模。

问题 4:Agentic Knowledge Graph 里的 Agent 能自动修故障吗?

回答 4:Netflix 目前让 Agent 产出带证据的排序假设,人类仍是审批者。Agentic Knowledge Graph 压缩的是拼上下文的时间;自动修复还在演进,官方也只把自动缓解列为下一步,没有放开执行权。

【参考资料】

[2026-11-13](Netflix Turns Operational Data Into a Knowledge Graph for AI-Driven Observability)InfoQ

[2026-10-25](Netflix Builds Observability Ontology and RDF Knowledge Graph to Cut 4-Hour Troubleshooting)XTrends

[2026-10-19](Ontology-Driven Observability: Building an End-to-End Knowledge Graph at Netflix)Themata.AI

[2026-10-18](Netflix Observability Team Discusses Ontology-Driven Knowledge Graph for E2E Monitoring)BrevFeed

[2026-10-16](Ontology-Driven Observability: Building an End-to-End Knowledge Graph at Netflix Scale)Netflix Technology Blog

[2026-10-09](Ontology‐Driven Observability: Building the E2E Knowledge Graph at Netflix Scale)InfoQ

[2026-10-09](From Reactive Alerts to AI-Driven Ontology: Netflix's Knowledge-Graph Observability Stack)CloudNinjas

[2026-05-20](Event Streams vs Centralized Ontologies for Agentic AI)Scalytics

免责声明: 本文依据 Netflix Technology Blog 原文、InfoQ 报道与公开技术文档整理,架构描述与复现建议包含基于公开材料的工程推断,Netflix 未公布完整实现细节与改造前后的量化收益;不同团队的规模、技术栈和合规要求差异较大,落地前请以自有压测和灰度验证为准,本文不构成架构选型或采购建议。

今日大家都在搜的词: