版本 | 修订记录 | 日期 | 修订者 |
---|---|---|---|
1.0 | 初稿 | 2019-07-31 | 翟智刚 |
[TOC]
告警计算模型说明
告警规则定义以json字符串的方式存储于告警定义表的regular字段,具体模型定义、计算流程、以及示例见下面说明。
1、模型定义
参数名 | 参数含义 | 取值范围及说明 |
---|---|---|
INTERCEPT | 可选。可抑制告警编码列表。 | 数组。 每个元素为一个可以被该告警抑制的告警编码。 告警类型为告警时,可选。 |
INTERCEPTED | 可选。被抑制告警编码列表。 | 数组。 每个元素为一个可以抑制该告警的告警编码。 告警类型为告警时,可选。 |
CLEAR | 可选。可恢复告警编码列表。 | 数组。 每个元素为一个告警编码。 告警类型为恢复告警时必选。 |
CONFIG | 可选。告警参数配置。 | 数组。该参数用于WEB前台进行告警阈值参数配置。详情见下表。 |
JS | 必选。告警计算脚本。 | 字符串。 JS脚本,返回一个null或number数值。null/0代表不产生告警,1~4为产生的告警级别。 |
CONFIG说明
参数名 | 参数含义说明 |
---|---|
TITLE | 必选。参数标题。字符串类型。 |
CODE | 必选。参数名。字符串类型。代表参数表中参数名。 |
DEFAULT_VALUE | 必选。参数默认值。number类型。 |
说明:注入JS时对象名为$CONFIG
JS内置对象说明
对象名 | 对象说明 |
---|---|
$P | 用户自定义参数表注入。一个对象。 |
$R | 运行时动态参数注入,详细说明见$R表说明。 |
$N | 指标值,一个number类型的数值。 |
$FA | 内置函数对象。公共函数都绑定在此对象上。 |
$R内置参数说明
参数名 | 参数含义说明 |
---|---|
CODE | 字符串。该告警编码。 |
$FA内置函数说明
函数名 | 函数含义说明 |
---|---|
getParam | 获取告警阈值参数。 |
gtAlarm | 指标值大于阈值时出告警,值越大告警级别越严重。 |
gtAlarm | 指标值小于阈值时出告警,值越小告警级别越严重 |
说明:函数详细用法说明见本文档附录1
2、计算流程
- 每个指标值产生后,根据告警与指标关系,判断该指标是否会产生告警。如果产生则发指标消息。
- 收到指标产生消息,直接调用JS脚本进行告警计算。
- 如果产生了告警,判断是告警还是恢复告警。
- 如果是告警,则进行去重处理和告警抑制处理。
- 如果是恢复告警,则进行告警恢复处理。
- 刷新缓存、入库。
3、配置示例
1001告警计算规则
{
"CONFIG":[{"TITLE":"严重告警阈值","CODE":"critical","DEFAULT_VALUE":65},
{"TITLE":"重要告警阈值","CODE":"major","DEFAULT_VALUE":75},
{"TITLE":"一般告警阈值","CODE":"minor","DEFAULT_VALUE":85},
{"TITLE":"提示告警阈值","CODE":"notice","DEFAULT_VALUE":95}],
"JS":"$FA.ltAlarm();"
}
2001告警计算规则
{
"INTERCEPT":["2009"],
"INTERCEPTED":[],
"JS":"var r = 0;if($N<1)r=1;r;"
}
2002恢复告警计算规则
{
"CLEAR":["2001"],
"JS":"var r = 0;if($N>0)r=1;r;"
}
2009告警计算规则
{
"CONFIG":[{"TITLE":"重要告警阈值","CODE":"major","DEFAULT_VALUE":5}],
"INTERCEPTED":["2001"],
"JS":"$FA.ltAlarm();"
}
4、告警计算流程图
5、告警状态机
附录1 $FA内置函数
getParam
获取告警阈值参数
/**
* 获取告警阈值参数
* @param paramName 参数名。
* @returns {*}
*/
getParam: function (paramName) {
var code = 'A' + $R.CODE;
return $P[code][paramName];
},
gtAlarm
指标值大于阈值时出告警,值越大告警级别越严重。
/**
* 指标值大于阈值时出告警,值越大告警级别越严重。
* @returns {number}
*/
gtAlarm: function () {
var result = 0;
if (this.hasAlarmLevel('critical') && $N > this.getParam('critical')) result = 1;
else if (this.hasAlarmLevel('major') && $N > this.getParam('major')) result = 2;
else if (this.hasAlarmLevel('minor') && $N > this.getParam('minor')) result = 3;
else if (this.hasAlarmLevel('notice') && $N > this.getParam('notice')) result = 4;
else result = 0;
return result;
},
gtAlarm
指标值小于阈值时出告警,值越小告警级别越严重
/**
* 指标值小于阈值时出告警,值越小告警级别越严重。
* @returns {number}
*/
ltAlarm: function () {
var result = 0;
if (this.hasAlarmLevel('critical') && $N < this.getParam('critical')) result = 1;
else if (this.hasAlarmLevel('major') && $N < this.getParam('major')) result = 2;
else if (this.hasAlarmLevel('minor') && $N < this.getParam('minor')) result = 3;
else if (this.hasAlarmLevel('notice') && $N < this.getParam('notice')) result = 4;
else result = 0;
return result;
}