← 返回信息流

dev.to #ai短讯

构建面向 AI DevOps 事件 Copilot 的多源日志摄入系统

dev.to作者:Richard Atodo教程AI评分:50/100

介绍在构建事件调查工具时,如何将 Nginx、Kubernetes、Docker、应用日志及 GitHub Actions 等不同来源的异构数据统一摄入,以便 AI Copilot 进行联合分析。

📌 引言

构建事故调查工具的首要挑战之一,是将来自不同系统的日志转换为应用程序能够一致处理的形式。

这些日志源在结构和术语上各不相同,但事故调查系统需要将它们结合起来进行分析。

IncidentCopilot 的第三阶段重点在于构建数据摄入基础——确保应用程序能够可靠地接收、验证、标准化和持久化日志。

🔎 范围:五种日志源

  • Nginx
  • Kubernetes
  • Docker
  • 应用日志
  • GitHub Actions

每个源都有各自的解析器模块。解析器生成具有共享字段的标准化表示,包括:

  • 来源
  • 时间戳
  • 严重性
  • 服务
  • 事件类型
  • 消息
  • 元数据
  • 原始消息

特定于来源的细节保留在元数据中(例如,Nginx → HTTP 状态码,Kubernetes → 命名空间 + Pod 信息)。

⚙️ 摄入 API

方法端点用途
POST/api/v1/logs提交单条日志
POST/api/v1/logs/batch提交多条日志
GET/api/v1/logs分页列出日志
GET/api/v1/logs/{id}检索特定日志
  • 批量端点接受 1–100 条记录。
  • 特定于来源的模式用于验证传入的数据。
  • 无效的批量项目 → 在摄入前拒绝请求。

✅ 成功之处与需修复的问题

  • 实时 API 检查确认了单条和批量摄入功能正常(返回 201 Created, 200 OK)。
  • 但有一项测试失败:预期为空集合,实际得到了六条记录。
  • 原因:测试查询的是开发数据库,其中残留了实时检查留下的数据。
  • 修复:实现测试环境隔离。

🧪 隔离测试数据库

  • 创建专用数据库 → incidentcopilot_test。
  • 应用 Alembic 迁移。
  • 在 backend/tests/conftest.py 中添加 pytest fixture:测试专用的 SQLAlchemy 引擎 + 会话覆盖 FastAPI DB 依赖;每次测试后事务回滚
  1. 环境隔离 → 测试不再针对开发数据库运行。
  2. 测试隔离 → 每条测试后的记录都会回滚。

🔍 验证结果

验证项结果
首次运行27 项通过,耗时 0.88s
第二次运行27 项通过,耗时 2.00s
Alembic 检查无新的升级操作
Git diff 检查无空格错误

套件涵盖了 API、数据库连接性、健康检查、摄入验证、批量处理以及未知 ID 的处理。

🚫 本阶段未包含的功能

第三阶段 = 摄入基础。

  • 将日志关联为事故
  • 构建调查时间线
  • 查询向量数据库
  • 生成 AI 诊断

📚 经验教训

  1. 不同的源需要不同的验证规则,但应采用统一的表示形式。
  2. 实时 API 检查 ≠ 自动化测试。受控的设置至关重要。
  3. 测试隔离提高了工程质量。专用的测试数据库 + 回滚 fixture 使测试套件变得可靠。

🔮 下一步计划

下一个里程碑 → 日志标准化与关联。

这项工作将把相关事件连接到事故上下文中。AI 诊断和检索层将在稍后阶段引入。

🏁 结论

第三阶段交付了以下内容:

  • 多源摄入工作流
  • 特定于来源的解析器 + 验证
  • 保留原始证据的标准化
  • 单条和批量摄入端点
  • PostgreSQL 持久化存储
  • 可靠的测试隔离(27 项测试全部通过)

这一阶段不仅仅是关于接收日志——更是为了让基础足够可测试,从而在项目增长过程中建立信任。

🔗 GitHub: github.com/richardatodo/incidentcopilot ➡️ 下一步:第四阶段 — 标准化与关联引擎

阅读原文