语义管理界面方案(第 1b 期)
docs/plans/semantic-phase1b-implementation.md)
- 菜单:「语义管理」改为一级分组,只展开收起;二级菜单「语义库」进列表
/sem/libraries,库详情/sem/libraries/:libraryId/...,面包屑「语义管理 / 语义库」。取代第三版的「菜单只留一项」和第 2 节表里的「只注入一项」。 - 命名:界面统一叫「语义库」,建库时必选类型,目前只有「运维」。下文的「运维语义库」即类型为运维的语义库。
- 建库不填时区,新库缺省
+08:00。以后如开放时区设置,放到各主题的设置里,不放库级。 - 概览与设置里的库级「公共处理设置」改为「遮罩设置」,只编辑遮罩。
business-flow.html 第 11 节,2026-10-10 实施;模板生成方案 T1–T19,见 ../template-generation/design.html,2026-10-11 实施。与下文冲突时以这里为准;下文的示意图仍是第四版,没有重画)
- 「遮罩」改叫「脱敏」:概览与设置里的卡片叫「脱敏设置」,加一行说明它与生成模板时的变量剔除是两回事(D1)。
- 「列映射」页改为「全局提取规则」:一个监控系统范围一张表,不再分「分组前使用」「对象默认取法」两个页签;预览后保存即生效,没有待确认;首次接入在一份上传文件上预填内置候选列(D2、D3)。4.10 节作废。
- 没有「候选」,也没有「默认推断」:全局取到的值直接生效,告警对象只有生效、作废两种状态;没有已确认规则的分组规则状态显示「仅全局」(D3)。4.9 节作废。
- 解析规则抽屉每个字段左边是全局规则(灰色,标「来自全局」),右边是本模板规则;分组标「缺对象」,连续驳回两次的标「转人工」(D3、D4、D9)。2026-10-11 起:列表多选模板「合并」→「确认合并」一步生效,父节点一行(模板号
m:开头)、展开看成员,在父节点抽屉里撤销;抽屉里「标记为噪音 / 取消」,填说明后立即生效,列表标「噪音」;可按模板号一次查多个。 - 告警主题下去掉「噪音」页签:没有噪音标注、噪音确认依据和噪音试算(模板生成方案第 6 节)。4.11 节作废。
- 待确认的页签只剩五个:解析规则、模板合并、对象关系(原「依赖候选」)、语义约定、谓词;去掉冲突、噪音、列映射(模板生成方案 T18)。「模板合并」抽屉里看成员的展示文本与样本、依据、证据,确认或驳回。
- 告警主题 › 设置末尾加「模板生成」卡片:相似度阈值、关键词序列开关、受保护的错误码、占位符(可调顺序)、分词正则、三类关键词,内置值预填;在保留样本或一份上传文件上预览;库里有 kb 生成的模板时保存要输库代号、换一代(模板生成方案第 4 节)。
- 2026-10-11 第二次(用户定):规则抽屉的页签是「规则与预览、相关告警、变体、历史」。「相关告警」把原来的「样本」和「统计与命中率」合在一起,上面是落到这个模板的告警按天的条数(只计上传声明的时段,保留最近一次导入日往前 34 天),下面是保留的样本;字段命中率改为「规则与预览」字段表的「取值率」列(已确认的本模板规则取到值的比例)。变体是剔除变量后的文本,表格展示,只列最近出现的 100 个。
- 2026-10-11 第二次(用户定,算法包 2.2.0):去掉通用调用失败词和从正文抽调用目标,静态阶段没有未解析目标。下文 4.7 节的「未解析目标」视图、4.8 节规则抽屉的「未解析目标」页签与「只看未解析目标」筛选、4.9 节设置里的「引用停用词」都已去掉;调用目标改由解析规则的
relations写明,治理阶段再定怎么展示。 - 2026-10-11 第三次(关系提取规则 R1–R13,见
../relation-rules/design.html,已实施):告警对象下的子页签依次是对象、主机、系统、关系。对象列表去掉「所在主机」「所属系统」两列、按系统与监控系统的搜索和「显示辅助对象」开关,类型按objectType字段,下拉列库里现有的类型;「主机」「系统」是host、system字段取到的值的去重列表(值、告警数、首次、最近);关系页是五段文本(起点、起点类型、关系、终点、终点类型),按关系、起点或终点包含、状态、来源模板号筛,来源写解析规则的模板号和版本。对象抽屉的关系页按文本相同关联,去掉「两跳邻居」。规则抽屉去掉「对象类型」下拉,字段表下面加「关系提取」列表(名称、起点、关系、终点、两个类型,每项可选原始列、固定值,其余在 JSON 写),试算的样本逐条显示拼出的关系和哪条规则缺哪段。解析规则列表去掉按对象类型筛和「纵向关系」列,「横向关系」列换成「关系提取」。待确认去掉「对象关系」页签,只剩解析规则、模板合并、语义约定、谓词四个。下文 4.7、4.8 节与此冲突的以此为准。 - 2026-10-11 第四次(用户定:实际数据里用不到):去掉站点,设置页没有「站点取法」卡片,全局提取规则和字段表里没有「站点」(算法包 2.4.0,kb 迁移 0094)。规则抽屉「相关告警」上面的「告警数量」改为「告警统计」:首次出现、最近出现、统计天数、统计告警数几张卡片(按重复次数计的条数不同时多一张),统计口径放在卡片标题的提示里,下面仍是按天的条数和样本。同日统计不再按 34 天清理(用户定),上面第二次那条里的「保留最近一次导入日往前 34 天」作废。解析规则列表去掉「缺对象」标记,紧跟模板号显示告警数、对象数(取到对象的告警条数)、去重对象数三列(用户定)。「相关告警」的卡片是首次出现、最近出现、统计天数、统计告警数、无对象告警数(值调小、不换行);按天的表是日期、告警数、对象数、去重对象数和各小时告警数,后者是固定 24 格的柱状图,各天同一刻度,悬停看每小时条数。概览的「告警主题」只留告警数、对象数、主机数、系统数、模板数五个数(后四个是去重数);「近 28 天摄入覆盖」(每天 24 小时里有几个小时被上传的数据覆盖,基线据此判断完整日)不再显示,换成最近一年的日历:一格一天、按周成列,颜色是当天新增的模板数(同一色相四档,按有新增那些天的四分位切,最多的那天最深),悬停看当天的新增模板、告警数、模板数、对象数、无对象告警数;缺对象的提示条去掉。
- 语义约定(4.5 节、图 4):先讲它存什么、和解析规则怎么分;列表主列改为「写法 → 指什么」,加「谁用它」「影响」两列,影响是逐条去掉约定重跑实测的;正则挪进抽屉的规则细节。
- 噪音(4.11 节、新增图 10):讲清是什么、为什么要、谁写;用去掉产品标签的虚构数据实测有无标注的差别;确认时依据由人填,智能体写的只作描述。
- 菜单只留一项「语义管理」,点进是运维语义库列表,再进某个库;概览与设置、待确认、语义约定、谓词、告警主题都在库详情页里,照知识库管理「列表 → 进库」的做法。只有一个库时也不跳过列表。取代第二版的「平铺菜单 + 页头切换库」。
- 告警主题里恢复独立的「告警对象」,含对象、关系、未解析目标三个视图,并留出以后 CMDB 对账的位置。解析规则的预览保留,两边互相跳转。
- 字段按列的性质分两层:分组前就要用的列在库级「列映射」里配;对象、主机、系统这类含义随模板变的字段,归各模板的解析规则。
- 没有确认规则的分组也写入对象和关系,标「候选」;规则确认后转「生效」(4.9 节)。
- 「分组与模板」改为「解析规则」,每条规则带预览:样本逐条、累积产出、确认后的变化。
本文定平台前端「语义管理」的页面结构和交互,供第 1b 期实施;第 8.2 节列出每个页面用到哪些 kb 接口(契约在设计文档第 7.7 节),第 8.3 节列出界面讨论带来的设计改动写在设计文档哪里。读者是确认方案的用户,以及第 1 期、第 1b 期的实施者。
示意图的数据来自共享算法包的虚构数据生成器(aimp-kb backend/app/semantic/alertalgo/synth.py,seed 7):
生成器只产出一批约 2 小时的告警(2026-03-02 08:00:06 至 09:55:35,6 个监控系统)和一份语义库 JSON,库里 4 组模板规则已确认、1 组待确认。另外几个状态是把这份 JSON 改一处再重跑得到的,图注里写明改了什么:全部规则改成待确认(闸门流程第 4 步的状态)、加一组 L-DB 的规则。图中按设计补画、没有实测依据的内容标 示意:第二个运维语义库、L-DB 规则的提议本身、主机命名约定的待确认状态、谓词取值(算法包 1.0.0 还没有 predicate)、shared_version。第 1 期 kb 还没有接口,对象类型计数、候选与生效的划分、证据条数按设计规则从虚构数据推算,标 推算。
图 1 画整页,左侧是 224px 侧栏(aimpLayout.css 第 305 行 --aimp-sider-w)。其余各图只画内容区,宽 1216px,即 1440px 窗口减去侧栏。橙色虚线框是正文讨论的位置。
1. 要解决的问题
运维语义库由治理智能体写入规则,人确认后生效(设计第 4.1 节)。第 1b 期的界面要让下面三类操作在平台里完成:
- 建库和配置:建运维语义库;配处理设置(时区、遮罩、范围过滤、监控系统取法等),保存即生效。
- 确认规则:处理治理智能体提交的解析规则、列映射、语义约定、噪音、依赖候选,以及摄入时发现的冲突。确认前要能看到规则在样本上解析成什么、产出了哪些对象和关系、确认后会变什么。
- 查看与排查:回答「这条告警为什么被解析成这样」「这台主机有哪些标识、上面运行哪些实例」「哪几个小时还没摄入」。
第 1b 期的闸门(交接第 5 节)是本地起平台和 kb,用虚构数据走通建库 → 上传 → 摄入 → 确认。治理智能体第 3 期才有,所以界面要自带三个设计里没写的入口:手工上传并摄入(4.12 节)、列映射编辑(4.10 节)、导入语义(4.3 节、第 5 节)。
2. 参照:平台里现有的两种做法
| 项 | 现有做法 | 语义管理 |
|---|---|---|
| 菜单注入 | 代码管理 sharedCodeMenu.js:ODC 菜单树里没有 /code 时前端补一组,挨着 /kb 插入;开关 CODE_ENABLED(server/src/services/settings/index.ts 第 41 行,AimpLayout/index.jsx 第 105 行) | 同样做法:新文件 sharedSemanticMenu.js,插在 /code 之后;开关 SEM_ENABLED。只注入一项 |
| 容器 | 知识库管理:「知识库列表」(/kb/list)点进 /kb/:kbId;库页顶部「返回知识库」按钮、库名、所属团队标签,库内用一排按钮切「文档 / 检索和问答测试 / 回答设置」(KnowledgeBaseDocuments.jsx 第 140–175 行) | 照做:运维语义库列表 → 库详情,库内一排页签 |
| 页内再分视图 | 代码管理「交易诊断」一页 5 个 Tab(DiagnosisList.jsx),业务解释 Tab 里还有一组按钮切「列表 / 队列」(ExplanationsPanel.jsx) | 告警主题页签里,再用一组按钮切 6 个视图 |
| 页面骨架 | MainCard 内:h2 标题、一行说明、筛选行、表格;详情用抽屉(ServiceDrawer、TransactionDrawer) | 相同 |
| 待确认数 | 显示在 Tab 标题旁,如「业务解释(3)」;菜单不加徽标;取不到就不显示 | 相同;库列表每行也显示 |
| 确认动作 | ExplanationsPanel.jsx:状态筛选(全部、待确认、已确认、已驳回);每行「确认」「编辑后确认」「驳回」;「全选本页可确认项」与「批量确认(N)」 | 动作与文案沿用。另加:规则分层显示;预览(样本逐条、累积产出、确认后的变化) |
| 团队权限 | 按钮按后端返回的 canManage、canDelete、canShare 渲染(ServiceList.jsx 第 71 行;docs/kb-code-team-permissions.md 第 2.2 节);知识库页标题旁显示所属团队 | 相同,见第 6 节 |
3. 结构决定
3.1 菜单与库的层级
数据上,运维语义库是容器:语义约定、谓词、待确认、告警主题都属于某一个库,一个企业可以建多个库(设计第 4.2 节)。界面要让这个层级看得见。
| 候选 | 做法 | 代价 |
|---|---|---|
| A 平铺菜单,页头切换库(第一、二版) | 菜单 5 项:概览与设置、语义约定、谓词、待确认、告警主题;当前库放在页头的切换器和 URL 参数里 | 菜单看起来像这几样是全局的,库这一层藏在切换器里;有多个库时容易在错的库里确认。用户 2026-10-08 否决 |
| B 三级菜单 | 语义管理 → 运维语义库 → 4 项;语义管理 → 告警主题 → 4 项 | 菜单项是固定路径,三级菜单同样表达不了「属于哪个库」;平台现有菜单最多两级,第三级的样式没验证过 |
| C 每个库一个菜单节点 | 语义管理 → 演示环境(demo)→ 5 项;菜单按库的数据动态生成 | 菜单树也是路由白名单(useShell.js 的 isPathAllowed),按数据生成要先拉库列表;别的团队可见的库也会进菜单,库一多菜单就长 |
| D 一项菜单,列表 → 库详情(用户 2026-10-08 选定) | 菜单只有「语义管理」,路径 /sem,是运维语义库列表;点一行进 /sem/<库 ID>/…,库详情页顶部一排页签:概览与设置、待确认、语义约定、谓词、告警主题 | 只有一个库时每次多点一次(用户确认不跳过)。告警主题里是两层切换:库内页签、主题内按钮组 |
D 的好处:
- 库详情页标题就是库名,库内的东西都在它下面,层级看得见。
- 库 ID 在路径里,分享出去的链接指向确定的库,不需要切换器和「上次选的库」这套逻辑。
- 以后加指标主题,库详情多一个页签,菜单不变。
- 侧栏不用改:
/sem/<库 ID>/…以/sem开头,useShell.js的resolveSelection取最长前缀,「语义管理」保持选中;isPathAllowed同样按前缀放行。
只有一个库时也显示列表,不自动进库(用户 2026-10-08 确认):建库、看各库的待确认数和基线天数都在列表上,自动跳转会让人找不到列表。
3.2 库内的组织
| 库内页签 | 路径 | 内容 | 节 |
|---|---|---|---|
| 概览与设置 | /sem/<库>/overview(进库的缺省页) | 库信息、版本、各主题卡片、待确认合计、公共处理设置、导入与导出 | 4.3 |
| 待确认(N) | /sem/<库>/review | 本库各主题的待确认项,按种类分页签 | 4.4 |
| 语义约定 | /sem/<库>/conventions | 标识规则、术语 | 4.5 |
| 谓词 | /sem/<库>/predicates | 本库的谓词表 | 4.6 |
| 告警主题 | /sem/<库>/alert/<视图> | 按钮组切 6 个视图:告警对象(缺省)、解析规则、列映射、噪音、任务、设置 | 4.7–4.13 |
告警主题的 6 个视图里,「告警对象」排第一〔拟〕:进入告警主题先看到抽出了什么;负责治理的人日常从库内的「待确认」进去,用不到这个缺省页。
「告警对象」和「解析规则」看的是同一批数据的两面:解析规则从规则看产出,确认在这里做;告警对象从产出回看规则,回答「抽出来的对象和关系有哪些、来自哪些规则、和 CMDB 是否一致」。两边互相跳转。
3.3 在哪里确认
| 候选 | 做法 | 代价 |
|---|---|---|
| A 只在待确认页 | 其他页面只读 | 看解析规则时发现不对,要换到待确认页再找同一项 |
| B 只在各自页面 | 解析规则在解析规则视图里确认,约定在语义约定里确认 | 确认项分散在 7 张表里,没有一处能看到全部待办 |
| C 两处入口,同一个抽屉(推荐) | 库内「待确认」页签按种类列出本库全部待确认项;各页面里处于待确认的行也能打开同一个抽屉 | 7 种抽屉都要能脱离所在页面单独打开,kb 要能按 ID 取单项 |
推荐 C。代码管理的业务解释是在列表里就地确认(ExplanationsPanel.jsx);语义管理多一个汇总页,因为确认项分在 7 张表里。
| 名称(代号) | 所属团队 | 主题 | 待确认 | 最近摄入 | 基线 | 可见范围 | 状态 | |
|---|---|---|---|---|---|---|---|---|
| 演示环境(demo) | 演示团队 | 告警 | 3 | 03-02 09:55 | 0 天 | 全部团队 | 启用 | 进入 |
| 子公司 B(corp-b)只读 示意 | 团队 B | 告警 | — | 03-01 23:00 | 7 天 | 全部团队 | 启用 | 进入 |
图 1 整页:侧栏只有一项「语义管理」,点进是运维语义库列表。第一行的待确认数、最近摄入、基线天数来自虚构数据(第 4.4 节的 3 项待确认含一组示意);第二行是为了演示多个库和只读而补画的。
4. 页面
4.1 运维语义库列表
列:名称(代号)、所属团队、主题、待确认数、最近摄入、基线天数、可见范围、状态。筛选:所属团队、状态、名称或代号搜索。点行或「进入」到库详情的概览与设置。
- 新建运维语义库对话框:代号(平台唯一,创建后不可改,规则同知识库代号)、名称、可见范围(缺省全部团队〔拟〕,设计第 4.2 节)、时区(缺省
+08:00)、主题(只有「告警」,勾选且不可取消)。建库同时建tb_sem_topic的告警行,建完直接进新库的概览与设置。 - 其他团队的库:名称旁标「只读」,不显示待确认数。
- 基线不满 7 个完整的天时标红:这时 RCA 不出依赖历史的判断(设计第 5.2 节)。
- 空状态:当前团队一个可见库都没有时显示「当前团队没有可见的运维语义库。一个企业一般建一个,告警、指标等主题都在同一个库里。」有新增权限时带「新建运维语义库」按钮。
4.2 库详情的框架
库详情页顶部固定三样:「← 运维语义库」返回链接;库名(代号)、所属团队标签、状态,别的团队的库再加「只读 · 属于 <团队>」;库内页签,「待确认」带数。页签切换改路径(3.2 节),刷新、分享都落在同一个页签上。告警主题页签下面再有一行按钮组切 6 个视图,「告警对象」视图右侧有「查对象或标识」搜索框。
图 2 内容区:库详情的框架(返回链接、库名、库内页签)与概览与设置。画的是 library.json 原状态(4 组规则已确认),对应闸门流程第 5 步之后;图 11 的任务行是第 4 步的状态,所以对象、主机数不同。数据来自 /tmp/aa/library.json 与 /tmp/aa/out/manifest.json、hosts.csv;解析规则「待确认 2」含一组示意的 L-DB;生效与候选按 4.9 节推算。
4.3 概览与设置
内容从上到下:
- 库信息:代号、名称、所属团队、可见范围、状态。按钮:编辑、停用。
- 版本:
shared_version,以及每个主题的ruleset_version、algo_version。RCA 结果包和快照的manifest.json也记这三个数,结果对不上时拿来比。 - 主题卡片:每个启用的主题一张。告警卡片给对象数(按生效、候选)、主机数、分组数(按规则状态)、最近一次摄入、基线天数、近 28 天的摄入覆盖。
- 待确认合计:按种类的数,点进「待确认」页签。
- 公共处理设置:时区、遮罩。告警自己的处理设置在告警主题的「设置」视图(4.13 节)。
- 导入与导出:导出快照(设计第 7.5 节);导入语义。
导入语义是本文新增的入口,有两个用处:第 1b 期闸门没有治理智能体,要靠它把 /tmp/aa/library.json 这种已有规则放进库(第 5 节);设计第 2 节要求把 alerttx、rca_agent 里的客户写法迁到该客户的语义约定,也要一个导入入口。导入接受快照目录的打包或 library.json(算法包 --library 认的两种格式),分两种模式:「导入为待确认」(缺省,逐项进待确认页)和「导入并确认」(迁移已经审过的规则)。处理设置和对象类字段的默认推断不走确认(4.10 节),导入时直接覆盖,覆盖前列出新旧差异。
遮罩的时间差:样本在摄入时遮罩后入库(设计第 4.3 节),新加一条遮罩规则,之前入库的样本不受影响。推荐保存遮罩时让 kb 对已存样本再遮一遍:已遮罩的文本再遮只会多遮,不会还原原文。【待确认:用户、kb 第 1 期实施者】
4.4 待确认
本库各主题的待确认项。一个页签一个种类,页签标题带待确认数。筛选:主题(全部、共享、告警)、状态(缺省待确认,可切已确认、已驳回、全部)。排序:漂移的解析规则排最前,其余按提交时间从早到晚。漂移表示已确认的规则在新数据上命中率下降,当前的 RCA 正在用它。
| 种类 | 表 | 谁提交 | 抽屉里给人看什么 | 批量确认〔拟〕 |
|---|---|---|---|---|
| 解析规则 | tb_sem_alert_semantics(设计里叫模板语义) | 治理智能体;人(编辑后确认、导入) | 分层的规则、样本逐条、累积产出、确认后的变化、出处(4.8 节) | 可以,只限样本全部通过、谓词不是 unclassified、确认后对象键不变的 |
| 列映射 | tb_sem_alert_field_map,只含分组前就要用的列(4.10 节) | 治理智能体(按摄入体检);人 | 按监控系统整组显示;该监控系统各列填充率;必需字段是否齐 | 不可以:改了可能改分组键,影响这个监控系统的全部分组 |
| 语义约定 | tb_sem_convention | 治理智能体;人 | 写法 → 指什么的试算、谁用它、确认后的变化、依据(4.5 节) | 不可以:约定是事实,录错扩散到所有用它的解析(rat §6) |
| 噪音 | tb_sem_alert_noise | kb 统计出候选,治理智能体写条件和描述;人 | 行为范围与最近一批的实际值、有无这条标注的效果对比、人填的依据(4.11 节) | 不可以:每条都要人填依据,人工确认就是「频率以外的依据」(设计第 4.4 节) |
| 依赖候选 | tb_sem_alert_relation,basis=suggested | 治理智能体 | 证据条数、出现天数、样例告警 | 不可以 |
| 冲突 | tb_sem_alert_object_ident、tb_sem_alert_relation,status=conflict | kb 摄入 | 冲突的两边,各自的来源规则和证据 | 不可以 |
| 谓词 | tb_sem_predicate | 人 | 适用对象类型、量化格式、与已有谓词的对照 | 不可以 |
冲突只在生效的行之间算:两条已确认规则把同一个标识指向两个对象,或同一个实例挂在两台主机上。候选和生效说法不一致不算冲突,它会出现在相关解析规则的预览里,确认那条规则时处理。
| 项 | 取法 | 来自 |
|---|---|---|
| 对象 | 同主机(obj 列是 pay-app-02,不符合「主机/实例名」写法) | 列映射默认 |
| 对象类型 | 主机(对象等于主机,数据标准第 3.3 节) | 推出 |
| 主机 / IP | host_name 去掉 IP 前缀 / host_ip | 列映射默认 |
| 系统 / 应用 | biz_sys / app_name | 列映射默认 |
| 纵向关系 | belongs_to → 系统;observed_by → 监控系统;located_in → 站点 | 由上面的字段推出 |
| 横向关系 | reported_call_failure:msg 正则 (jdbc:\S+),目标类型 url,角色「数据源」 | 本模板 |
| 分类 | 日志 · 谓词 call.fail 调用失败 ▾ · L7 中间件与数据库 · 应用层 · 调用失败 | 本模板 |
| 说明 | 应用连接订单库失败(超时或被拒绝) | 本模板 |
| 告警 | 变体 | 对象 | 系统 | 横向目标 → 解析到 | 校验 |
|---|---|---|---|---|---|
| A00091 | 超时 | pay-app-02 | 支付系统 | jdbc:mysql://10.0.2.31:3306/orders → 实例 10.0.2.31:3306/orders | 通过 |
| A00098 | 超时 | pay-app-02 | 支付系统 | 同上 | 通过 |
| A00106 | 超时 | pay-app-02 | 支付系统 | 同上 | 通过 |
| A00109 | 被拒绝 | pay-app-02 | 支付系统 | 同上 | 通过 |
| A00112 | 被拒绝 | pay-app-02 | 支付系统 | 同上 | 通过 |
| 产出 | 状态 | 证据 | 确认后 |
|---|---|---|---|
| 对象 pay-app-02(主机) | 候选 | 5 | 生效 |
| pay-app-02 belongs_to 支付系统 · observed_by 日志平台 · located_in A站 | 候选 | 5 | 生效 |
| pay-app-02 reported_call_failure → 10.0.2.31:3306/orders(通用抽取) | 候选 | 5 | 生效,来源改为本规则 |
| 未解析目标 Dao.java:42(通用抽取) | 候选 | 5 | 作废 |
| 项 | 现在 | 确认后 |
|---|---|---|
| 日志平台按已确认规则解析的告警 | 10 | 15 |
| 引用(refs.csv) | 5 | 4 |
| 告警规则版本 | ruleset_version 1 | ruleset_version 2 |
图 3 内容区:库内「待确认」页签的解析规则一类,右侧是解析规则抽屉。L-DB 的提议是演示数据。把它写进语义库副本、用算法包 1.0.0 重跑 /tmp/aa/alerts.csv:每条样本的对象、系统、横向目标与解析结果,以及「确认后的变化」三行是实测(简报【解析】段日志平台从 10/0/33 变成 15/0/28);「校验」一列和「累积产出」的状态按设计画,算法包 1.0.0 不输出这两样。这个状态下 I-ORD 已确认,所以 jdbc 目标解析到实例;图 8 的状态(I-ORD 待确认)下解析到主机 order-db-01。
4.5 语义约定
语义约定是客户环境的写法词典,回答「这个写法指什么」,不回答「从哪里取」。它解决两件事(ops-semantic-library 第 3.3 节):
- 身份(标识规则):同一个东西在客户环境里有几种写法,要知道它们指同一个对象。一台主机有业务网、管理网两个 IP;错误码
GW-E-1001-SETTLE的最后一段是系统代号;SETTLE就是清算系统;主机名pay-app-01里编码了系统。 - 词汇(术语):客户环境自己的说法是什么意思。「通讯中断」属于「连接失败」;本环境的错误码长这样,归一化时整段保留。
和解析规则的分界:解析规则说位置(在某个模板的告警里,哪一列、哪段文字是什么),约定说含义(一个写法本身指什么,不管出现在哪)。判断标准:换一个模板、换一个主题(以后的指标标签、日志、链路)还成立的,是约定;不成立的,写进那个模板的解析规则。以 L-GWSET 为例:规则只说「目标取 errorCode= 后面那串,目标类型是错误码」;约定说「XX-E-数字-代号 的最后一段是系统代号」「SETTLE 是清算系统」。以后日志主题里出现同一个错误码,用同一条约定,不再确认一次。所以约定整库一份、各主题共用、必须人确认:录错一条,所有用它的解析都错。
约定里一半是对照表(系统别名、IP 规划的网段对、服务地址指向系统、近义词),一半是写法规律(主机命名、错误码格式、错误码指向系统)。写法规律要用正则表达,但它解析的是一个标识,不是一条告警。界面上一律先给「写法 → 指什么」,正则放进抽屉的「规则细节」。
标识规则是 CMDB 缺失时的替代:ops-semantic-library 第 3.2 节把主机命名、IP 规划列为纵向关系的推断来源,CMDB 是事实源。接入 CMDB 以后,IP 规划、系统别名这类约定拿 CMDB 核对,不一致时以 CMDB 为准。
列表列:种类、名称、写法 → 指什么(用本库出现过的真实写法举例)、谁用它、影响、状态。「影响」是这条约定在最近一批数据上改变了什么,kb 按「去掉这条重算一次」得到;为 0 的照样列出,看得出它现在没起作用。抽屉:写法 → 指什么的试算、谁用它、确认或撤销后的变化、依据、规则细节(正则、去前缀、大小写)、历史。人工新建约定有两个保存按钮:「保存为待确认」「保存并确认」。
| 种类 | 名称 | 写法 → 指什么 | 谁用它 | 影响(最近一批) | 状态 |
|---|---|---|---|---|---|
| 标识规则:这个写法指哪个对象 | |||||
| IP 规划 | 业务网与管理网 | 10.0.1.21 ↔ 10.0.11.21:同一台主机 pay-app-01 | 标识合并、调用目标解析 | pay-app-01 多一个 IP;L-GWPAY 25 条的调用目标 http://10.0.1.21:8080/pay/api 对到 pay-app-01(去掉则未解析) | 已确认 |
| 主机命名 | 主机 | pay-app-01 → 系统代号 pay(→ 支付系统) | 解析规则的 lookup:0 组 | 无 | 待确认 示意 |
| 错误码指向系统 | 网关错误码 | GW-E-1001-SETTLE → 系统代号 SETTLE | 目标类型为错误码的横向关系:L-GWSET | 和「系统别名 · 清算系统」一起:L-GWSET 10 条的调用目标对到清算系统(去掉任一条则未解析) | 已确认 |
| 术语:这几种说法是同一个意思 | |||||
| 系统别名 | 清算系统 | SETTLE → 清算系统 | 系统代号解析 | 同上 10 条 | 已确认 |
| 系统别名 | 支付系统 | PAY、pay → 支付系统 | 系统代号解析(主机命名待确认,暂无引用) | 无 | 已确认 |
| 错误码格式 | 网关错误码 | GW-E-1001-SETTLE 是一个整体 | 归一化 | L-GWSET 的模板文本保留 GW-E-1001-SETTLE(去掉则变成 GW-E-<N>-SETTLE,不同编号的错误码不再区分) | 已确认 |
| 近义词 | 通讯中断 | 「通讯中断」→ 连接失败 | 调用失败判断 | L-ORDPAY 3 条判为调用失败,目标 pay-app-01:8080 对到 pay-app-01(去掉则不算调用失败,这条关系消失) | 已确认 |
| 写法(host_name 列) | 系统代号 | 角色 | 序号 | 对到系统 |
|---|---|---|---|---|
| 10.0.11.21-pay-app-01 | pay | app | 01 | 支付系统 |
| 10.0.11.22-pay-app-02 | pay | app | 02 | 支付系统 |
| 10.0.11.41-gw-app-02 | gw | app | 02 | 别名未登记 |
| 10.0.11.51-order-app-01 | order | app | 01 | 别名未登记 |
| 10.0.2.31-order-db-01 | order | db | 01 | 别名未登记 |
| 10.0.9.1-edge-rt-01 | edge | rt | 01 | 别名未登记 |
图 4 内容区:语义约定列表(上)与点开主机命名约定的抽屉(下)。7 条约定照抄 /tmp/aa/library.json,那里全部是已确认;主机命名画成待确认是为了演示。「影响」一列是逐条去掉约定、用算法包重跑 /tmp/aa/alerts.csv 与原结果对比得到的(比的是 refs.csv、hosts.csv、templates.csv 与逐条的调用失败判断)。试算表的 6 个主机名取自 host_name 列(另有 1 个值 10.0.2.31:3306:orders 是实例,不匹配主机正则,不列)。
图 4 的「影响」一列说明了三件事:
- 影响为 0 的约定也有用,但现在没起作用。主机命名和「支付系统」别名去掉以后结果完全不变:本库的系统取自
biz_sys列,没有规则引用它们。确认这种约定不改变当下的结果,人可以据此决定先确认还是先放着。 - 约定会串起来用。
GW-E-1001-SETTLE对到清算系统要两条约定:「错误码指向系统」取出SETTLE,「系统别名」把SETTLE对到清算系统。去掉任一条,这 10 条的调用目标都变成未解析;清算系统在这批数据里没有一条告警,只靠这条引用出现,也会从结果里消失。抽屉的「谁用它」要列出这条链。 - 试算能挡住看起来对的约定。命名规范 6 个主机名都匹配;逐行看对到的系统,才发现 4 个代号没登记别名,其中
edge根本不是系统。处理办法有两个:改正则让系统代号只在app、db角色上取,或者确认后给gw、order补系统别名。
4.6 谓词
列表列:域、谓词键、名称、适用对象类型、量化格式、状态、引用(已确认解析规则里用到它的组数)。首版 12 个谓词照 ops-semantic-library 第 3.5 节,第 1 期迁移时以已确认状态写入每个新建的库:这份清单由用户在该文档里确认(目前待确认),不在界面上逐条确认,所以闸门流程的待确认页里没有这 12 条。
- 新增:人填写域、谓词键、名称、适用对象类型(从对象类型表多选)、量化格式。保存后进「待确认」的谓词一类。治理智能体不能新增谓词,选不出时只能写
unclassified。 - 停用:被引用的谓词不能删除,只能停用。停用后治理智能体不能再选它,已确认的解析规则保留原值,列表显示「引用 N(已停用)」。
unclassified是保留值,不是表里的一行。- 确认、停用都让
shared_version加 1。
谓词页签不画示意图:只有一张表和一个新增对话框,和语义约定的列表同一个形态。
4.7 告警主题 · 告警对象
告警对象是告警主题最重要的产出:RCA 的语义切片、lookup 查上下游都用它,以后的 CMDB 对账也按它做。有些问题只能从对象这一侧回答:库里一共有多少台主机、某个系统下有哪些对象、哪些对象还只是候选、哪些对象没有任何监控系统覆盖(没有 observed_by)。所以它单独成一个视图,并且是告警主题的缺省视图。
视图里用按钮组再切三样:
- 对象:列对象键、类型、所在主机、系统、状态(生效、候选)、来源分组、告警数、末次。筛选:类型(带计数的标签)、状态(缺省不含作废)、系统、监控系统,以及「查对象或标识」搜索框(按对象键或任一标识:主机名、IP、系统代号)。系统、监控系统、站点也是对象(设计第 4.7 节),缺省只显示告警直接针对的对象,其余点类型标签看。
- 关系:列类型、源、目标、状态、来源、证据条数、首末次。筛选:纵向或横向、关系类型、状态、来源。依赖候选(等人确认的
depends_on)和冲突也在这里能看到,点开是和待确认页同一个抽屉。 - 未解析目标:告警内容里提到、但对不上任何对象的目标,各分组汇总在一起。列文本、类型、条数、首末次、所在分组。动作三个:「新建约定」(预填为服务地址指向系统或系统别名)、「列为引用停用词」(写进告警设置的
ref_stopwords,即时生效)、「忽略」。不提供把目标直接挂到某个对象上:标识的来源只有列映射、规则、约定、建议四种(设计第 4.7 节basis),人工挂接没有对应的来源。解析规则抽屉里仍按本组列出。
页面固定一行说明:「这里的对象和关系是从告警推出来的。对象和纵向关系以 CMDB 为准,横向关系以链路为准。」(ops-semantic-library 第 3.2 节)。
| 对象键 | 类型 | 所在主机 | 系统 | 状态 | 来源分组 | 告警 | 末次 |
|---|---|---|---|---|---|---|---|
| pay-app-01 | 主机 | 本身 | 支付系统 | 生效 | B-PCPU(已确认)、B-CPU、B-OOM | 26 | 09:55 |
| gw-app-02 | 主机 | 本身 | 网关系统 | 生效 | L-GWSET(已确认)、L-GWPAY、I-LIC、S-SEC | 51 | 09:50 |
| order-db-01 | 主机 | 本身 | 订单系统 | 候选 | I-LIC | 12 | 09:50 |
| pay-app-02 | 主机 | 本身 | 支付系统 | 候选 | I-LIC、B-DISK、L-DB | 23 | 09:50 |
| pay-app-01/server1 | 中间件实例 | pay-app-01 | 支付系统 | 候选 | A-HEAP | 4 | 09:17 |
| 10.0.2.31:3306/orders | 数据库实例 | order-db-01 | 订单系统 | 生效 | I-ORD(已确认) | 3 | 09:28 |
| order-app-01 | 主机 | 本身 | 订单系统 | 候选 | L-ORDPAY | 3 | 09:20 |
| LINE-0007 | 线路 | edge-rt-01 | 网络 | 生效 | N-LOSS(已确认) | 8 | 08:55 |
图 5 内容区:告警主题的告警对象视图,按末次出现倒序。8 个对象、告警数、末次时间取自 /tmp/aa/out/objects.csv,类型按数据标准第 3.3 节改写(算法包输出的是原始的 WebLogic、MySQL);来源分组按 alerts.csv 的 object_key 与 template_id 汇总;状态按 4.9 节推算。类型标签里蓝色的 4 类是缺省显示的「告警直接针对的对象」,共 8 个;网络设备 edge-rt-01 只作为 LINE-0007 所在的设备出现,不在这 8 行里,点「网络设备」标签才显示。
点对象行或任何预览里的对象键,打开对象抽屉:标识、关系(出、入)、1–2 跳邻居,每一行带状态和全部来源,点来源跳到那条解析规则或约定。一个对象由多条规则共同产出,抽屉是看它全貌的地方:pay-app-01 的主机名来自列映射,第二个 IP 来自 IP 规划约定,挂在它上面的实例来自 A-HEAP,报告调用它失败的关系来自 L-GWPAY、L-ORDPAY。
| 对象键 | 类型 | 状态 |
|---|---|---|
| pay-app-01 | 主机 | 生效 |
| gw-app-02 | 主机 | 生效 |
| order-db-01 | 主机 | 候选 |
| 类型 | 值 | 状态 | 来源 |
|---|---|---|---|
| hostname | pay-app-01 | 生效 | B-PCPU 规则(继承列映射默认 host);B-CPU、B-OOM 默认推断 |
| ip | 10.0.11.21 | 生效 | 同上(host_ip 列) |
| ip | 10.0.1.21 | 生效 | 约定:IP 规划「业务网与管理网」 |
| 方向 | 类型 | 对端 | 状态 | 来源 | 证据 |
|---|---|---|---|---|---|
| 出 | belongs_to | 支付系统 | 生效 | B-PCPU 规则 1 条;B-CPU、B-OOM 默认推断 25 条 | 26 |
| 出 | observed_by | 基础监控 | 生效 | 同上 | 26 |
| 出 | located_in | A站 | 生效 | 同上 | 26 |
| 入 | runs_on | pay-app-01/server1 | 候选 | A-HEAP 默认推断 | 4 |
| 入 | reported_call_failure | gw-app-02 | 候选 | L-GWPAY 默认推断(通用抽取,经 IP 规划解析) | 25 |
| 入 | reported_call_failure | order-app-01 | 候选 | L-ORDPAY 默认推断(通用抽取,按主机名解析) | 3 |
图 6 内容区:在告警对象视图按 IP 搜索,打开 pay-app-01 的对象抽屉。告警数、两个 IP 取自 /tmp/aa/out/objects.csv、hosts.csv;两条 reported_call_failure 对应 refs.csv 的 rf:0001(解析方式「IP规划」)、rf:0003(「主机名」);状态和来源按 4.9 节推算。虚线框是以后 CMDB 对账的位置。
CMDB 对账以后放在这里。统一对象和对照表属于以后的对象主题,不归告警主题(ops-semantic-library 第 3.1 节),告警对象视图显示的是每个告警对象的对账结果,是联表展示:列表加「CMDB」列和筛选(已匹配、人已确认、冲突、未登记);对象抽屉加「CMDB 对账」一块;筛「未登记」即「CMDB 未登记」清单,可以导出交给客户做 CMDB 治理。第 1b 期界面上不画这一列,免得出现一列永远是「未接入」。
4.8 告警主题 · 解析规则
一行一个分组。每组的解析规则由三部分合成:从列映射默认推断继承的字段、本模板自己的规则(设计里模板语义的 fields、classify、relations)、引用到的语义约定。列表直接给出每组「对象从哪取、是什么类型、主机从哪取、推出什么纵向关系、横向关系怎么取」,不用点开就能对比各模板。
| 监控系统 | 模板号 | 模板文本(遮罩、归一化后) | 告警 | 对象取自 | 对象类型 | 主机取自 | 纵向(类型相关) | 横向 | 规则 | 标记 |
|---|---|---|---|---|---|---|---|---|---|---|
| 基础监控 | B-CPU | CPU使用率 <PCT>,超过阈值 <PCT> | 24 | host_name(默认) | 主机 | 同对象 | — | — | 默认推断 | |
| 巡检平台 | I-LIC | 巡检脚本 ntp-check 退出码 <N> | 36 | host_name(默认) | 主机 | 同对象 | — | — | 待确认 | 噪音 |
| 日志平台 | L-GWPAY | 调用支付接口超时 url=http://<IP>:<N>/pay/api | 25 | host_name(默认) | 主机 | 同对象 | — | 通用抽取:url → 主机 | 默认推断 | |
| 巡检平台 | I-ORD | 订单表日增量检查:返回行数 <N>,期望 > <N>,<联系人> | 3 | host_name 正则 → IP:端口/实例 | 数据库实例 | 按 IP 找 | runs_on | — | 已确认 | |
| 日志平台 | L-DB | 连接数据库超时 jdbc:mysql://<IP>:<N>/orders at demo.Dao.query(Dao.java:<N>), "retry" | 5 | host_name(默认) | 主机 | 同对象 | — | msg 正则 jdbc → 实例 | 待确认 | 未解析 1 |
| 日志平台 | L-GWSET | 调用清算服务失败 errorCode=GW-E-1001-SETTLE | 10 | host_name(继承) | 主机 | 同对象 | — | errorCode → 系统(约定) | 已确认 | |
| 日志平台 | L-ORDPAY | 支付服务通讯中断 target=pay-app-<N>:<N> | 3 | host_name(默认) | 主机 | 同对象 | — | 通用抽取:target → 主机 | 默认推断 | |
| 应用监控 | A-HEAP | JVM 堆内存使用率 <PCT> | 4 | obj 列(默认) | 中间件实例 | host_name(默认) | runs_on | — | 默认推断 | |
| 安全平台 | S-SEC | 主机防护平台检测到弱口令登录尝试 | 4 | host_name(默认) | 主机 | 同对象 | — | — | 默认推断 | 范围外 |
| 基础监控 | B-PCPU | 进程 java CPU 占用 <PCT> | 1 | host_name(继承) | 主机 | 同对象 | — | — | 已确认 | |
| 基础监控 | B-OOM | Out of memory: Kill process <N> (java) score <N> | 1 | host_name(默认) | 主机 | 同对象 | — | — | 默认推断 | |
| 基础监控 | B-DISK | 磁盘使用率 <PCT>,超过阈值 <PCT> | 6 | host_name(默认) | 主机 | 同对象 | — | — | 默认推断 | |
| 网络监控 | N-LOSS | <OBJ> 线路丢包,从设备 <OBJ> ping <IP> 丢包率 <PCT> | 8 | msg 正则 LINE-\d+ | 线路 | host_name(继承) | terminates_at | ping 目标 → probes | 已确认 | 1 变体范围外 |
图 7 内容区:告警主题的解析规则视图。分组、告警数、模板文本取自 /tmp/aa/out/templates.csv(同一分组的变体合并成一行);规则状态取自 library.json,L-DB 的待确认是演示状态;「对象取自」等五列按各组规则(没有规则的按 field_map)写出,灰色表示来自列映射的默认推断;对象类型按数据标准第 3.3 节改写。
列与行为:
- 纵向(类型相关)只列随对象类型变的那一种:实例 →
runs_on,线路 →terminates_at,容器 →hosted_by。belongs_to(系统)、observed_by(监控系统)、located_in(站点)每组都有,列表不重复,抽屉里列全。 - 规则四种:已确认、待确认、默认推断(没有规则,或规则被驳回)、漂移(已确认,但新数据上命中率下降,旁边显示「命中率 98% → 61%」这类变化,取自
tb_sem_alert_field_hits)。 - 标记:已确认的噪音、处理设置判为范围外、变体级范围外、未解析目标数。范围外只打标记不删除(数据标准 M3),这些分组照常列出。
- 点行打开解析规则抽屉,和待确认页是同一个(图 3)。抽屉分两部分:
- 规则:一行一项(对象、对象类型、主机与 IP、系统与应用、纵向关系、横向关系、分类、说明),每行注明来自哪一层:列映射默认(灰色)、本模板、语义约定、推出。确认本规则即确认它继承的灰色部分:人在预览里看到了这些字段在本模板上的实际取值。
- 预览:样本逐条(每条的对象、主机、系统、横向目标与解析结果、校验);这一组的累积产出(按生效、候选分开,带证据条数,对象可点开对象抽屉);确认后的变化。另有「样本」「变体」「统计」「历史」四个页签:遮罩后的原始各列,每组最早 3 条、最近 10 条、每个变体至少 1 条(设计第 4.3 节〔拟〕);变体的骨架、条数、范围标记;近 35 天每天条数与字段命中率;各版本与撤销。
编辑、驳回、撤销
- 谓词必填。治理智能体选不出谓词时写
unclassified,由人确认时补(ops-semantic-library 第 3.5 节)。谓词是unclassified时「确认」置灰,提示「先选谓词」。 - 样本有失败时仍可确认,但要填说明,写进
decision_note。 - 编辑后确认:对象、对象类型、主机、分类做成表单;对象取法、横向关系、变体标记、致命条件用 JSON 编辑框,旁边列出六种写法(设计第 4.4 节)。改继承的灰色项,等于在本模板写一条覆盖。改完点「试算」,预览三块按改过的版本重算。保存的版本
edited=true。 - 驳回必须写原因,写进
decision_note。驳回后这一组继续按默认推断产出候选。 - 撤销已确认的版本在「历史」页签。撤销前列出会转回候选或作废的行数,并提示
ruleset_version加 1。
确认会改对象键时:I-ORD 的例子
L-DB 确认前后对象键不变,确认只是把候选转成生效。有的规则会改掉默认推断出的对象。闸门流程第 4 步(第 5 节)全部规则还是待确认,实测默认推断产出了两个错的候选:
- I-ORD 的
host_name列是10.0.2.31:3306:orders,默认推断把它当成一台主机。 - N-LOSS 是专线 LINE-0007 的告警,默认推断把对象取成了网络设备
edge-rt-01。
图 8 是确认 I-ORD 之前它的抽屉。
| 监控系统 | 模板号 | 规则 |
|---|---|---|
| 巡检平台 | I-LIC | 待确认 |
| 巡检平台 | I-ORD | 待确认 |
| 日志平台 | L-GWSET | 待确认 |
| 基础监控 | B-PCPU | 待确认 |
| 网络监控 | N-LOSS | 待确认 |
| 项 | 取法 | 来自 |
|---|---|---|
| 对象 | host_name 正则 ^([\d.]+):(\d+):(\w+)$,拼成 {1}:{2}/{3} | 本模板 |
| 对象类型 | 数据库实例 | 本模板〔拟〕 |
| 主机 / IP | 不取主机名({const: ""})/ host_name 正则 ^([\d.]+): | 本模板 |
| 系统 | biz_sys | 列映射默认 |
| 纵向关系 | runs_on → 按 IP 找到的主机;belongs_to → 系统;observed_by → 监控系统 | 推出 |
| 分类 | 巡检 · 谓词 data.check_failed 示意 · L7 · 巡检三元组「订单表日增量检查 / 返回行数 0 / 期望 > 0」 | 本模板 |
| 项 | 现在(默认推断) | 确认后 |
|---|---|---|
| 对象 | 10.0.2.31:3306:orders,类型主机 候选 | 10.0.2.31:3306/orders,类型数据库实例;原候选对象作废 |
| 主机 | 多出一台主机 10.0.2.31:3306:orders,共 7 台 | 实例按 IP 10.0.2.31 挂到 order-db-01,共 6 台 |
| 纵向关系 | belongs_to 订单系统、observed_by 巡检平台,挂在错的对象上 候选 | runs_on order-db-01、belongs_to 订单系统、observed_by 巡检平台,挂在新对象上,生效 |
| 其他分组受影响 | L-DB 的调用目标 jdbc:mysql://10.0.2.31:3306/orders 解析到主机 order-db-01 | 解析到实例 10.0.2.31:3306/orders |
| 统计 | 3 条记在候选对象名下 | 不迁移,原始告警没有保存;勾选下方选项,用保留的上传文件重算 |
图 8 内容区:确认 I-ORD 之前的解析规则抽屉。「现在」一列是把 library.json 的全部规则改成待确认后重跑的结果(对象 8、主机 7,refs.csv 里 jdbc 目标解析到主机 order-db-01);「确认后」一列是原 library.json 的结果(主机 6,jdbc 目标解析到实例)。「对象类型」一行由本模板显式写出是本版的提议〔拟〕,见第 8.3 节第 5 条。
4.9 候选与生效
用户 2026-10-08 确认:没有确认规则的分组也写入对象和关系,用状态区分。本节定这个状态怎么变,告警对象视图、解析规则预览、对象抽屉里的「候选」「生效」都按它显示。
- 摄入只用已确认的规则。有已确认规则的分组按规则产出;没有的(含规则待确认、被驳回)按列映射的默认推断和通用抽取产出。待确认的规则不参与摄入,只在预览里试算。这样驳回一条规则时,库里没有它留下的东西要清。
- 每一行记全部来源。对象、标识、关系各记「哪个分组、哪一版规则」或「哪条约定」产出了它。pay-app-01 的主机名同时来自 B-PCPU(已确认)和 B-CPU、B-OOM(默认推断),三个来源都记。
- 状态按来源算。有一个来源是已确认的规则或约定 → 生效;只有默认推断的来源 → 候选;来源都没了 → 作废。状态是算出来的,不是逐行确认的,设计第 4.7 节「确认放在规则这一级」不变。关系的状态和它两端对象的状态分开算:I-ORD 确认后
runs_on生效,它指向的 order-db-01 只由 I-LIC 的默认推断产出,仍是候选(图 5)。 - 确认一条规则:本组的已确认规则记为它产出的那些行的来源,这些行转生效;本组不再是规则不产出的那些行的来源,那些行按第 3 条重算,没有别的来源就作废。作废的对象键不复用。
- 撤销一条已确认规则:本组不再是这些行的已确认来源,按第 3 条重算;同一行还有别的已确认来源时保持生效,否则作废。本组按默认推断的新产出要等下一次摄入才出现(第 1 条:只有摄入产出行),撤销时可同样选择重新摄入近 7 天。
- 统计不迁移。统计挂在(分组,对象)上,原始告警不入库(设计第 5.1 节),对象键变了没法按新键重算。确认时可选「用保留的上传文件重新摄入近 7 天」:摄入用的上传文件成功后保留 7 天〔拟〕(设计第 7.6 节)。对象键不变时这个选项置灰。
- 快照不含候选〔拟〕,同快照现在不含
suggested、pending的做法(设计第 7.5 节)。analyze处理时用候选,结果包里标出「候选」。 - 预览的范围:「确认后的变化」只能在存着的样本和最近一批保留的上传文件上试算,不覆盖全部历史。抽屉里写明这一点。
4.10 告警主题 · 列映射
用户 2026-10-08 确认按列的性质分两层:
| 列的性质 | 标准字段 | 在哪配 | 确认 |
|---|---|---|---|
| 分组前就要用,含义不随模板变 | alertId、happenedFirst、happenedLast、severity、content、templateId、tags、count、recovered、ruleId、ruleName;监控系统、站点在告警设置里取(4.13 节) | 列映射视图上半部分,库级,可按监控系统覆盖 | 要确认:改了可能改分组键 |
| 含义随模板变 | objectId、host、ip、objectName、objectType、resource、system、app、metricValue、threshold | 各模板的解析规则;列映射视图下半部分只配默认推断,给还没有确认规则的分组用 | 默认推断不单独确认,保存即生效〔拟〕:它的产出全是候选,要生效只能经某组解析规则的确认 |
两层都需要。分组本身要用模板号、内容、时间、监控系统,分组之前还没有模板,这几列没法按模板配。实测不带语义库处理 /tmp/aa/alerts.csv:算法包内置的常见列名认得 msg、occur_time(alertalgo/fields.py 第 65、78–79 行),认不出 tpl_id、source、mark、biz_sys;没有监控系统和模板号,130 条全部按相似度聚类,分成 15 组(配了映射和监控系统取法是 13 组),分组键对不上导入的规则。
- 一个监控系统一组映射,第一组是「语义库默认」。上半部分按组编辑、按组确认;数据库里仍是每个标准字段一行。
- 每行:标准字段、写法(六种,下拉)、原始列、变换(时间格式、去掉 IP 前缀、
strip_own)、试算值(取最近一条样本)。下半部分多一列「被模板覆盖」,列出哪些分组的规则改写了这个字段。 - 改下半部分的默认推断,只影响没有已确认解析规则的分组:确认解析规则时,kb 把当时继承的默认推断固定进那一版〔拟〕(设计第 4.4 节),之后改默认推断不会悄悄改变已确认分组的行为。保存时提示「已确认的 N 个分组不受影响」。
- 必需字段检查:
content、happenedFirst,以及objectId、host、ip至少一个(数据标准第 3.2 节;后三个在下半部分)。缺必需字段时「确认」置灰。未映射的字段列在表下,写明缺了做不了什么(文案同数据标准第 3.1 节)。 - 右侧「列体检」:摄入时按监控系统统计的各列填充率(设计第 4.3a 节)。低于 100% 的格子标红,提示这一列在该监控系统里要靠模板规则补取或按监控系统覆盖。
| 标准字段 | 写法 | 原始列与参数 | 试算(A00091) |
|---|---|---|---|
| alertId | from | alarm_id | A00091 |
| happenedFirst | from | occur_time · 时间格式 %Y/%m/%d %H:%M:%S | 2026-03-02 09:15:00 |
| severity | map | level · 紧急→60 重要→50 警告→40 提示→30 | 40 |
| content | from | msg | 连接数据库超时 jdbc:… |
| templateId | from | tpl_id | L-DB |
| tags | from | mark | 稀有(原值 rare) |
| ruleName | from | rule | app_log |
| 标准字段 | 写法 | 原始列与参数 | 试算(A00091) | 被模板覆盖 |
|---|---|---|---|---|
| host | from | host_name · 去掉 IP 前缀 | pay-app-02 | I-ORD |
| ip | from | host_ip | 10.0.11.22 | I-ORD |
| objectId | from+regex | obj · ^([\w.\-]+/\w+)$ | (空,按主机级取 pay-app-02) | I-ORD、N-LOSS |
| objectName | from | obj | pay-app-02 | |
| objectType | from | obj_type | (空) | |
| resource | from | obj · strip_own objectId、host、ip | (空) | B-PCPU |
| system | from | biz_sys | 支付系统 | |
| app | from | app_name | pay-batch |
| 原始列 | 巡检平台 | 基础监控 | 日志平台 | 网络监控 | 安全平台 | 应用监控 |
|---|---|---|---|---|---|---|
| 条数 | 39 | 32 | 43 | 8 | 4 | 4 |
| host_ip | 36 | 32 | 43 | 8 | 4 | 4 |
| obj | 36 | 32 | 43 | 8 | 4 | 4 |
| obj_type | 39 | 32 | 0 | 8 | 4 | 4 |
| mark | 39 | 24 | 43 | 0 | 4 | 1 |
| app_name | 0 | 0 | 43 | 0 | 0 | 4 |
图 9 内容区:列映射视图。15 条映射照抄 /tmp/aa/library.json 的 field_map,按列的性质分成上下两部分;试算列是 A00091 按映射取到的值;「被模板覆盖」列取自 library.json 里各组规则的 fields;列体检是对 /tmp/aa/alerts.csv 按监控系统统计的非空条数。mark 列为空表示没带标签,填充率低是正常的,体检只提示,不阻止确认。
4.11 告警主题 · 噪音
噪音标注是对一个分组的已确认说明:这类告警长期存在、已知、可以不展开。它带一个行为范围:每小时最多多少条、涉及对象最多多少个、不能带哪些标签。RCA 预处理时,范围内的告警归入「背景」,只计数、不展开、不删除;超出范围就照常展开(设计第 4.4 节)。
为什么要它。简报把信号分成注意力、背景、无标签三类(数据标准第 5.2 节)。告警产品打了「高频」「周期」标签的,本来就进背景;没打标签的例行告警落进「无标签」,和真正要看的混在一起。6/11 那份真实数据 1140 条里有 545 条没带任何标签(交接第 5 节),这部分只能靠噪音标注进背景。
谁写。kb 用统计找候选:基线窗内至少 6 天在相近小时出现的「周期或慢性」分组(设计第 5.3 节);治理智能体按基线写出行为范围和一段描述;人确认。智能体只能描述频率和内容,判断不了「可以不管」。确认噪音要有频率以外的依据(设计第 4.4 节),所以确认时「依据」由人填,必填,写已知问题、工单号或计划任务;智能体写的只作为「描述」显示。新库没有 7 天基线时没有候选:要么先回补 28 天,要么头一周没有。
和另外两样不同。「范围外」是处理设置,表示不归这里管,配了即生效(4.13 节);「计划内」是解析规则给变体打的标记,如 N-LOSS 的计划内关闭。
列表列:分组、行为范围、依据、描述、基线天数、来源、状态、最近一批命中。抽屉:行为范围逐项对照最近一批的实际值、有无这条标注的效果对比、近 7 天每天条数、描述(智能体)、依据(人填)。行为范围按整组判:任一项超出,整组照常展开,原来的对象也一起展开。
| 分组 | 行为范围 | 状态 | 命中 |
|---|---|---|---|
| 巡检平台 · I-LIC | 每小时 ≤ 30 条;对象 ≤ 5 个 | 待确认 | 36 |
| 条件 | 范围 | 最近一批 | 结果 |
|---|---|---|---|
| 每小时条数 | ≤ 30 | 18.7(36 条 / 本批 1.92 小时) | 满足 |
| 涉及对象 | ≤ 5 | 3(order-db-01、gw-app-02、pay-app-02) | 满足 |
| 有这条标注 | 没有 | |
|---|---|---|
| I-LIC 的 3 个信号 | 背景 | 无标签 |
| 简报:背景 | 4 个信号 / 60 条 | 1 / 24 |
| 简报:无标签 | 3 / 14 | 6 / 50 |
图 10 内容区:噪音视图与 I-LIC 噪音标注的抽屉。library.json 里这条已确认,画成待确认是为了演示确认流程。为了看出标注的作用,把 /tmp/aa/alerts.csv 里 I-LIC 36 条的产品标签(mark 列)清空后重跑:原数据里这组自带「高频」「周期」标签,有没有标注都在背景。行为范围的实际值、效果对比、「行为变了时」三处数字是实测(最后一项另在 09 时给同一模板加了 3 台主机各 1 条);描述是示意;待确认页签的数 4 = 图 3 的 3 项加这一条。
4.12 告警主题 · 任务
列出摄入和治理任务(tb_sem_job):类型、状态、输入文件、条数、时间段、触发者、开始与结束时间、结果摘要。顶部是近 28 天的摄入覆盖条,同图 2。「上传并摄入」是第 1b 期新增的入口,第 3 期以后治理智能体走工具做同样的事(设计第 6.2 节)。确认规则时选了「重新摄入近 7 天」,这里多出一条触发者为「确认 <分组> 的规则」的摄入任务。
| 类型 | 状态 | 输入 | 条数 | 时间段 | 触发者 | 结果 |
|---|---|---|---|---|---|---|
| 摄入 | 完成 | alerts.csv | 130 | 03-02 08:00–10:00 | <用户> | 分组 13(新 13)· 对象 8(候选 8)· 主机 7 |
图 11 内容区:任务视图,以及同一个文件第二次上传时的对话框(第一次上传时「覆盖的小时」显示「都没有摄入过」,按钮是「开始摄入」)。文件行数、告警条数、sha256、告警时间取自 /tmp/aa/alerts.csv;任务行是闸门流程第 4 步的结果,全部规则还是待确认,实测对象 8、主机 7。
上传与摄入的异常路径:
| 情况 | 界面行为 |
|---|---|
| 按当前列映射取不到必需字段 | 不建任务。对话框列出缺的字段、映射写的原始列、文件里实际的列名(数据标准第 3.2 节:缺必需字段时停下并列出实际列名),给「去改列映射」链接 |
| 时间段里有已摄入的小时 | 列出这些小时,按钮文案改为「覆盖并摄入」 |
| 告警时间超出摄入时间段 | 列出超出的条数;超出的告警不计入统计 |
| 文件超过平台转发的请求体上限 | 上传前按文件大小拦下,提示上限。上限多少由平台组定(交接第 4 节) |
| 摄入任务失败 | 任务行显示失败和错误信息,带「重新摄入」:用同一个上传文件重建任务。摄入用的上传文件成功后保留 7 天〔拟〕,失败的同样保留(设计第 7.6 节) |
| 同一个文件再传一次 | 按 sha256 识别,提示「这个文件 <时间> 已摄入过」,仍可继续 |
摄入时间段缺省按告警时间向外取整点(08:00:06–09:55:35 取成 08:00–10:00),覆盖记录按这个时间段写。只按告警的最早最晚时间记,09:55 之后没有告警的那几分钟就不知道是没告警还是没摄入。
4.13 告警主题 · 设置
告警的处理设置存在 tb_sem_topic.settings(设计第 3.6 节),保存即生效,从下一次摄入起作用。每项一个小表单;条件类的项带「试算」,显示按最近一批数据有多少条命中。
| 项 | 键 | 虚构库里的值 | 试算 |
|---|---|---|---|
| 范围过滤 | scope | 「安全类告警」:biz_sys 匹配 ^安全$ | 范围外 4 条(另有 N-LOSS 计划内关闭变体 2 条,来自解析规则) |
| 监控系统取法 | monitor_derive | source 正则 ^(.*?)(?:([^)]*))?$ 第 1 组 | 6 个:日志平台、巡检平台、基础监控、网络监控、安全平台、应用监控 |
| 站点取法 | site_derive | source 正则 (([^)]*))$ 第 1 组 | 1 个:A站 |
| 引用停用词 | ref_stopwords | example.invalid | — |
| 层级覆盖 | layer_overrides | 无 | — |
| 模板号用法 | template_mode | 未配置,按 auto | — |
条件里的字段先找原始列,再找标准字段(settings.py 文件头),所以表单的字段下拉先列原始列。
template_mode 从 auto 改成 skeleton 会换掉全部分组键,已有分组的规则和统计接不上。保存前弹窗说明这一后果,要求输入库代号确认。2026-10-09 已定:递增分组代次,旧分组退休,旧规则、统计留作追溯,不参与当前解析和基线。
5. 闸门流程:建库 → 上传 → 摄入 → 确认
用虚构数据在本机走一遍。顺序有讲究:列映射、语义约定、处理设置影响摄入时的解析,要在摄入前生效;解析规则的确认要看样本预览,要在摄入后做。
| 步 | 操作 | 期望结果 |
|---|---|---|
| 1 | 运维语义库列表:新建运维语义库,代号 demo | 列表多出一行;直接进入新库的概览与设置:告警主题启用、分组 0、基线 0 天,告警设置为空 |
| 2 | 库详情 · 概览与设置:导入语义,选 /tmp/aa/library.json,模式「导入为待确认」 | 处理设置和对象类字段的默认推断直接生效。「待确认」出现列映射 1 组、语义约定 7 条、噪音 1 条;解析规则 5 组按分组键挂上,分组状态为新、没有样本 |
| 3 | 库详情 · 待确认:确认列映射、7 条语义约定 | shared_version 每次成功确认事务加 1,逐条确认 7 条约定共加 7(2026-10-09 用户确认);列映射视图上半部分显示已确认 |
| 4 | 告警主题 · 任务:上传 /tmp/aa/alerts.csv,开始摄入 | 对话框显示 130 条告警、必需字段齐全。任务完成后解析规则列出 13 个分组;告警对象 8 个、全部候选,主机 7 台。其中两个是错的候选:10.0.2.31:3306:orders(实例被当成主机)、edge-rt-01(专线 LINE-0007 的告警被取成设备)。它们来自第 2 步导入的对象类默认推断(host ← host_name 等),用在了规则还没确认的 I-ORD、N-LOSS 上,不是算法包内置列名的问题 |
| 5 | 库详情 · 待确认:确认 I-ORD、N-LOSS(勾选「重新摄入近 7 天」)、B-PCPU、L-GWSET 四组解析规则与 1 条噪音;I-LIC 选谓词后确认或驳回 | 两个错的候选作废,换成 10.0.2.31:3306/orders(挂在 order-db-01)和 LINE-0007(线路,接在 edge-rt-01);I-LIC 驳回路径的告警对象视图显示 8 个(生效 4、候选 4),主机 6 台;任务视图多出一条重新摄入任务;ruleset_version 递增 |
| 6 | 库详情 · 概览与设置:导出快照,用算法包处理同一份数据:python3 -m alertalgo /tmp/aa/alerts.csv -o <目录> --library <快照目录> | 简报【解析】段与直接用 library.json 处理一致:日志平台 4组 10/0/33;巡检平台 2组 3/0/36;基础监控 4组 1/0/31;网络监控 1组 8/0/0;安全平台 1组 0/0/4;应用监控 1组 0/0/4(第 5 步驳回 I-LIC 时;I-LIC 确认后巡检平台变为 39/0/0)。【范围与噪音】段两种情况都是 已确认噪音命中 36 条:噪音标注与解析规则分开确认,互不影响 |
第 4、5 步的对象数、主机数、错的候选,是把 library.json 的规则全部改成待确认、和不改,各跑一次算法包得到的。第 2 步要求导入时按分组键建分组行(没有样本、状态为新),规则挂在上面,摄入后样本和统计补上。如果 kb 只能把规则挂在已存在的分组上,第 2 步拆成两次:先导入设置、映射、约定,摄入后再导入解析规则和噪音。【待确认:kb 第 1 期实施者】
6. 权限与可见性
规则沿用 docs/kb-code-team-permissions.md 第 2.2 节,权限挂在 kb 矩阵行下(设计第 1.1 节)。
| 动作 | 允许条件 |
|---|---|
| 在列表里看到、进入、查对象、导出快照 | 库的 team_id 是当前团队,或库的可见范围是全部团队 |
| 新建库 | 当前团队成员,且 can_add |
| 编辑设置、录入、导入、确认、驳回、撤销、上传摄入、停用库 | 库的 team_id 是当前团队,且 can_edit(设计第 7.2 节第 5 步) |
| 删除库 | 2026-10-09 已定:首期仅停用,不提供删除 |
- 其他团队的库:列表里名称旁标「只读」、不显示待确认数;库详情标题旁显示「只读 · 属于 <团队>」,不渲染写按钮,同代码管理按
canManage渲染的做法。kb 在库的返回里带canEdit、canDelete。 - 治理智能体只写待确认(设计第 8 节第 9 条),界面上它的提交显示「治理智能体」和会话 ID。
- 经平台 KB 代理的 POST 一律按
kb:write签(packages/server/src/routes/kb-proxy/proxy.ts第 110–112 行)。各个「试算」接口是 POST,只读用户调不了;本方案只给有编辑权限的人显示试算,代理不用改。
7. 关键取舍
- 一项菜单,列表 → 库详情,换来库的层级看得见、链接指向确定的库、加主题不改菜单。代价是只有一个库时每次多点一次;告警主题里是库内页签加主题内按钮组两层切换。
- 告警对象和解析规则两个视图看同一批数据,换来既能从规则看产出(确认用),也能从对象看来源(使用、核对、以后对账用)。代价是同一行在两处出现,状态和来源必须取自同一个接口口径,不能两边各算。
- 没有确认规则的分组也写入,标候选,换来新模板在治理前也有对象和关系可查,RCA 能用。代价是多一个状态,查询、快照都要按状态过滤;错的候选会占对象键,作废后键不复用;每一行要记全部来源。
- 抽屉多处复用(解析规则、对象、约定的抽屉在待确认、各视图、预览里打开都是同一个),换来入口不同、行为一致。代价是抽屉都要能单独打开,kb 要能按 ID 取单项。
- 规则编辑只有对象、类型、主机、分类做成表单,其余用 JSON,换来第 1b 期不用为六种写法各做一套表单。代价是改取法的人要读得懂写法,靠试算兜底。
- 菜单不加待确认徽标,与代码管理一致。代价是积压要进页面才看得到;库列表的待确认列部分弥补。
- 批量确认只放给对象键不变的解析规则,换来事实类条目(约定、噪音、依赖、冲突)和会改对象键的规则每条都有人看过。代价是治理智能体一次提交几十条约定时,人要逐条点。
8. 影响面
8.1 aimp-platform
| 文件 | 改动 |
|---|---|
packages/ui/src/layout/AimpLayout/sharedSemanticMenu.js(新)及测试 | 注入一项「语义管理」(路径 /sem,没有子项),插在 /code 之后;照 sharedCodeMenu.js |
packages/ui/src/layout/AimpLayout/useShell.js | 加 semEnabled 与 setSemEnabled,在第 366 行的菜单加工链里加一层 |
packages/ui/src/layout/AimpLayout/index.jsx | 第 105 行旁加 setSemEnabled(config?.SEM_ENABLED === 'true') |
packages/ui/src/layout/AimpLayout/navigationDecor.jsx | 给 /sem 配图标 |
packages/ui/src/views/semantic/(新) | routes.jsx(/sem、/sem/:libraryId/*,按 SEM_ENABLED 守卫,同 CodeGraphEntry);库列表页、库详情框架(返回链接、库名、页签);库内 4 个页签与告警主题 6 个视图;对象、解析规则、约定等抽屉;服务层(经 /kb/sem/...) |
packages/ui/src/routes/MainRoutes.jsx | 第 86 行旁加入语义管理的路由 |
packages/server/src/services/settings/index.ts | 第 41 行旁加 SEM_ENABLED:配了 kb 地址且 SEMANTIC_ENABLED !== 'false' |
平台 KB 代理把 /api/v1/kb/* 原样转给 kb(kb-proxy/proxy.ts 第 30–33 行),新接口不用改代理。侧栏、useShell.js 的选中和放行逻辑按前缀匹配,/sem/<库 ID>/… 不用改(3.1 节)。
8.2 界面需要 kb 第 1 期提供的接口
接口契约只在一处维护:docs/alert-semantic-design.md 第 7.7 节(路径、参数、返回的要点、签名动作)。本节只列每个页面用到哪几组。
| 页面 | 设计第 7.7 节里的接口 |
|---|---|
| 运维语义库列表、建库 | 库列表、建库 |
| 概览与设置 | 库信息、概览、导入、导出快照 |
| 待确认 | 待确认计数;各类列表复用下面各行,带 status=pending |
| 语义约定 | 语义约定(列表、新建、确认动作、试算) |
| 谓词 | 谓词 |
| 告警对象 | 告警对象(对象列表与搜索、对象详情、关系、未解析目标、冲突、依赖候选) |
| 解析规则 | 解析规则(列表、详情、版本、累积产出、试算、确认、驳回、撤销、批量确认) |
| 列映射 | 列映射(两部分读写、分组部分确认、列体检) |
| 噪音 | 噪音(列表、新增、确认要 basis、试算) |
| 任务 | 任务(上传与预检、摄入、任务列表与详情、覆盖) |
| 设置 | 告警设置(读写、条件试算) |
上传预检(图 11 对话框里的条数、时间、必需字段、已覆盖小时)由 kb 在上传后返回,不在浏览器里解析 CSV:原始告警一条记录可能跨多行(虚构数据里 5 条正文带换行),浏览器按行切会算错条数。
8.3 设计文档的对应改动(2026-10-08 已并入)
界面讨论中定下的设计改动已经写进设计文档,不要再按本节重做一遍。对应关系:
| 改动 | 写在哪 |
|---|---|
| 列映射按列的性质分两部分;对象部分的默认推断保存即生效〔拟〕 | alert-semantic-design.md 第 3.1、4.3a 节;alert-data-standard.md 第 3.1 节 |
| 没有已确认规则的分组也写入,标候选;状态与来源表〔拟〕;摄入只用已确认规则 | alert-semantic-design.md 第 4.7、6.1 节 |
| 确认时固定继承字段〔拟〕;确认、驳回、撤销、批量确认的规则;显式对象类型〔拟〕;纵向关系按对象类型推出 | alert-semantic-design.md 第 3.4、4.4 节 |
| 预览三块怎么算;确认、撤销时库里的变化;重新摄入〔拟〕 | alert-semantic-design.md 第 6.5 节 |
| 导入〔拟〕 | alert-semantic-design.md 第 6.6 节 |
| 统计覆盖按声明时间段;重新摄入先清整小时;对象键变了统计不迁移 | alert-semantic-design.md 第 5.1 节 |
快照不含候选;analyze 用候选〔拟〕 | alert-semantic-design.md 第 7.4、7.5 节 |
| 上传预检;上传文件保留 | alert-semantic-design.md 第 7.6 节 |
| 界面接口 | alert-semantic-design.md 第 7.7 节 |
噪音 reason 拆成 description 与 basis;行为范围的四个键 | alert-semantic-design.md 第 4.4 节 |
| 语义约定的定义与判断标准;「谁用它」「影响」 | alert-semantic-design.md 第 3.6、4.5 节;ops-semantic-library.md 第 3.3 节 |
| 谓词怎么维护 | ops-semantic-library.md 第 3.5 节 |
| 界面结构;术语(解析规则、列映射、告警对象、默认推断) | ops-semantic-library.md 第 6 节;alert-semantic-design.md 头部的术语对照;alert-semantic-handoff.md 第 3 节 |
| 已定事项与〔拟〕事项、待确认清单 | alert-semantic-handoff.md 第 3、4 节(设计文档决定记录 R8–R12) |
9. 未决问题
2026-10-09:第 1 期方案已由用户统一批准。来源使用独立表;无样本先建分组;冲突按来源版本持久裁决;模板模式按代次隔离;保存遮罩重遮样本和展示副本;首期仅停用库;analyze 进入任务列表但不写摄入统计。具体接口以告警设计第 7.7 节为准。
已定(用户 2026-10-08):
- 字段按列的性质分两层;没有确认规则的分组也写入,用状态区分。
- 菜单一项「语义管理」,运维语义库列表 → 库详情;只有一个库时也显示列表。
- 告警主题里单独设「告警对象」,含对象、关系、未解析目标,留出 CMDB 对账的位置。
- 语义约定以「写法 → 指什么」呈现,列出谁用它和影响,正则作为细节;噪音确认时由人填依据,智能体写的只作描述。
| # | 问题 | 影响 | 谁定 | 最晚 |
|---|---|---|---|---|
| 1 | 页面结构与画法:2026-10-08 用户认可第四版,更细的交互等有真实数据再看 | 第 3、4 节 | 用户(已答) | — |
| 2 | 告警主题的缺省视图是「告警对象」,排第一 | 3.2 节 | 用户 | 第 1b 期开工前 |
| 3 | 做「导入语义」,分「导入为待确认」「导入并确认」两种模式 | 闸门能否不靠治理智能体走通;客户旧规则的迁移入口 | 用户 | 第 1 期接口定稿前 |
| 4 | 批量确认只放给样本全过、谓词已选、对象键不变的解析规则 | 4.4 节 | 用户 | 第 1b 期开工前 |
| 5 | 对象类字段的默认推断不单独确认,保存即生效 | 4.10 节;设计第 4.3a 节 | 用户 | 第 1 期建表前 |
| 6 | 快照不含候选,analyze 用候选并标出 | 4.9 节第 7 条;设计第 7.5 节 | 用户 | 第 1 期 |
| 7 | 确认时可选「重新摄入近 7 天」,前提是摄入用的上传文件保留 7 天 | 4.9 节第 6 条;设计第 7.6 节保留期〔拟〕 | 用户、kb 第 1 期实施者 | 第 1 期 |
| 8 | 解析规则显式写对象类型 | 纵向关系的类型能否在界面上看清、改对 | 用户 | 第 1 期建表前 |
| 9 | 一行多来源怎么存:rule_ref 改列表,还是另建来源表 | 4.9 节第 2 条 | kb 第 1 期实施者 | 第 1 期建表前 |
| 10 | 保存遮罩时对已存样本再遮一遍 | 新加遮罩前入库的样本会不会留着敏感信息 | 用户、kb 第 1 期实施者 | 第 1 期建表前 |
| 11 | 冲突的三个处理动作(以左边为准、以右边为准、都不采用)分别把两边置成什么状态 | 冲突抽屉 | kb 第 1 期实施者 | 第 1 期 |
| 12 | 改 template_mode 后分组键全变,旧分组的规则和统计怎么办 | 4.13 节 | kb 第 1 期实施者 | 第 1 期 |
| 13 | 导入时能否按分组键先建分组行(第 5 节第 2 步) | 闸门流程是一步还是两步导入 | kb 第 1 期实施者 | 第 1 期 |
| 14 | 是否提供删除运维语义库;提供时统计、对象、上传文件是否一起删 | 概览与设置的按钮、权限表 | 用户 | 第 1b 期开工前 |
| 15 | 任务视图是否也列 RCA 的 analyze 任务。设计第 4.2 节说 tb_sem_job 记摄入和治理,analyze 也有任务号 | 任务列表的类型筛选 | 用户 | 第 1b 期开工前 |
| 16 | 平台转发上传的请求体上限(交接第 4 节已列) | 上传对话框的大小拦截 | 平台组 | 第 1 期 |
进展(2026-10-09):第 1 期接口与第 1b 期界面都已实施,第 5 节闸门已用浏览器端到端走通;下一步是第 2 期(平台与 agent-base 的工具族),见 docs/alert-semantic-handoff.md 第 5 节。以下是原写的下一步,留作记录:kb 第 1 期按设计文档实现,接口按设计第 7.7 节;第 1b 期等第 1 期接口可用后开工,按第 5 节验收。第 9 节第 3–15 条里标「用户」的事项,同步列在 docs/alert-semantic-handoff.md 第 3 节第二张表和第 4 节,开工到相关部分时先向用户确认。示意图的数据可以重现:synth 用 seed 7 重新生成,alerts.csv、library.json 的 sha256 与本文所用的相同(2026-10-08 实测,alerts.csv 为 2f08473bd36a…),不依赖保留 /tmp/aa。