Files
ops/docs/首期数据模型与状态机.md
2026-06-21 17:50:24 +08:00

16 KiB

OPS 首期数据模型与状态机

1. 文档目标

本文用于固定第 1 阶段编码前的核心后端规格,覆盖资源监控、采集、时序指标、原始事件、告警、事件、通知、工单、审计和 3D 机房后端接口所需的最小数据模型与状态机。

本文不替代数据库迁移脚本。后续实现时,应以本文作为 server/internal/models/server/internal/logic/ 和接口设计的依据。

2. 范围边界

第 1 阶段必须覆盖:

  • 主机、H3C/华三网络设备、数据库、虚拟化、URL/API 至少各一类样例资源。
  • 指标采集、Syslog、SNMP Trap、URL/API 探测、采集失败事件。
  • 告警去重、压缩或归并、屏蔽、抑制、确认、忽略、恢复、派单。
  • 平台站内消息、短信、邮件三类通知。
  • 工单创建、接单、转交、撤回、挂起、重启、关闭。
  • 报表、大屏、审计能追踪完整故障闭环。
  • 外包 3D 机房前端所需的数据中心、机房、机柜、U 位、设备和告警状态接口模型。

第 1 阶段不覆盖:

  • 所有厂商全量适配。
  • 老运维平台迁移或集成。
  • 3D 机房前端实现。
  • 完整 IPAM、复杂拓扑编辑、全量资产审核流程。

3. 存储分工

存储 数据范围 说明
PostgreSQL 资源、业务系统、资产、采集任务、规则、告警、事件、工单、通知、权限、审计、报表配置 事务数据主库,保证一致性和审计。
TDengine 开源版 指标样本、探测样本、接口流量、采集健康度、容量和性能趋势 第 1 阶段选定的时序数据库。后端通过适配层访问,避免业务逻辑直接依赖 TDengine SQL 方言。
文件或对象存储 报表导出、附件、截图、录像、大屏快照 第 1 阶段可先使用本地文件存储,接口保留替换能力。

设计原则:

  • PostgreSQL 保存资源和指标定义,时序数据库保存样本值。
  • 所有时序数据必须能通过 resource_idmetric_code、时间范围回查到资源上下文。
  • 告警、事件、工单状态变化必须写审计日志。
  • 真实凭据不落业务表明文,只保存凭据引用和脱敏描述。

4. 通用字段

核心业务表建议统一包含:

字段 类型建议 说明
id UUID 或雪花 ID 主键。
tenant_id string 单院区可固定,保留多租户或多院区扩展。
created_at timestamp 创建时间。
updated_at timestamp 更新时间。
created_by string 创建人。
updated_by string 更新人。
deleted_at timestamp nullable 软删除时间,需要保留审计的表不做物理删除。
version integer 乐观锁版本,用于工单、规则等并发修改。

审计相关表必须额外保留:

字段 说明
trace_id 请求链路 ID。
operator_id 操作人。
operator_name 操作人快照。
source_ip 操作来源 IP。
before_json 变更前快照,敏感字段脱敏。
after_json 变更后快照,敏感字段脱敏。

5. 资源与资产模型

5.1 核心表

表名 职责 关键字段
business_systems 业务系统,如 HIS、LIS、PACS、EMR namecodelevelnetwork_zoneowner_org_idowner_user_iddescription
resource_types 资源类型和默认模板 codenamecategoryvendordefault_metric_template_idicon
resources 统一监控资源 nameresource_type_idvendormodeliphostnamebusiness_system_idowner_org_idowner_user_idasset_idstatuscollect_status
resource_relations 资源依赖关系 source_resource_idtarget_resource_idrelation_typedescription
metric_definitions 指标定义 resource_type_idmetric_codemetric_nameunitvalue_typedefault_interval_secondsthreshold_hint
metric_series 时序指标序列映射 resource_idmetric_definition_idmetric_codetsdb_nameseries_keylabels_jsonretention_policy
credentials 凭据引用 nametypesecret_refmasked_summaryowner_org_idstatus

