语义管理界面方案(第 1b 期)

状态:2026-10-08 第四版,用户已认可页面结构(更细的问题等有真实数据再看);设计改动已并入设计文档,见第 8.3 节;2026-10-09 第 1b 期已按本方案实施,实施中改了四处,见下方「实施后修正」;2026-10-10、10-11 又按过流程决定 D1–D9、模板生成方案与关系提取规则改了页面,见下方「2026-10-11 同步」 · 上游:docs/alert-semantic-handoff.md 第 5 节第 1b 期、docs/ops-semantic-library.md 第 6 节(菜单)、docs/alert-semantic-design.md 第 4 节(数据模型) · 参照:aimp-platform packages/ui/src/views/code/(代码管理)、packages/ui/src/views/kb/(知识库管理)

实施后修正(2026-10-09,第 1b 期实施中按用户意见;与下文冲突时以这里为准,实施记录见 docs/plans/semantic-phase1b-implementation.md)
  1. 菜单:「语义管理」改为一级分组,只展开收起;二级菜单「语义库」进列表 /sem/libraries,库详情 /sem/libraries/:libraryId/...,面包屑「语义管理 / 语义库」。取代第三版的「菜单只留一项」和第 2 节表里的「只注入一项」。
  2. 命名:界面统一叫「语义库」,建库时必选类型,目前只有「运维」。下文的「运维语义库」即类型为运维的语义库。
  3. 建库不填时区,新库缺省 +08:00。以后如开放时区设置,放到各主题的设置里,不放库级。
  4. 概览与设置里的库级「公共处理设置」改为「遮罩设置」,只编辑遮罩。
2026-10-11 同步(过流程决定 D1–D9,见 business-flow.html 第 11 节,2026-10-10 实施;模板生成方案 T1–T19,见 ../template-generation/design.html,2026-10-11 实施。与下文冲突时以这里为准;下文的示意图仍是第四版,没有重画)
  1. 「遮罩」改叫「脱敏」:概览与设置里的卡片叫「脱敏设置」,加一行说明它与生成模板时的变量剔除是两回事(D1)。
  2. 「列映射」页改为「全局提取规则」:一个监控系统范围一张表,不再分「分组前使用」「对象默认取法」两个页签;预览后保存即生效,没有待确认;首次接入在一份上传文件上预填内置候选列(D2、D3)。4.10 节作废。
  3. 没有「候选」,也没有「默认推断」:全局取到的值直接生效,告警对象只有生效、作废两种状态;没有已确认规则的分组规则状态显示「仅全局」(D3)。4.9 节作废。
  4. 解析规则抽屉每个字段左边是全局规则(灰色,标「来自全局」),右边是本模板规则;分组标「缺对象」,连续驳回两次的标「转人工」(D3、D4、D9)。2026-10-11 起:列表多选模板「合并」→「确认合并」一步生效,父节点一行(模板号 m: 开头)、展开看成员,在父节点抽屉里撤销;抽屉里「标记为噪音 / 取消」,填说明后立即生效,列表标「噪音」;可按模板号一次查多个。
  5. 告警主题下去掉「噪音」页签:没有噪音标注、噪音确认依据和噪音试算(模板生成方案第 6 节)。4.11 节作废。
  6. 待确认的页签只剩五个:解析规则、模板合并、对象关系(原「依赖候选」)、语义约定、谓词;去掉冲突、噪音、列映射(模板生成方案 T18)。「模板合并」抽屉里看成员的展示文本与样本、依据、证据,确认或驳回。
  7. 告警主题 › 设置末尾加「模板生成」卡片:相似度阈值、关键词序列开关、受保护的错误码、占位符(可调顺序)、分词正则、三类关键词,内置值预填;在保留样本或一份上传文件上预览;库里有 kb 生成的模板时保存要输库代号、换一代(模板生成方案第 4 节)。
  8. 2026-10-11 第二次(用户定):规则抽屉的页签是「规则与预览、相关告警、变体、历史」。「相关告警」把原来的「样本」和「统计与命中率」合在一起,上面是落到这个模板的告警按天的条数(只计上传声明的时段,保留最近一次导入日往前 34 天),下面是保留的样本;字段命中率改为「规则与预览」字段表的「取值率」列(已确认的本模板规则取到值的比例)。变体是剔除变量后的文本,表格展示,只列最近出现的 100 个。
  9. 2026-10-11 第二次(用户定,算法包 2.2.0):去掉通用调用失败词和从正文抽调用目标,静态阶段没有未解析目标。下文 4.7 节的「未解析目标」视图、4.8 节规则抽屉的「未解析目标」页签与「只看未解析目标」筛选、4.9 节设置里的「引用停用词」都已去掉;调用目标改由解析规则的 relations 写明,治理阶段再定怎么展示。
  10. 2026-10-11 第三次(关系提取规则 R1–R13,见 ../relation-rules/design.html,已实施):告警对象下的子页签依次是对象、主机、系统、关系。对象列表去掉「所在主机」「所属系统」两列、按系统与监控系统的搜索和「显示辅助对象」开关,类型按 objectType 字段,下拉列库里现有的类型;「主机」「系统」是 host、system 字段取到的值的去重列表(值、告警数、首次、最近);关系页是五段文本(起点、起点类型、关系、终点、终点类型),按关系、起点或终点包含、状态、来源模板号筛,来源写解析规则的模板号和版本。对象抽屉的关系页按文本相同关联,去掉「两跳邻居」。规则抽屉去掉「对象类型」下拉,字段表下面加「关系提取」列表(名称、起点、关系、终点、两个类型,每项可选原始列、固定值,其余在 JSON 写),试算的样本逐条显示拼出的关系和哪条规则缺哪段。解析规则列表去掉按对象类型筛和「纵向关系」列,「横向关系」列换成「关系提取」。待确认去掉「对象关系」页签,只剩解析规则、模板合并、语义约定、谓词四个。下文 4.7、4.8 节与此冲突的以此为准。
  11. 2026-10-11 第四次(用户定:实际数据里用不到):去掉站点,设置页没有「站点取法」卡片,全局提取规则和字段表里没有「站点」(算法包 2.4.0,kb 迁移 0094)。规则抽屉「相关告警」上面的「告警数量」改为「告警统计」:首次出现、最近出现、统计天数、统计告警数几张卡片(按重复次数计的条数不同时多一张),统计口径放在卡片标题的提示里,下面仍是按天的条数和样本。同日统计不再按 34 天清理(用户定),上面第二次那条里的「保留最近一次导入日往前 34 天」作废。解析规则列表去掉「缺对象」标记,紧跟模板号显示告警数、对象数(取到对象的告警条数)、去重对象数三列(用户定)。「相关告警」的卡片是首次出现、最近出现、统计天数、统计告警数、无对象告警数(值调小、不换行);按天的表是日期、告警数、对象数、去重对象数和各小时告警数,后者是固定 24 格的柱状图,各天同一刻度,悬停看每小时条数。概览的「告警主题」只留告警数、对象数、主机数、系统数、模板数五个数(后四个是去重数);「近 28 天摄入覆盖」(每天 24 小时里有几个小时被上传的数据覆盖,基线据此判断完整日)不再显示,换成最近一年的日历:一格一天、按周成列,颜色是当天新增的模板数(同一色相四档,按有新增那些天的四分位切,最多的那天最深),悬停看当天的新增模板、告警数、模板数、对象数、无对象告警数;缺对象的提示条去掉。
