版本 修订记录 日期 修订者
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;
}

results matching ""

    No results matching ""