Audit Agent¶
Audit Agent 创建和执行可复用的健康检查 Profile。设计一次检查,每天运行 — 每次获得结构化 Markdown 报告。
功能声明
| ID | 声明 | 状态 |
|---|---|---|
| C-NE-32 | olav --agent audit "创建 BGP 健康检查" 引导 Profile 创建 |
🔶 需 LLM |
| C-NE-33 | olav --agent audit "执行 bgp-health 审计" 输出 Markdown 健康报告 |
🔶 需 LLM |
| C-NE-34 | Designer 在写入 SQL 前验证表名和列名真实存在 | ⬜ 待验证 |
| C-NE-35 | analyze_thresholds 提供 P50/P90/P95 统计推荐值 |
🔶 需 LLM |
架构¶
Audit workspace 包含两个子 agent 和一个编排器:
graph TD
User["olav --agent audit '...'"] --> Orch[Audit Orchestrator]
Orch -->|"创建 profile"| Designer[Designer Agent]
Orch -->|"运行审计"| Auditor[Auditor Agent]
Designer -->|保存| Profile[profiles/*.md]
Auditor -->|读取| Profile
Auditor -->|输出| Report[Markdown 报告]
| Agent | 角色 |
|---|---|
| Designer | 创建和修改审计 Profile(SQL 查询 + 阈值) |
| Auditor | 执行 Profile 并渲染健康报告 |
创建 Profile¶
Designer 引导你完成:
- 检查什么 — 查询哪些表/视图(如
v_bgp_neighbors_auto) - Schema 验证 — Designer 在写入任何 SQL 前验证表名和列名存在于 DuckDB
- SQL 查询 — 参数化查询,
:window占位符用于时间范围 - 阈值 — 可选:使用
analyze_thresholds从历史数据获取 P50/P90/P95 推荐 - 保存 — Profile 以 YAML frontmatter + Markdown 格式写入
profiles/<name>.md
Profile 格式¶
---
name: bgp-health
version: 1
description: BGP 会话健康检查
schedule: daily
---
## Job: Down Neighbors
```sql
SELECT device_name, neighbor_ip, neighbor_as, state
FROM v_bgp_neighbors_auto
WHERE state != 'Established'
AND snapshot_id = (SELECT MAX(snapshot_id) FROM netops.parsed_outputs)
severity: high max_findings: 50
执行是两阶段 Map-Reduce 流水线:
阶段 1:Map(map_engine)¶
- 加载 Profile
- 执行每个 job 的 SQL 查询
- 收集结果,遵守
max_findings_per_job - 输出分段 JSON(每个 job 一个 section)
阶段 2:Render(render_report)¶
- LLM 将每个发现渲染为可读 Markdown
- 关联分析(Correlation Pass)添加执行摘要
- 最终输出:完整 Markdown 健康报告
报告示例¶
# BGP 健康报告 — 2026-04-06
## 执行摘要
24 个 BGP 会话中 3 个未处于 Established 状态。
所有受影响会话在设备 R3(AS 65003)上。
## Down Neighbors(严重度:高)
| 设备 | 邻居 IP | 对端 AS | 状态 |
|------|---------|---------|------|
| R3 | 10.0.0.1 | 65001 | Active |
| R3 | 10.0.0.5 | 65002 | Idle |
| R3 | 10.0.0.9 | 65004 | Active |
### 分析
三个会话均来自 R3。可能原因:
- R3 管理面问题(所有对端受影响)
- ACL 阻止 R3 上的 TCP 179
- R3 上行链路物理故障
Designer 工具¶
| 工具 | 用途 |
|---|---|
database_introspection |
列出 DuckDB/LanceDB 表和列 |
test_map_query |
用样本数据试运行 SQL(保存前预览) |
analyze_thresholds |
数据驱动的 P50/P90/P95 统计阈值推荐 |
save_profile |
验证 YAML schema 并写入 Profile |
read_profile |
加载已有 Profile 用于编辑 |
append_jobs |
向已有 Profile 追加检查项 |
Auditor 工具¶
| 工具 | 用途 |
|---|---|
map_engine |
执行所有 Profile job,生成 JSON 结果 |
render_report |
LLM 渲染各 section + 关联分析 → Markdown 报告 |