修订记录(都是 2026-10-08,按用户意见)
第四版
  1. 语义约定(4.5 节、图 4):先讲它存什么、和解析规则怎么分;列表主列改为「写法 → 指什么」,加「谁用它」「影响」两列,影响是逐条去掉约定重跑实测的;正则挪进抽屉的规则细节。
  2. 噪音(4.11 节、新增图 10):讲清是什么、为什么要、谁写;用去掉产品标签的虚构数据实测有无标注的差别;确认时依据由人填,智能体写的只作描述。
第三版
  1. 菜单只留一项「语义管理」,点进是运维语义库列表,再进某个库;概览与设置、待确认、语义约定、谓词、告警主题都在库详情页里,照知识库管理「列表 → 进库」的做法。只有一个库时也不跳过列表。取代第二版的「平铺菜单 + 页头切换库」。
  2. 告警主题里恢复独立的「告警对象」,含对象、关系、未解析目标三个视图,并留出以后 CMDB 对账的位置。解析规则的预览保留,两边互相跳转。
第二版
  1. 字段按列的性质分两层:分组前就要用的列在库级「列映射」里配;对象、主机、系统这类含义随模板变的字段,归各模板的解析规则。
  2. 没有确认规则的分组也写入对象和关系,标「候选」;规则确认后转「生效」(4.9 节)。
  3. 「分组与模板」改为「解析规则」,每条规则带预览:样本逐条、累积产出、确认后的变化。

本文定平台前端「语义管理」的页面结构和交互,供第 1b 期实施;第 8.2 节列出每个页面用到哪些 kb 接口(契约在设计文档第 7.7 节),第 8.3 节列出界面讨论带来的设计改动写在设计文档哪里。读者是确认方案的用户,以及第 1 期、第 1b 期的实施者。

示意图的数据来自共享算法包的虚构数据生成器(aimp-kb backend/app/semantic/alertalgo/synth.py,seed 7):

cd aimp-kb/backend/app/semantic python3 -m alertalgo synth -o /tmp/aa python3 -m alertalgo /tmp/aa/alerts.csv -o /tmp/aa/out --library /tmp/aa/library.json # 告警 130、对象 8、主机 6、信号 16、分组 13;简报 3359 字符

生成器只产出一批约 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 期的界面要让下面三类操作在平台里完成:

  1. 建库和配置:建运维语义库;配处理设置(时区、遮罩、范围过滤、监控系统取法等),保存即生效。
  2. 确认规则:处理治理智能体提交的解析规则、列映射、语义约定、噪音、依赖候选,以及摄入时发现的冲突。确认前要能看到规则在样本上解析成什么、产出了哪些对象和关系、确认后会变什么。
  3. 查看与排查:回答「这条告警为什么被解析成这样」「这台主机有哪些标识、上面运行哪些实例」「哪几个小时还没摄入」。

第 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 的好处:

只有一个库时也显示列表,不自动进库(用户 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)演示团队告警303-02 09:550 天全部团队启用进入
子公司 B(corp-b)只读 示意团队 B告警—03-01 23:007 天全部团队启用进入
只读的库不显示待确认数:当前团队没有确认权限。