5.2 资产与 3D 机房接口模型

表名 职责 关键字段
data_centers 数据中心 nameprovincecityaddressstatus
rooms 机房 data_center_idnamefloorstatus
racks 机柜 room_idnamecodetotal_urow_nocolumn_noxyzstatus
rack_units U 位占用 rack_idu_noresource_idasset_idoccupy_heightstatus
assets 资产台账 asset_nonamevendormodelserial_noresource_idrack_idstatus

3D 机房前端接口至少需要返回:

  • 数据中心、机房、机柜层级。
  • 机柜坐标、容量、已占用 U 位、剩余 U 位。
  • 设备与资源绑定关系。
  • 设备健康状态、最高告警级别、未恢复告警数量。
  • 数据更新时间和权限过滤结果。

5.3 资源状态

状态码 中文名 说明
draft 草稿 已录入但未启用采集。
active 运行中 正常纳管,可采集、可触发告警。
disabled 已停用 暂停采集,不产生新告警。
maintenance 维护中 可采集,但默认抑制或降级告警。
decommissioned 已退役 不再采集,仅保留历史和审计。

合法流转:

草稿 -> 运行中
运行中 -> 维护中 -> 运行中
运行中 -> 已停用 -> 运行中
运行中 -> 已退役
已停用 -> 已退役

非法流转:

  • 已退役资源不能直接恢复为运行中,必须重新建档或走恢复审批。
  • 已停用资源不能生成新的业务告警,但可以生成配置或审计事件。

6. 采集与时序模型

6.1 采集任务表

表名 职责 关键字段
collector_tasks 采集任务定义 resource_idcollector_typeprotocolcredential_idschedule_croninterval_secondstimeout_secondsretry_limitstatus
collector_runs 采集执行记录 task_idstarted_atfinished_atrun_statussuccess_countfailed_counterror_codeerror_message
discovery_tasks 自动发现任务 namescan_rangeprotocolscredential_idschedule_cronstatus
probe_targets URL/API/端口探测目标 resource_idtarget_urlmethodexpected_statustimeout_secondsstatus

6.2 时序样本逻辑结构

时序库中的指标样本必须至少包含:

字段 说明
ts 样本时间。
resource_id 资源 ID。
resource_type 资源类型编码。
metric_code 指标编码。
value 指标值。
unit 单位。
labels 标签,如接口名、磁盘分区、数据库实例名。
quality 样本质量:正常、缺失、估算、异常。
collector_task_id 采集任务 ID。

6.3 采集任务状态

任务配置状态:

草稿 -> 已启用 -> 已停用
已启用 -> 已停用 -> 已启用
已启用 -> 已删除
已停用 -> 已删除

单次执行状态:

待执行 -> 执行中 -> 成功
待执行 -> 执行中 -> 部分成功
待执行 -> 执行中 -> 失败
执行中 -> 超时

规则:

  • 连续失败达到阈值时,必须生成平台内部原始事件。
  • 部分成功必须记录缺失指标,不允许只显示成功。
  • 凭据错误、设备不可达、协议超时需要区分错误码。

7. 事件与告警模型

7.1 核心表

表名 职责 关键字段
raw_events 原始事件 source_typesource_idresource_idevent_keyoccurred_atseveritytitlemessagepayload_jsonparse_status
alert_rules 告警规则 namescope_typescope_idmetric_codecondition_exprduration_secondsrecover_exprseveritystatus
alerts 告警实例 alert_keyresource_idrule_idfirst_seen_atlast_seen_atrecovered_atseveritystatussummary
incidents 归并事件 incident_notitleseveritystatusowner_user_idbusiness_system_idopened_atclosed_at
incident_alerts 事件与告警关联 incident_idalert_idrelation_type
silence_policies 屏蔽策略 namescope_typescope_idstart_atend_atreasonstatus
dedup_rules 去重规则 namematch_exprdedup_window_secondsstatus
correlation_rules 关联/压缩/抑制规则 namematch_expractionprioritystatus
escalation_policies 升级策略 nameseveritytimeout_minutesnext_target_typenext_target_idstatus

