数据表结构设计--预警系统
1. 配置:预警规则表--AlarmRule
long类型为了兼容rom.
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
RuleNo | long | 否 | 是 | 发号器发的,唯一性 |
RuleTitle | string | 否 | 否 | 标题名称 |
DataSourceType | Int | 否【只能初始化、禁止修改】 | 否 | 数据来源枚举 1.SLS 2.Sql 3.WebHook【简易的连通性检查】 4.DLL-RUN【复制的计算/第三方接口对接】
|
ConditionExpression | string | 是【可以为空】 | 否 | (condition1&&condition2) |
Cron | string | 否 | 否 | Cron表达式 |
|
| 否 |
|
|
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
2. 配置:预警规则下条件表--AlarmCondition【一对多】
一个预警规则下多个条件。
Condition修改,则Alarm与随之修改更新时间。
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
ConditionNo | long | 否 | 是 | 发号器发的,唯一性 |
ConditionTitle | string | 否 | 否 | 标题名称 |
RuleNo | long | 否 | 是 | 预警规则表Id |
JudgType | int | 否 | 否 | 条件判断类型枚举: 1.直接判断【单一返回值】 2.条件判断【单一返回值】 3.复杂判断 |
Oper | int | 是【复杂判断是为空】 | 否 | 操作符 = > < >= <= |
CompareValue | String | 是【复杂判断是为空】 | 否 | 系统字段将字符串转义成long、double、int、string等类型 |
CSharpLinq | String | 是【只有复杂判断有值】 | 否 | 只有复杂判断有值。 C#的linq表达式 |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
3.配置:条件下数据单元表--DataUnit【1对1】
一个预警规则下多个条件,一个条件下有1个数据单元。
DataUnit修改则Condition修改更新时间,Alarm也与随之修改更新时间。
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
RuleNo | long | 否 | 是 | 预警规则表Id
|
ConditionNo | long | 否 | 是 | 预警规则下条件表id |
DataUnitTitle | String | 否 | 否 | 标题名称 |
DataSourceType | Int | 否【和alarmrule保持一致】 | 否 | 数据来源枚举 1.SLS 2.Sql 3.WebHook【简易的连通性检查】 4.DLL-RUN【复制的计算/第三方接口对接】
|
SqlOrCmd | String | 否 | 否 | 语句\类库 |
ReturnTFileds【列名、列序极为重要】 | String | 否 | 否 | Json数组字符串,定义属性。系统自动生成类。 类名为ruleno_dataunitid {“Id”:”int”,“Sex ”:”bool”}
|
AlarmMsgHaveValueFileds | String | 否 | 否 | 扩展预警信息【T中的某个字段】 Sex,Id |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
3. 计算单元ActionNode表
由计算单元ActionNode主动向中心注册,提供自身的信息和健康检查api接口【或心跳也行】。
保持grpc通信。 原本想socket,但是socket还要加socket组件,增加复杂性。
ActionNodeNo是配置在配置文件中的。
对于中心来说,只有数据库配置的NodeNo才能使用,鉴权暂时不走token,提供一个password就行,内网的话,这个也省掉。
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | int | 否 | 是-主键索引 | 自增 |
ActionNodeNo | int | 否 | 是 | 配置文件中设置编号 |
IP | string | 否 | 否 | IP |
ComputerName | string | 否 | 否 | 机器名称 |
HealthApi | string | 否 | 否 | 健康检查接口 |
Password | string | 是【暂时为空】 | 否 | 后期ak鉴权字段 |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
4. 生成:任务表--AlarmTask
任务生成器,通过对AlarmRule的Cron周期性执行【延时队列】,将任务生成并入库。
任务比告警还多,TaskNo改为guid-N
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
RuleNo | long | 否 | 是 | 预警规则表Id
|
TaskNo | string | 否 | 是 | 任务编号 |
ActionNodeNo | long | 否 | 是 | 分派给哪个ActionNode计算 |
IsClaimed | Bit | 否 | 否 | 是否被认领 |
IsComplete | Bit | 否 | 否 | 是否完成 |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 | //这里也代表被取消 |
Remark | string | 否 | 否 | 规则描述 |
5. 生成:任务结果表--AlarmTaskResult
预警结果产生2条记录都放入MQ, 一条是任务结果日志, 一条是有预警--产生预警则放入MQ
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
TaskNo | string | 否 | 是 | 任务编号 |
TaskResult | String | 是 | 否 | 任务执行结果信息 |
AlarmJstNo | long | 是 | 否 | 产生了预警,预警编号 |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
6. 生成:告警表--AlarmJst
生成预警是走mq的,具体的预警消费是专门的预警处理端。建议单独一个。
暂时可以先写到中心节点上面。
AlarmJstNo预警编号设计为guid-N。
告警显示时,是AlarmMsg+NextMsg 共同显示。也要提示CauseNextCompressCount,引发下游压缩的告警数量。
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
AlarmJstNo | string | 否 | 是 | 产生了预警,预警编号 |
RuleNo | long | 是 [存在第三方预警平台直接对接产生预警] | 是 | 预警规则表Id
|
TaskNo | string | 是 [存在第三方预警平台直接对接产生预警] | 是 | 任务编号 |
ExtNo | string | 是
| 是 | 第三方预警平台Id |
AlarmLevel | Int | 是 | 是 | 预警等级 |
AlarmMsg | string | 否 | 否 | 预警信息 |
IsClosed | Bit | 是 | 是 | 是否已经被关闭 或结束 默认false |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
7. 配置扩展:预警规则--青鸟绑定表--AlarmRuleQingniao
当产生了真正的告警,那么这个告警怎么通知,需要和青鸟绑定,进行通知钉钉、短信、邮件、电话。
包括限定哪个团队,哪个负责人收到通知。[这个也可能是在青鸟配好的模板,这里集成编号就行]
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
RuleNo | long | 否 | 是 | 发号器发的,唯一性 |
QingNiaoNo | string | 否 | 是 | 青鸟的通知 |
QingNiaoTeamNo | string | 是 | 否 |
|
QingNiaoUseNo | string | 是 | 否 |
|
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
8. 告警扩展表:--AlarmJstExt
告警按照状态,分为未被领取、已经被领取
确认后:
是直接忽略、忽略一段时间、手动关闭
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
AlarmJstNo | string | 否 | 是 | 预警编号 |
IsDirector | Bit | 否 | 是 | 是否被指派或认领 |
DealTag | int | 否 | 是 | 有了负责人之后的处理状态枚举:
0. 直接忽略此告警并关闭 1. 暂时忽略一段时间 2. 告警已被解决并关闭 3. 因为告警压缩被程序自动关闭
|
IsCompressed | Bit | 否 | 是 | 被告警压缩 同一个rule之前有产生告警、未被领取、或被领取了但是在被忽略中。 此告警等级也没有超过原告警,直接自动关闭。 但是要修改原本告警的内容。 |
IsClosed | Bit | 是 | 是 | 是否已经被关闭 或结束 默认false |
UpstreamAlarmJstNo | string | 是 | 是 | 告警压缩关联的那个之前上游的产生的预警编号 |
CauseNextCompressCount | int | 否 | 是 | 因为本次预警,压缩之后产生的累加的其他告警次数 |
NextMsg | String |
|
| 累加的其他告警信息【某些数值累加】 |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |
9. 告警扩展--操作日志表:--AlarmJstOperLog
字段名 | 类型 | 是否为空 | 是否索引 | 备注 |
Id---[主键] | long | 否 | 是-主键索引 | 自增 |
AlarmJstNo | string | 否 | 是 | 预警编号 |
OperLog | string | 否 | 否 | 日志 |
CreateTime | datetime | 否 | 是 |
|
UpdateTime | datetime | 否 | 是 |
|
LastUpdateUser | string | 否 | 否 | 最后一次更新用户 |
IsDelete | bit | 否 | 是 |
|
Remark | string | 否 | 否 | 规则描述 |