图 1 整页:侧栏只有一项「语义管理」,点进是运维语义库列表。第一行的待确认数、最近摄入、基线天数来自虚构数据(第 4.4 节的 3 项待确认含一组示意);第二行是为了演示多个库和只读而补画的。

4. 页面

4.1 运维语义库列表

列:名称(代号)、所属团队、主题、待确认数、最近摄入、基线天数、可见范围、状态。筛选:所属团队、状态、名称或代号搜索。点行或「进入」到库详情的概览与设置。

4.2 库详情的框架

库详情页顶部固定三样:「← 运维语义库」返回链接;库名(代号)、所属团队标签、状态,别的团队的库再加「只读 · 属于 <团队>」;库内页签,「待确认」带数。页签切换改路径(3.2 节),刷新、分享都落在同一个页签上。告警主题页签下面再有一行按钮组切 6 个视图,「告警对象」视图右侧有「查对象或标识」搜索框。

← 运维语义库演示环境(demo)演示团队启用
概览与设置待确认(3)语义约定谓词告警主题
库信息编辑停用
代号demo名称演示环境所属团队演示团队可见范围全部团队 缺省〔拟〕状态启用
版本也写进快照和结果包的 manifest.json
共享部分shared_version 1 示意 语义约定、谓词确认或撤销时加 1告警规则ruleset_version 1 列映射、解析规则、噪音确认或撤销时加 1算法包algo_version 1.0.0 分组键用它算
导出快照导入语义
告警主题启用进入告警主题 →
8
告警对象:生效 4 · 候选 4 推算
6
主机(另有系统 6、监控系统 6、站点 1)
13
分组:解析规则已确认 4 · 待确认 2 · 无规则 7
130
最近一次摄入:03-02 08:00–09:55
0 天
基线:需要 7 个完整的天;不满时 RCA 不出新出现、激增、稀有、周期判断
近 28 天摄入覆盖(每格一天,蓝色高度 = 已摄入小时数 / 24)
02-0302-1002-1702-2403-02:2/24 小时
待确认本库各主题合计去处理 →
解析规则 2语义约定 1列映射 0噪音 0依赖候选 0冲突 0谓词 0
公共处理设置保存即生效,从下一次摄入起作用编辑
时区+08:00遮罩1 条:联系人 联系人[::][^,。]*

图 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 概览与设置

内容从上到下:

  1. 库信息:代号、名称、所属团队、可见范围、状态。按钮:编辑、停用。
  2. 版本:shared_version,以及每个主题的 ruleset_version、algo_version。RCA 结果包和快照的 manifest.json 也记这三个数,结果对不上时拿来比。
  3. 主题卡片:每个启用的主题一张。告警卡片给对象数(按生效、候选)、主机数、分组数(按规则状态)、最近一次摄入、基线天数、近 28 天的摄入覆盖。
  4. 待确认合计:按种类的数,点进「待确认」页签。
  5. 公共处理设置:时区、遮罩。告警自己的处理设置在告警主题的「设置」视图(4.13 节)。
  6. 导入与导出:导出快照(设计第 7.5 节);导入语义。

导入语义是本文新增的入口,有两个用处:第 1b 期闸门没有治理智能体,要靠它把 /tmp/aa/library.json 这种已有规则放进库(第 5 节);设计第 2 节要求把 alerttx、rca_agent 里的客户写法迁到该客户的语义约定,也要一个导入入口。导入接受快照目录的打包或 library.json(算法包 --library 认的两种格式),分两种模式:「导入为待确认」(缺省,逐项进待确认页)和「导入并确认」(迁移已经审过的规则)。处理设置和对象类字段的默认推断不走确认(4.10 节),导入时直接覆盖,覆盖前列出新旧差异。

遮罩的时间差:样本在摄入时遮罩后入库(设计第 4.3 节),新加一条遮罩规则,之前入库的样本不受影响。推荐保存遮罩时让 kb 对已存样本再遮一遍:已遮罩的文本再遮只会多遮,不会还原原文。【待确认:用户、kb 第 1 期实施者】

4.4 待确认

2026-10-11:页签只剩解析规则、模板合并、对象关系、语义约定、谓词五个,下文的列映射、噪音、冲突、依赖候选作废,见文首「2026-10-11 同步」第 6 条。

本库各主题的待确认项。一个页签一个种类,页签标题带待确认数。筛选:主题(全部、共享、告警)、状态(缺省待确认,可切已确认、已驳回、全部)。排序:漂移的解析规则排最前,其余按提交时间从早到晚。漂移表示已确认的规则在新数据上命中率下降,当前的 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_noisekb 统计出候选,治理智能体写条件和描述;人行为范围与最近一批的实际值、有无这条标注的效果对比、人填的依据(4.11 节)不可以:每条都要人填依据,人工确认就是「频率以外的依据」(设计第 4.4 节)
依赖候选tb_sem_alert_relation,basis=suggested治理智能体证据条数、出现天数、样例告警不可以
冲突tb_sem_alert_object_ident、tb_sem_alert_relation,status=conflictkb 摄入冲突的两边,各自的来源规则和证据不可以
谓词tb_sem_predicate人适用对象类型、量化格式、与已有谓词的对照不可以

冲突只在生效的行之间算:两条已确认规则把同一个标识指向两个对象,或同一个实例挂在两台主机上。候选和生效说法不一致不算冲突,它会出现在相关解析规则的预览里,确认那条规则时处理。