7.2 原始事件状态

状态码 中文名 说明
received 已接收 原始数据已入库。
parsed 已解析 已识别资源、级别、事件键。
unparsed 未解析 字典或规则不匹配。
suppressed 已抑制 命中屏蔽、依赖或抑制规则。
converted 已转告警 已生成或更新告警。
archived 已归档 不再参与处理。

合法流转:

已接收 -> 已解析 -> 已转告警
已接收 -> 未解析 -> 已解析 -> 已转告警
已解析 -> 已抑制 -> 已归档
已转告警 -> 已归档
未解析 -> 已归档

规则:

  • 未解析 Trap/Syslog 不能直接丢弃,必须可查询、可补规则重放。
  • 已抑制事件必须记录命中的策略 ID。

7.3 告警状态机

状态码 中文名 说明
firing 触发中 当前异常仍存在。
acknowledged 已确认 值班人员已接手,但异常未恢复。
ignored 已忽略 经人工判断无需处理。
recovered 已恢复 恢复条件满足或收到恢复事件。
expired 已失效 长时间未刷新且无法确认恢复。

合法流转:

触发中 -> 已确认 -> 已恢复
触发中 -> 已忽略
触发中 -> 已恢复
触发中 -> 已失效
已确认 -> 已恢复
已确认 -> 已忽略
已确认 -> 已失效

非法流转:

  • 已恢复告警不能重新变为触发中;同一资源同一规则再次异常时,应创建或激活新的告警周期。
  • 已忽略告警不能自动派单。
  • 已失效告警不能再确认,只能作为历史查看。

7.4 事件状态机

状态码 中文名 说明
open 待处理 已创建事件,尚未分派。
assigned 已分派 已指定处理人或处理组。
in_progress 处理中 处理人已开始处理。
suspended 已挂起 等待外部条件或人工决策。
resolved 已解决 技术处理完成,等待关闭确认。
closed 已关闭 闭环完成。

合法流转:

待处理 -> 已分派 -> 处理中 -> 已解决 -> 已关闭
处理中 -> 已挂起 -> 处理中
已分派 -> 待处理
已解决 -> 处理中

非法流转:

  • 已关闭事件不能回到处理中。
  • 未关联告警或资源的事件不能进入已关闭。
  • 已解决事件若关联告警再次触发,应退回处理中或新建事件,不能静默覆盖。

8. 通知模型

8.1 核心表

表名 职责 关键字段
notification_policies 通知策略 namescope_typeseveritychannelsreceiver_exprstatus
notification_templates 通知模板 channeltitle_templatecontent_templatevariables_jsonstatus
notification_records 通知发送记录 channelalert_idincident_idreceiversend_statusretry_counterror_messagesent_at

第 1 阶段通知渠道:

  • 平台站内消息。
  • 短信。
  • 邮件。

8.2 通知状态机

待发送 -> 发送中 -> 已发送
待发送 -> 发送中 -> 失败 -> 待重试 -> 发送中
失败 -> 已取消
待重试 -> 已取消

规则:

  • 任何通知失败都不能阻断告警和工单状态流转。
  • 通知失败必须可见、可重试、可审计。
  • 短信和邮件必须记录第三方返回码或失败原因。

9. 工单模型

9.1 核心表

表名 职责 关键字段
tickets 工单 ticket_notitlesource_typesource_idalert_idincident_idresource_idassignee_idstatuspriorityclosed_at
ticket_transitions 工单流转记录 ticket_idfrom_statusto_statusoperator_idreasoncreated_at
ticket_comments 工单处理记录 ticket_idcomment_typecontentattachments_jsoncreated_by
ticket_sla_records 工单时效记录 ticket_idaccepted_atfirst_response_atresolved_atclosed_atoverdue_flag

