📢 Release 1.2.0(2026-10-19)现已推出
Arcadia

数据关系模型

全局规则定义什么消息需要告警、告警到哪里:按消息分类与级别圈定范围,对标题 / 内容设置匹配条件,命中后推送给关联渠道,同时触发绑定它的一对一规则做二次告警。

工作原理

不匹配 匹配 未命中 命中 是 否 消息入库 全局规则求值 分类与级别过滤 跳过 条件组求值 推送副本发送给关联渠道 存在绑定的一对一规则 一对一规则二次告警 结束

流程说明

阶段说明
分类与级别过滤消息分类、消息级别与规则设置不一致则跳过,空 = 不限
条件组求值条件按 and / or 组合,命中才进入推送。正则条件单次执行超过 500ms 或异常按该条件失败:and 中有条件为假即不命中,or 中有条件为真即命中
告警内容替换命中后对推送副本的标题与内容替换,规则求值始终使用原文,站内消息本体不变,见告警内容替换
渠道推送推送给全部关联渠道,渠道允许为空(仅作为一对一规则触发源的规则不直接推送);单个渠道失败不影响其余渠道
一对一二次告警命中同时触发绑定它的一对一规则,两组推送结果互不影响,见一对一规则

推送队列、节流与失败汇总为两域共同行为,见推送管线。

数据模型

model messageAlertRule {
  id             Int                             @id @default(autoincrement())
  name           String // 规则名称,接口保证唯一(DB 不设 unique)
  enabled        Int                             @default(1) // 1 启用 / 0 停用
  logic          String                          @default("and") // 条件组合逻辑
  categories     String                          @default("") // 消息分类多选,逗号分隔,空=不限
  types          String                          @default("") // 消息级别多选,逗号分隔,空=不限
  replaces       String                          @default("") // 告警内容替换,JSON 数组串,空=不启用
  title_merge    Int                             @default(1) // 无标题渠道仅发正文
  create_time    DateTime                        @default(now())
  update_time    DateTime                        @default(now()) @updatedAt
  conditions     messageAlertRuleCondition[]
  channels       messageAlertRuleChannel[]
  directBindings messageAlertDirectRuleBinding[]
}

// 一条规则可包含多条匹配条件,按 sort 升序展示与求值
model messageAlertRuleCondition {
  id                 Int              @id @default(autoincrement())
  messageAlertRuleId Int
  messageAlertRule   messageAlertRule @relation(fields: [messageAlertRuleId], references: [id])
  mode               String           @default("simple") // simple 简易 | regex 正则
  field              String // title 标题 | content 内容
  operator           String
  value              String           @default("") // empty / not_empty 时忽略
  sort               Int              @default(0)
}

model messageAlertRuleChannel {
  id                 Int                 @id @default(autoincrement())
  messageAlertRuleId Int
  messageAlertRule   messageAlertRule    @relation(fields: [messageAlertRuleId], references: [id])
  channelId          Int
  channel            notificationChannel @relation(fields: [channelId], references: [id])

  @@unique([messageAlertRuleId, channelId]) // 同一规则不能重复挂同一渠道
}

关联表只存渠道 ID,渠道配置存放在通知渠道表里,触发时实时关联查询,渠道配置修改即时生效。

告警规则与一对一规则多对多绑定,单条一对一规则最多绑定 20 条全局规则;绑定表与收信人表见一对一规则。

枚举取值

枚举取值
消息分类 categoriessystem、cron、user(逗号分隔多选,空 = 不限)
消息级别 typesinfo、warn、error、success(逗号分隔多选,空 = 不限)