← 运维语义库演示环境(demo)
概览与设置待确认(3)语义约定谓词告警主题
解析规则 2列映射语义约定 1噪音依赖候选冲突谓词
主题全部 ▾状态待确认 ▾☐ 全选本页可确认项
☐日志平台 · L-DB新分组示意
连接数据库超时 jdbc:mysql://<IP>:<N>/orders at demo.Dao.query(Dao.java:<N>), "retry"
对象:主机(继承)· 横向:jdbc → 实例 样本 5/5 变体 2
☐巡检平台 · I-LIC新分组
巡检脚本 ntp-check 退出码 <N>
谓词 unclassified,不能批量确认
解析规则 · 日志平台 / L-DB新分组待确认示意✕
分组键 16ed9bd4c415c7de · 本批 5 条 · 变体 2(连接数据库超时 3、被拒绝 2)· 提交:治理智能体,<会话 ID>
连接数据库超时 jdbc:mysql://<IP>:<N>/orders at demo.Dao.query(Dao.java:<N>), ""retry""
规则灰色 = 从列映射的默认推断继承,确认本规则即一并确认
项取法来自
对象同主机(obj 列是 pay-app-02,不符合「主机/实例名」写法)列映射默认
对象类型主机(对象等于主机,数据标准第 3.3 节)推出
主机 / IPhost_name 去掉 IP 前缀 / host_ip列映射默认
系统 / 应用biz_sys / app_name列映射默认
纵向关系belongs_to → 系统;observed_by → 监控系统;located_in → 站点由上面的字段推出
横向关系reported_call_failure:msg 正则 (jdbc:\S+),目标类型 url,角色「数据源」本模板
分类日志 · 谓词 call.fail 调用失败 ▾ · L7 中间件与数据库 · 应用层 · 调用失败本模板
说明应用连接订单库失败(超时或被拒绝)本模板
预览 · 样本逐条5/5 通过kb 按这一版规则重算存着的样本
告警变体对象系统横向目标 → 解析到校验
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作废
预览 · 确认后的变化试算范围:存着的样本与最近一批保留的上传文件
项现在确认后
日志平台按已确认规则解析的告警1015
引用(refs.csv)54
告警规则版本ruleset_version 1ruleset_version 2
☐ 确认后用保留的上传文件重新摄入近 7 天(本组对象键不变,不需要)驳回编辑后确认确认

图 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 节):

和解析规则的分界:解析规则说位置(在某个模板的告警里,哪一列、哪段文字是什么),约定说含义(一个写法本身指什么,不管出现在哪)。判断标准:换一个模板、换一个主题(以后的指标标签、日志、链路)还成立的,是约定;不成立的,写进那个模板的解析规则。以 L-GWSET 为例:规则只说「目标取 errorCode= 后面那串,目标类型是错误码」;约定说「XX-E-数字-代号 的最后一段是系统代号」「SETTLE 是清算系统」。以后日志主题里出现同一个错误码,用同一条约定,不再确认一次。所以约定整库一份、各主题共用、必须人确认:录错一条,所有用它的解析都错。

约定里一半是对照表(系统别名、IP 规划的网段对、服务地址指向系统、近义词),一半是写法规律(主机命名、错误码格式、错误码指向系统)。写法规律要用正则表达,但它解析的是一个标识,不是一条告警。界面上一律先给「写法 → 指什么」,正则放进抽屉的「规则细节」。

标识规则是 CMDB 缺失时的替代:ops-semantic-library 第 3.2 节把主机命名、IP 规划列为纵向关系的推断来源,CMDB 是事实源。接入 CMDB 以后,IP 规划、系统别名这类约定拿 CMDB 核对,不一致时以 CMDB 为准。

列表列:种类、名称、写法 → 指什么(用本库出现过的真实写法举例)、谁用它、影响、状态。「影响」是这条约定在最近一批数据上改变了什么,kb 按「去掉这条重算一次」得到;为 0 的照样列出,看得出它现在没起作用。抽屉:写法 → 指什么的试算、谁用它、确认或撤销后的变化、依据、规则细节(正则、去前缀、大小写)、历史。人工新建约定有两个保存按钮:「保存为待确认」「保存并确认」。

← 运维语义库演示环境(demo)演示团队
概览与设置待确认(3)语义约定谓词告警主题
种类全部 ▾状态全部 ▾新建约定
种类名称写法 → 指什么谁用它影响(最近一批)状态
标识规则:这个写法指哪个对象
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(去掉则不算调用失败,这条关系消失)已确认
主机命名 · 主机待确认示意✕
这条约定回答:主机名里哪一段是系统、角色、序号。提交:kb 摄入发现候选(主机名按分隔符拆段后段数一致),治理智能体补全
写法 → 指什么(试算)取本库出现过的主机名;系统代号再查系统别名
写法(host_name 列)系统代号角色序号对到系统
10.0.11.21-pay-app-01payapp01支付系统
10.0.11.22-pay-app-02payapp02支付系统
10.0.11.41-gw-app-02gwapp02别名未登记
10.0.11.51-order-app-01orderapp01别名未登记
10.0.2.31-order-db-01orderdb01别名未登记
10.0.9.1-edge-rt-01edgert01别名未登记
edge-rt-01 是网络设备,「edge」不是业务系统。正则能拆段,但系统代号这一段不全是系统。
谁用它 · 确认后的变化
0 组解析规则引用。本库的系统取自 biz_sys 列,确认这条现在不改变任何结果。以后某个模板没有系统列时,它的规则可以写 {lookup: "host_naming", key: {from: "host_name"}, field: "system"} 取系统。
依据
6/6 个主机名匹配
规则细节 ▸ 收起
去掉 IP 前缀是转小写是正则^(?P<system>[a-z]+)-(?P<role>[a-z]+)-(?P<index>\d+)$
驳回编辑后确认确认