9.2 工单状态机

状态码 中文名 说明
created 已创建 工单已生成,等待接单。
accepted 已接单 处理人已接收。
in_progress 处理中 正在处理。
transferred 已转交 转给其他处理人或处理组。
suspended 已挂起 暂停处理,等待外部条件。
restarted 已重启 从挂起恢复。
withdrawn 已撤回 创建方撤回或确认无需处理。
closed 已关闭 处理完成并关闭。

合法流转:

已创建 -> 已接单 -> 处理中 -> 已关闭
已创建 -> 已撤回
已接单 -> 已转交 -> 已接单
处理中 -> 已转交 -> 已接单
处理中 -> 已挂起 -> 已重启 -> 处理中
已接单 -> 已关闭

非法流转:

  • 已关闭工单不能转交、撤回或挂起。
  • 已撤回工单不能重新接单,只能新建工单。
  • 同一告警不能重复自动创建多个未关闭工单。
  • 无权限用户不能关闭、转交或撤回工单。

10. 权限与审计模型

表名 职责 关键字段
organizations 组织部门 nameparent_idstatus
users 用户 usernamedisplay_nameorg_idstatus
roles 角色 namecodestatus
user_roles 用户角色 user_idrole_id
role_permissions 功能权限 role_idpermission_code
data_scopes 数据权限 subject_typesubject_idscope_typescope_expr
audit_logs 审计日志 actionobject_typeobject_idoperator_idtrace_idbefore_jsonafter_json

必须审计的动作:

  • 资源新增、修改、停用、退役。
  • 凭据引用变更。
  • 告警确认、忽略、派单、恢复、失效。
  • 屏蔽、抑制、升级、通知策略变更。
  • 工单接单、转交、撤回、挂起、重启、关闭。
  • 权限、角色、数据权限变更。
  • 报表导出和敏感数据查看。

11. 核心关系

erDiagram
    BUSINESS_SYSTEMS ||--o{ RESOURCES : contains
    RESOURCE_TYPES ||--o{ RESOURCES : classifies
    RESOURCES ||--o{ METRIC_SERIES : emits
    METRIC_DEFINITIONS ||--o{ METRIC_SERIES : defines
    RESOURCES ||--o{ COLLECTOR_TASKS : collected_by
    COLLECTOR_TASKS ||--o{ COLLECTOR_RUNS : runs
    RESOURCES ||--o{ RAW_EVENTS : produces
    RAW_EVENTS ||--o{ ALERTS : converts_to
    ALERT_RULES ||--o{ ALERTS : triggers
    INCIDENTS ||--o{ INCIDENT_ALERTS : groups
    ALERTS ||--o{ INCIDENT_ALERTS : grouped_by
    INCIDENTS ||--o{ TICKETS : handled_by
    ALERTS ||--o{ TICKETS : may_create
    ALERTS ||--o{ NOTIFICATION_RECORDS : notifies
    INCIDENTS ||--o{ NOTIFICATION_RECORDS : notifies
    DATA_CENTERS ||--o{ ROOMS : contains
    ROOMS ||--o{ RACKS : contains
    RACKS ||--o{ RACK_UNITS : contains
    RESOURCES ||--o| ASSETS : binds
    ASSETS ||--o{ RACK_UNITS : occupies

12. 编码前检查清单

  • PostgreSQL 表结构与本文核心表一一对应。
  • 时序数据库选型完成,并定义 resource_id + metric_code + ts 查询方式。
  • 告警、事件、工单状态机在后端集中定义,不在前端自行拼状态。
  • 所有状态变化写入 audit_logs 或对应流转记录。
  • 采集失败、通知失败、自动派单失败均能产生可见错误和审计记录。
  • 3D 机房接口不依赖真实现场台账即可返回样例数据。
  • API 响应统一包含 codemessagetraceId,错误场景包含可操作建议。