MohanChippala123/lineage-sre

GitHub: MohanChippala123/lineage-sre

一个基于 DataHub 血缘图谱的数据 pipeline 自主事件响应 Agent,能自动完成从故障检测、根因诊断到修复验证和知识回写的闭环。

Stars: 0 | Forks: 0

# Lineage SRE 🚨 **一个由 DataHub 驱动的、用于数据 pipeline 的自主事件响应 agent。** 当 pipeline 在凌晨 3 点发生故障时,人类数据工程师会打开 DataHub,沿血缘图谱向上游追溯,对比 schema,在 Slack 上通知 owner,修补 dbt 模型,并且——如果团队运气好的话——写下一篇六个月后没人能找到的复盘报告。 Lineage SRE 是一个能在约一分钟内完成所有这些工作的 AI agent,**并且会将其学到的知识写回 DataHub**,这样下一位工程师(或下一个 agent)就能直接继承这些知识,而不是从零开始重新诊断。 ## 闭环 ``` detect ──> diagnose ──> fix ──> verify ──> write back │ │ │ │ │ │ walks DataHub │ re-runs the raises a DataHub health lineage upstream,│ health check incident + appends check diffs model SQL │ a postmortem to the vs live schemas │ asset docs in DataHub │ generates a contract-preserving SQL fix, validates it, applies it ``` 具体来说,给定一个失败的模型,该 agent 会: 1. **复现**针对数据仓库(demo 中为 DuckDB)的故障。 2. **在 DataHub 中向上游追溯 lineage**,从失败的资产开始,对于每一跳,将模型 SQL *期望*的结构与 DataHub 中的*当前* schema 进行比较。一旦发现不匹配,就能定位根本原因(在 demo 中:供应商在原始数据流中悄无声息地将 `amount_usd` 重命名为 `amount` —— 这是典型的静默 schema 破坏)。 3. **通过向下游追溯 lineage 来衡量影响范围** —— 包括 ML 资产:demo 中的 pipeline 向一个流失模型(churn-model)的特征表及其评分输出供数据,因此 agent 会在其造成经济损失*之前*报告“你的流失模型正在基于损坏的特征进行评分”。 4. **从 DataHub 的 ownership 元数据中确定需要通知的人员**。 5. **生成一个最小修复方案**,该方案能保留下游契约(为重命名的列设置别名,而不是传播重命名),使用真实的 SQL 对其进行验证,将其作为可审查的 artifact 写入 `fixes/`,并且在带有 `--apply` 参数的情况下,应用该修复并重新验证整个 pipeline。 6. **将知识写回 DataHub**:在根本原因资产上发起一个 `DATA_SCHEMA` 事件,将复盘报告追加到资产文档中,并且只有在修复经过验证后才解决该事件。之后在 DataHub UI 中打开该数据集 —— 事件和复盘报告就会赫然在目。 ## 架构 ``` flowchart LR subgraph Agent["Lineage SRE agent (Claude tool-use loop)"] A[Diagnosis loop] end subgraph DataHub["DataHub"] L[Lineage graph] S[Schemas & properties] O[Ownership] I[Incidents] D[Docs] end subgraph Stack["Data stack"] W[(DuckDB warehouse)] M[SQL model repo] end A -- "reads: MCP Server (--mcp)\nor GraphQL (default)" --> L & S & O A -- "writes back: incidents, postmortem docs" --> I & D A -- "run_sql / apply_fix" --> W A -- "get_model_sql / propose_fix" --> M ``` 两种读取模式,一条写入路径: | 模式 | DataHub 读取方式 | 备注 | |---|---|---| | default | 内置 GraphQL 工具 | 零额外依赖,随时可用 | | `--mcp` | **官方 [DataHub MCP Server](https://docs.datahub.com/docs/features/feature-guides/mcp)** (`mcp-server-datahub`) | 通过官方服务器进行搜索、lineage、schema 和查询分析 | 回写操作(通过 `raiseIncident` 发起事件,通过 `updateDescription` 写入复盘报告)始终通过 DataHub 的 GraphQL API 进行 —— MCP 服务器专注于读取,而向图谱中贡献数据才是核心目的。 ## 快速开始 前置条件:[uv](https://docs.astral.sh/uv/) 和一个 DataHub 实例 —— 以下任意一种即可: - **DataHub Cloud 免费试用**(无需 Docker):在 [datahub.com/free-trial](https://datahub.com/free-trial/) 注册, 生成一个个人访问令牌(Settings → Access Tokens),并在 `.env` 中设置 `DATAHUB_GMS_URL=https://.acryl.io/gms` 和 `DATAHUB_TOKEN`。 - **本地快速启动**(需 Docker):`uv tool install acryl-datahub && datahub docker quickstart`, 然后默认的 `DATAHUB_GMS_URL=http://localhost:8080` 即可直接使用。 该 agent 可以在三种后端上运行(`--engine gemini|api|sdk`,从 `.env` 中自动检测): | 引擎 | 需求 | 成本 | |---|---|---| | `gemini` | `GEMINI_API_KEY`([免费,免信用卡](https://aistudio.google.com/apikey)) | 免费额度 | | `api` | `ANTHROPIC_API_KEY` | 按 token 付费 | | `sdk` | 登录 [Claude Code](https://claude.com/claude-code),无需密钥 | 包含在您的 Claude 订阅中 | ``` # 安装 git clone && cd lineage-sre uv sync # add: --extra mcp for MCP mode cp .env.example .env # point it at your DataHub instance # 端到端运行整个 story uv run lineage-sre demo ``` 或者分步进行: ``` uv run lineage-sre seed # build the demo warehouse + ingest metadata into DataHub uv run lineage-sre break # the vendor ships feed v2: amount_usd -> amount 💥 uv run lineage-sre check # health check: 3 of 4 models FAILING uv run lineage-sre diagnose --apply # the agent takes it from here uv run lineage-sre diagnose --apply --mcp # same, reading DataHub via the official MCP server ``` 然后打开 http://localhost:9002,找到 `demo.raw_payments`,查看 **Incidents** 标签页和 **Documentation** 标签页 —— agent 的工作成果已经记录在图谱中。 ## Demo pipeline ``` raw_payments ──> stg_payments ──> fct_daily_revenue (exec dashboard) raw_customers ──> stg_customers ──> churn_features ──> churn_model_predictions (production ML) stg_payments ──┘ ``` 数据集、schema、列级别类型、lineage、两个 owner(数据平台 vs. 数据分析)以及供应商数据流元数据(`feed_version` 自定义属性)都通过 `seed` 命令摄取到 DataHub 中。`break` 命令模拟了夜间数据摄取时获取到供应商静默重命名列的情况 —— DataHub 中关于 `raw_payments` 的 schema 更新了,而下游的 SQL 并未更新,导致从执行仪表板到流失模型的一切都发生了故障。 ## 示例输出 该 agent 生成的 artifact 位于 [`examples/`](examples/): - [`rca_report_example.md`](examples/rca_report_example.md) — agent 生成的完整根本原因分析(RCA)报告 - [`fix_stg_payments.sql`](examples/fix_stg_payments.sql) — 生成的保留契约的修复脚本 每次实际运行还会生成 `reports/rca_.md` 和 `fixes/.sql` 文件。 ## 它是如何利用 DataHub 的(致评委) **读取** — lineage 遍历(`searchAcrossLineage` / MCP lineage 工具)、schema 检查、ownership 查找、自定义属性(供应商数据流版本是诊断线索)、数据集搜索。 **回写** — `raiseIncident`(在根因资产上标记为 `DATA_SCHEMA` 类型)、`updateIncidentStatus`(仅在验证修复后解决)、`updateDescription`(将复盘报告追加到资产文档中)。经过 agent 处理后,图谱的状态比之前更好了:事件历史和复盘报告被永久保存在对应的资产上。 **超越开箱即用** — DataHub 为您展示 lineage;而 Lineage SRE 将其* operationalizes(运营化)*:自主实现 lineage → 根本原因 → 保留契约的修复 → 验证修复 → 形成组织记忆。 ## 仓库结构 ``` src/lineage_sre/ agent.py # Claude tool-use loop + RCA report tools.py # tool definitions & dispatch (reads + write-back actions) datahub_client.py # GraphQL reads, incidents, docs write-back, REST emitter mcp_bridge.py # official DataHub MCP Server integration (--mcp) demo_stack.py # demo pipeline metadata + break scenario warehouse.py # DuckDB warehouse, health checks, guarded SQL cli.py # seed / break / check / diagnose / demo demo/models/ # the pipeline's SQL models (dbt-style) examples/ # sample agent outputs for judges docs/ # demo video script ``` ## 许可证 [Apache 2.0](LICENSE)
标签:AIOps, DataHub, 数据工程, 数据血缘, 数据运维, 模块化设计, 自动化修复, 逆向工具