图 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 的「影响」一列说明了三件事:

4.6 谓词

列表列:域、谓词键、名称、适用对象类型、量化格式、状态、引用(已确认解析规则里用到它的组数)。首版 12 个谓词照 ops-semantic-library 第 3.5 节,第 1 期迁移时以已确认状态写入每个新建的库:这份清单由用户在该文档里确认(目前待确认),不在界面上逐条确认,所以闸门流程的待确认页里没有这 12 条。

谓词页签不画示意图:只有一张表和一个新增对话框,和语义约定的列表同一个形态。

4.7 告警主题 · 告警对象

告警对象是告警主题最重要的产出:RCA 的语义切片、lookup 查上下游都用它,以后的 CMDB 对账也按它做。有些问题只能从对象这一侧回答:库里一共有多少台主机、某个系统下有哪些对象、哪些对象还只是候选、哪些对象没有任何监控系统覆盖(没有 observed_by)。所以它单独成一个视图,并且是告警主题的缺省视图。

视图里用按钮组再切三样:

页面固定一行说明:「这里的对象和关系是从告警推出来的。对象和纵向关系以 CMDB 为准,横向关系以链路为准。」(ops-semantic-library 第 3.2 节)。

← 运维语义库演示环境(demo)演示团队
概览与设置待确认(3)语义约定谓词告警主题
告警对象解析规则列映射噪音任务设置告警规则版本 ruleset_version 1
这里的对象和关系是从告警推出来的。对象和纵向关系以 CMDB 为准,横向关系以链路为准。
对象 8关系未解析目标 1查对象或标识状态生效、候选 ▾系统全部 ▾监控系统全部 ▾
主机 5网络设备 1线路 1数据库实例 1中间件实例 1业务系统 6监控系统 6站点 1推算
对象键类型所在主机系统状态来源分组告警末次
pay-app-01主机本身支付系统生效B-PCPU(已确认)、B-CPU、B-OOM2609:55
gw-app-02主机本身网关系统生效L-GWSET(已确认)、L-GWPAY、I-LIC、S-SEC5109:50
order-db-01主机本身订单系统候选I-LIC1209:50
pay-app-02主机本身支付系统候选I-LIC、B-DISK、L-DB2309:50
pay-app-01/server1中间件实例pay-app-01支付系统候选A-HEAP409:17
10.0.2.31:3306/orders数据库实例order-db-01订单系统生效I-ORD(已确认)309:28
order-app-01主机本身订单系统候选L-ORDPAY309:20
LINE-0007线路edge-rt-01网络生效N-LOSS(已确认)808:55
接入 CMDB 以后(对象主题,第 1b 期不做):这张表加一列「CMDB」(已匹配、人已确认、冲突、未登记)和对应筛选;筛「未登记」即「CMDB 未登记」清单,可导出交给客户。

图 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。

← 运维语义库演示环境(demo)
概览与设置待确认(3)语义约定谓词告警主题
告警对象解析规则列映射噪音任务设置
10.0.1.21
pay-app-01 · 主机 · 匹配标识 ip 10.0.1.21(IP 规划)
按 IP 规划,10.0.1.21 是 10.0.11.21 的另一侧
对象键类型状态
pay-app-01主机生效
gw-app-02主机生效
order-db-01主机候选
pay-app-01主机生效✕
首次 03-02 08:00:20 · 末次 09:55:35 · 告警 26(B-CPU 24、B-OOM 1、B-PCPU 1)
标识
类型值状态来源
hostnamepay-app-01生效B-PCPU 规则(继承列映射默认 host);B-CPU、B-OOM 默认推断
ip10.0.11.21生效同上(host_ip 列)
ip10.0.1.21生效约定:IP 规划「业务网与管理网」
关系证据条数推算
方向类型对端状态来源证据
出belongs_to支付系统生效B-PCPU 规则 1 条;B-CPU、B-OOM 默认推断 25 条26
出observed_by基础监控生效同上26
出located_inA站生效同上26
入runs_onpay-app-01/server1候选A-HEAP 默认推断4
入reported_call_failuregw-app-02候选L-GWPAY 默认推断(通用抽取,经 IP 规划解析)25
入reported_call_failureorder-app-01候选L-ORDPAY 默认推断(通用抽取,按主机名解析)3
1–2 跳邻居
pay-app-01/server1(runs_on,候选)· 支付系统(belongs_to)→ pay-app-02(同属支付系统)· 基础监控 · A站
CMDB 对账
接入 CMDB 以后在这里显示:对上的 CMDB 配置项、按哪个标识对上的、属性和纵向关系里 CMDB 与告警推断不一致的地方(以 CMDB 为准,告警推断标 conflict 进待确认)。第 1b 期不做。

图 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 告警主题 · 解析规则

2026-10-10 起没有「从列映射默认推断继承的字段」:没写的字段随全局提取规则走,确认时不固定(D3b)。2026-10-11 起列表一行一个有效模板,合并的父节点展开看成员,可多选合并、可标噪音,见文首「2026-10-11 同步」第 4 条。

一行一个分组。每组的解析规则由三部分合成:从列映射默认推断继承的字段、本模板自己的规则(设计里模板语义的 fields、classify、relations)、引用到的语义约定。列表直接给出每组「对象从哪取、是什么类型、主机从哪取、推出什么纵向关系、横向关系怎么取」,不用点开就能对比各模板。

← 运维语义库演示环境(demo)演示团队
概览与设置待确认(3)语义约定谓词告警主题
告警对象解析规则列映射噪音任务设置
监控系统全部 ▾规则全部 ▾对象类型全部 ▾分组状态未退役 ▾☐ 只看有未解析目标的13 个分组,按末次出现倒序
监控系统模板号模板文本(遮罩、归一化后)告警对象取自对象类型主机取自纵向(类型相关)横向规则标记
基础监控B-CPUCPU使用率 <PCT>,超过阈值 <PCT>24host_name(默认)主机同对象——默认推断
巡检平台I-LIC巡检脚本 ntp-check 退出码 <N>36host_name(默认)主机同对象——待确认噪音
日志平台L-GWPAY调用支付接口超时 url=http://<IP>:<N>/pay/api25host_name(默认)主机同对象—通用抽取:url → 主机默认推断
巡检平台I-ORD订单表日增量检查:返回行数 <N>,期望 > <N>,<联系人>3host_name 正则 → IP:端口/实例数据库实例按 IP 找runs_on—已确认
日志平台L-DB连接数据库超时 jdbc:mysql://<IP>:<N>/orders at demo.Dao.query(Dao.java:<N>), "retry"5host_name(默认)主机同对象—msg 正则 jdbc → 实例待确认未解析 1
日志平台L-GWSET调用清算服务失败 errorCode=GW-E-1001-SETTLE10host_name(继承)主机同对象—errorCode → 系统(约定)已确认
日志平台L-ORDPAY支付服务通讯中断 target=pay-app-<N>:<N>3host_name(默认)主机同对象—通用抽取:target → 主机默认推断
应用监控A-HEAPJVM 堆内存使用率 <PCT>4obj 列(默认)中间件实例host_name(默认)runs_on—默认推断
安全平台S-SEC主机防护平台检测到弱口令登录尝试4host_name(默认)主机同对象——默认推断范围外
基础监控B-PCPU进程 java CPU 占用 <PCT>1host_name(继承)主机同对象——已确认
基础监控B-OOMOut of memory: Kill process <N> (java) score <N>1host_name(默认)主机同对象——默认推断
基础监控B-DISK磁盘使用率 <PCT>,超过阈值 <PCT>6host_name(默认)主机同对象——默认推断
网络监控N-LOSS<OBJ> 线路丢包,从设备 <OBJ> ping <IP> 丢包率 <PCT>8msg 正则 LINE-\d+线路host_name(继承)terminates_atping 目标 → probes已确认1 变体范围外

图 7 内容区:告警主题的解析规则视图。分组、告警数、模板文本取自 /tmp/aa/out/templates.csv(同一分组的变体合并成一行);规则状态取自 library.json,L-DB 的待确认是演示状态;「对象取自」等五列按各组规则(没有规则的按 field_map)写出,灰色表示来自列映射的默认推断;对象类型按数据标准第 3.3 节改写。

列与行为:

编辑、驳回、撤销

确认会改对象键时:I-ORD 的例子

L-DB 确认前后对象键不变,确认只是把候选转成生效。有的规则会改掉默认推断出的对象。闸门流程第 4 步(第 5 节)全部规则还是待确认,实测默认推断产出了两个错的候选:

图 8 是确认 I-ORD 之前它的抽屉。

← 运维语义库演示环境(demo)
概览与设置待确认语义约定谓词告警主题
告警对象解析规则列映射噪音任务设置
监控系统模板号规则
巡检平台I-LIC待确认
巡检平台I-ORD待确认
日志平台L-GWSET待确认
基础监控B-PCPU待确认
网络监控N-LOSS待确认
解析规则 · 巡检平台 / I-ORD待确认✕
本批 3 条(A00061、A00097、A00114)· 闸门流程第 4 步之后、第 5 步确认之前
规则
项取法来自
对象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 条记在候选对象名下不迁移,原始告警没有保存;勾选下方选项,用保留的上传文件重算
☑ 确认后用保留的上传文件重新摄入近 7 天(对象键变了)驳回编辑后确认确认

图 8 内容区:确认 I-ORD 之前的解析规则抽屉。「现在」一列是把 library.json 的全部规则改成待确认后重跑的结果(对象 8、主机 7,refs.csv 里 jdbc 目标解析到主机 order-db-01);「确认后」一列是原 library.json 的结果(主机 6,jdbc 目标解析到实例)。「对象类型」一行由本模板显式写出是本版的提议〔拟〕,见第 8.3 节第 5 条。

4.9 候选与生效

2026-10-10 起作废:没有候选,全局取到的值直接生效(D3);2026-10-11 起也没有冲突。状态只有生效、作废,见设计文档第 4.7 节。

用户 2026-10-08 确认:没有确认规则的分组也写入对象和关系,用状态区分。本节定这个状态怎么变,告警对象视图、解析规则预览、对象抽屉里的「候选」「生效」都按它显示。

  1. 摄入只用已确认的规则。有已确认规则的分组按规则产出;没有的(含规则待确认、被驳回)按列映射的默认推断和通用抽取产出。待确认的规则不参与摄入,只在预览里试算。这样驳回一条规则时,库里没有它留下的东西要清。
  2. 每一行记全部来源。对象、标识、关系各记「哪个分组、哪一版规则」或「哪条约定」产出了它。pay-app-01 的主机名同时来自 B-PCPU(已确认)和 B-CPU、B-OOM(默认推断),三个来源都记。
  3. 状态按来源算。有一个来源是已确认的规则或约定 → 生效;只有默认推断的来源 → 候选;来源都没了 → 作废。状态是算出来的,不是逐行确认的,设计第 4.7 节「确认放在规则这一级」不变。关系的状态和它两端对象的状态分开算:I-ORD 确认后 runs_on 生效,它指向的 order-db-01 只由 I-LIC 的默认推断产出,仍是候选(图 5)。
  4. 确认一条规则:本组的已确认规则记为它产出的那些行的来源,这些行转生效;本组不再是规则不产出的那些行的来源,那些行按第 3 条重算,没有别的来源就作废。作废的对象键不复用。
  5. 撤销一条已确认规则:本组不再是这些行的已确认来源,按第 3 条重算;同一行还有别的已确认来源时保持生效,否则作废。本组按默认推断的新产出要等下一次摄入才出现(第 1 条:只有摄入产出行),撤销时可同样选择重新摄入近 7 天。
  6. 统计不迁移。统计挂在(分组,对象)上,原始告警不入库(设计第 5.1 节),对象键变了没法按新键重算。确认时可选「用保留的上传文件重新摄入近 7 天」:摄入用的上传文件成功后保留 7 天〔拟〕(设计第 7.6 节)。对象键不变时这个选项置灰。
  7. 快照不含候选〔拟〕,同快照现在不含 suggested、pending 的做法(设计第 7.5 节)。analyze 处理时用候选,结果包里标出「候选」。
  8. 预览的范围:「确认后的变化」只能在存着的样本和最近一批保留的上传文件上试算,不覆盖全部历史。抽屉里写明这一点。

4.10 告警主题 · 列映射

2026-10-10 起作废:页面改为「全局提取规则」,一张表、保存即生效,见文首「2026-10-11 同步」第 2 条和设计文档第 4.3a 节。

用户 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 组),分组键对不上导入的规则。

← 运维语义库演示环境(demo)
概览与设置待确认(3)语义约定谓词告警主题
告警对象解析规则列映射噪音任务设置
分组前用的列 · 语义库默认已确认改了可能改分组键编辑按监控系统覆盖
标准字段写法原始列与参数试算(A00091)
alertIdfromalarm_idA00091
happenedFirstfromoccur_time · 时间格式 %Y/%m/%d %H:%M:%S2026-03-02 09:15:00
severitymaplevel · 紧急→60 重要→50 警告→40 提示→3040
contentfrommsg连接数据库超时 jdbc:…
templateIdfromtpl_idL-DB
tagsfrommark稀有(原值 rare)
ruleNamefromruleapp_log
未映射:ruleId(同一对象的不同告警只能按内容区分)、happenedLast 与 count(聚合告警只能按 1 次算)、recovered(恢复状态一律未知)。监控系统、站点按告警设置从 source 取。
对象类字段的默认推断保存即生效〔拟〕只给没有确认规则的分组用,产出一律是候选编辑
标准字段写法原始列与参数试算(A00091)被模板覆盖
hostfromhost_name · 去掉 IP 前缀pay-app-02I-ORD
ipfromhost_ip10.0.11.22I-ORD
objectIdfrom+regexobj · ^([\w.\-]+/\w+)$(空,按主机级取 pay-app-02)I-ORD、N-LOSS
objectNamefromobjpay-app-02
objectTypefromobj_type(空)
resourcefromobj · strip_own objectId、host、ip(空)B-PCPU
systemfrombiz_sys支付系统
appfromapp_namepay-batch
列体检最近一次摄入,按监控系统
原始列巡检平台基础监控日志平台网络监控安全平台应用监控
条数393243844
host_ip363243844
obj363243844
obj_type39320844
mark392443041
app_name0043004
其余 9 列在 6 个监控系统都是 100%,折叠。巡检平台 host_ip、obj 缺的 3 条是 I-ORD,它的 IP 和对象由模板规则从 host_name 取。

图 9 内容区:列映射视图。15 条映射照抄 /tmp/aa/library.json 的 field_map,按列的性质分成上下两部分;试算列是 A00091 按映射取到的值;「被模板覆盖」列取自 library.json 里各组规则的 fields;列体检是对 /tmp/aa/alerts.csv 按监控系统统计的非空条数。mark 列为空表示没带标签,填充率低是正常的,体检只提示,不阻止确认。

4.11 告警主题 · 噪音

2026-10-11 起作废:噪音改为在解析规则抽屉里标记模板,不审批;告警主题下没有这个页签(模板生成方案第 6 节)。

噪音标注是对一个分组的已确认说明:这类告警长期存在、已知、可以不展开。它带一个行为范围:每小时最多多少条、涉及对象最多多少个、不能带哪些标签。RCA 预处理时,范围内的告警归入「背景」,只计数、不展开、不删除;超出范围就照常展开(设计第 4.4 节)。

为什么要它。简报把信号分成注意力、背景、无标签三类(数据标准第 5.2 节)。告警产品打了「高频」「周期」标签的,本来就进背景;没打标签的例行告警落进「无标签」,和真正要看的混在一起。6/11 那份真实数据 1140 条里有 545 条没带任何标签(交接第 5 节),这部分只能靠噪音标注进背景。

谁写。kb 用统计找候选:基线窗内至少 6 天在相近小时出现的「周期或慢性」分组(设计第 5.3 节);治理智能体按基线写出行为范围和一段描述;人确认。智能体只能描述频率和内容,判断不了「可以不管」。确认噪音要有频率以外的依据(设计第 4.4 节),所以确认时「依据」由人填,必填,写已知问题、工单号或计划任务;智能体写的只作为「描述」显示。新库没有 7 天基线时没有候选:要么先回补 28 天,要么头一周没有。

和另外两样不同。「范围外」是处理设置,表示不归这里管,配了即生效(4.13 节);「计划内」是解析规则给变体打的标记,如 N-LOSS 的计划内关闭。

列表列:分组、行为范围、依据、描述、基线天数、来源、状态、最近一批命中。抽屉:行为范围逐项对照最近一批的实际值、有无这条标注的效果对比、近 7 天每天条数、描述(智能体)、依据(人填)。行为范围按整组判:任一项超出,整组照常展开,原来的对象也一起展开。

← 运维语义库演示环境(demo)
概览与设置待确认(4)语义约定谓词告警主题
告警对象解析规则列映射噪音任务设置
分组行为范围状态命中
巡检平台 · I-LIC每小时 ≤ 30 条;对象 ≤ 5 个待确认36
噪音 · 巡检平台 / I-LIC待确认示意✕
模板「巡检脚本 ntp-check 退出码 <N>」· 来源:导入 · 基线 0 天
行为范围 · 对照最近一批
条件范围最近一批结果
每小时条数≤ 3018.7(36 条 / 本批 1.92 小时)满足
涉及对象≤ 53(order-db-01、gw-app-02、pay-app-02)满足
效果对比 · 最近一批
有这条标注没有
I-LIC 的 3 个信号背景无标签
简报:背景4 个信号 / 60 条1 / 24
简报:无标签3 / 146 / 50
行为变了时:同一模板又出现在 3 台新主机上(对象 6 个,超过 5),整组 6 个信号照常展开,命中 0 条。
近 7 天每天条数
基线 0 天,没有数据。有基线后这里是 7 根柱子。
描述 治理智能体 示意
3 台主机每 10 分钟各一条,内容都是巡检脚本 ntp-check 退出码 1。
依据 人填,必填
为什么可以不展开:已知问题及工单号、计划任务、为什么不影响业务……
驳回确认(先填依据)

图 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 天」,这里多出一条触发者为「确认 <分组> 的规则」的摄入任务。

← 运维语义库演示环境(demo)
概览与设置待确认语义约定谓词告警主题
告警对象解析规则列映射噪音任务设置
类型全部 ▾状态全部 ▾上传并摄入
类型状态输入条数时间段触发者结果
摄入完成alerts.csv13003-02 08:00–10:00<用户>分组 13(新 13)· 对象 8(候选 8)· 主机 7
上传并摄入✕
文件alerts.csv 136 行,130 条告警(5 条正文带换行) sha2562f08473bd36a… 告警时间2026-03-02 08:00:06 – 09:55:35(按 happenedFirst ← occur_time,时区 +08:00) 摄入时间段03-02 08:00 – 10:00 ▾ 按整点取,可改 覆盖的小时03-02 08 时、09 时,都已摄入过 重复文件这个文件已摄入过(sha256 相同,见列表第 1 行) 必需字段content ← msg 130/130 · happenedFirst ← occur_time 130/130 · host ← host_name 130/130 监控系统6 个(按处理设置从 source 取)
再次摄入已覆盖的小时:这些小时的统计被新值覆盖,不会重复计数(设计第 5.1 节第 3 条)。
取消覆盖并摄入

图 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 告警主题 · 设置

2026-10-11:末尾多一张「模板生成」卡片,见文首「2026-10-11 同步」第 7 条和模板生成方案第 4 节。改监控系统取法且已有分组时要输库代号、换一代(D3a)。

告警的处理设置存在 tb_sem_topic.settings(设计第 3.6 节),保存即生效,从下一次摄入起作用。每项一个小表单;条件类的项带「试算」,显示按最近一批数据有多少条命中。

项键虚构库里的值试算
范围过滤scope「安全类告警」:biz_sys 匹配 ^安全$范围外 4 条(另有 N-LOSS 计划内关闭变体 2 条,来自解析规则)
监控系统取法monitor_derivesource 正则 ^(.*?)(?:([^)]*))?$ 第 1 组6 个:日志平台、巡检平台、基础监控、网络监控、安全平台、应用监控
站点取法site_derivesource 正则 (([^)]*))$ 第 1 组1 个:A站
引用停用词ref_stopwordsexample.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 已定:首期仅停用,不提供删除

7. 关键取舍

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):

#问题影响谁定最晚
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。