前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IBM告警规则引擎语法说明

IBM告警规则引擎语法说明

作者头像
matt
发布2022-10-25 16:03:56
1.2K0
发布2022-10-25 16:03:56
举报
文章被收录于专栏:CSDN迁移CSDN迁移

IBM告警规则引擎语法说明

一、规则引擎说明

规则引擎是基于ANTLR 4实现的一套脚本语言,主要用于告警处理。

二、变量声明

通过表达式:变量名 = string在规则中声明变量,其中,变量名只能为大小写字母、数字和下划线。示例:

代码语言:javascript
复制
abc = 1
$ABC = "hello"
@BCD = "world"

每条规则语句以换行符结尾。

注意:在规则处理上下文中,有三种特殊的变量,分别如下: a) 以开头,如:alarmId,此种变量为规则的输入参数,进入规则处理之前所有告警字段都会转化为

三、运算符

  1. 与或非运算符:&&、||、!
  2. 比较运算法:>、>=、<、<=、==、!=
  3. 计算运算符:+、-、*、/

四、流程控制

  1. if…else if…else…控制语句,语法定义如下:
代码语言:javascript
复制
if (...) {
	...
} else if (...) {
	...
} else {
	...
}
  1. switch控制语句,语法定义如下:
代码语言:javascript
复制
switch (...) {
	case "" | "":
		...
		break
	case "":
		...
	default:
		...
}
  1. foreach语句,语法定义如下:
代码语言:javascript
复制
foreach (key in $*|array|($vall,$val2,...$valn)) {
	...
}

参考示例如下:

代码语言:javascript
复制
for (val in $*) {
	log(info,"val is " + val)
}

array arrTest
arrTest["abc"] = 1
arrTest["bcd"] = 2
for (val in arrTest) {
	log(info,"val is " + val)
}

for (val in ($1,$2,$3,$4)) {
	log(info,"val is " + val)
}

五、集合

  1. table,语法定义如下: 引用式:
代码语言:javascript
复制
table table_name = "./table_name"
default = {"", ..., ""}

直接式:

代码语言:javascript
复制
ta ble table_name = {
	{"key", "value"},
	...
	{"key", "value"}
	default = "default_values"
}

示例如下: 引用式:

代码语言:javascript
复制
table AlarmSeverity = "./Huawei/M2000/AlarmSeverity"
default = {"", ""}
==================
AlarmSeverity(tab,tab+,table):
1 Cleared
2 Minor
3 Major
4 Critical
5 Error

直接式:

代码语言:javascript
复制
table AlarmSeverity = {
	{"1","Cleared"},
	{"2","Minor"},
	{"3","Major"},
	{"4","Critical"},
	{"5","Error"},
	default = "UnKnown"
}
  1. array,语法定义如下:
代码语言:javascript
复制
array array_name
array_name[String|number] = [String|number]

示例如下:

代码语言:javascript
复制
array arrayVo
arrayVo["test"] = 1
arrayVo[2] = "1001"
arrayVo[$a] = $b
log(info,"arrayVo["test"]=" + arrayVo["test"])
log(info,"arrayVo["2"]=" + arrayVo["2"])
log(info,"arrayVo["$a"]=" + arrayVo["$a"])

六、系统函数

注意:所有带参数的函数,使用时每个参数之间不能存在空格。

  1. getdate,返回当前时间毫秒数,用法如下:
代码语言:javascript
复制
$currentTime = getdate
log(info, "Current millisecond = " + $currentTime)  # 1469689875121, JavaSystem.currentTimeMillis()
  1. match,精确匹配字符串,返回true或false,用法如下:
代码语言:javascript
复制
if (match($AlarmName, "LinkDown")) { 
	log(info, "It's matched")
} else {
	log(info, "It's not matched")
}
  1. rematch,模糊匹配,基于Java的正则表达式实现,返回true或false,用法如下:
代码语言:javascript
复制
if (rematch($AlarmName, ".*LinkDown.*")) { 
	log(info, "It's matched")
} else {
	log(info, "It's not matched")
}
  1. extract,截取字符串中匹配的数据,基于Java正则表达式的group实现,返回匹配到的字符串,用法如下:
代码语言:javascript
复制
$AlertKey = "Node=123,alarmname=linkdown"
$Node = extract($AlertKey,".*Node=([0-9*],.*)")
log(info,"$Node=" + $Node)  #123
  1. exits,判断某个变量是否存在,返回true或false,用法如下:
代码语言:javascript
复制
if (exist($AlarmName)) { 
	log(info, "It's exists")
} else {
	log(info, "It's not exists")
}
  1. DateToTime,将制定日志转化为毫秒级,时区以探针运行时区为准,返回毫秒数,用法如下:
代码语言:javascript
复制
$NV_EVENT_TIME = "2020-05-18 10:52:00"
$EventTime = DateToTime($NV_EVENT_TIME,"yyyy-MM-dd HH:mm:ss")

这里的DateTime的第二个参数的格式参考Java语言提供的SimpleDateFormat类格式。

  1. int,将数字字符串转换为int数值,若不可转化则会出现异常,返回int数值,用法如下:
代码语言:javascript
复制
$val = int("1111")
  1. ltrim,去掉字符串的左边空格,返回处理后的字符串,用法如下:
代码语言:javascript
复制
$node = ltrim($node)
  1. rtrim,去掉字符串的右边空格,返回处理后的字符串,用法如下:
代码语言:javascript
复制
$node = rtrim($node)
  1. lookup,根据指定Key获取其对应的1个或多个字段的value,lookup(key, table_name),用法如下:
代码语言:javascript
复制
$Severity = lookup($Severity,AlarmServerity)
[@SiteCode, @SiteName, @SitePriority, @Location, @ZoneTime, @SiteType, @collocation_name, @collocation_Id, @power_type, @LocalNodeAlias $#124;\||] = lookup(@Node, deviceSite3G4G)
  1. log,打印日志,格式:log(level, “”),其中level取值为debug,info,warn,error。
  2. setContextVar,设置环境变量到规则引擎的环境变量中去,例如可以在core.properties里面定义一个探针运行时的环境变量。
代码语言:javascript
复制
@ccc=setContextVar("xxxxName")
@ddd=$xxxxName
xxxxNamexxxxName

@ccc=setContextVar("xxxxName","abcd")
@ddd=$abcd
abcd
@ccc=setContextVar("xxxxName","abcd")@ddd=$abcd
abcd
  1. TimeFromIBMTime,将IBM的时间格式转换为UTC的时间,用法如下:
代码语言:javascript
复制
@mv36AlarmRaisingTimeTest = TimeFromIBMTime($mv36AlarmRaisingTimeTest)
  1. hostname,获取执行机器的主机名。
  2. lower,将字符串转换为小写字母。
代码语言:javascript
复制
lower("ABcD")
  1. substr,截取字符串。
代码语言:javascript
复制
substr("ssss",1,2)
  1. clear,清空规则引擎中的环境变量,包括输入输出和一些中间变量。
  2. getenv,获取执行环境的环境变量的值,相当于Java中调用System.getProperty()。
代码语言:javascript
复制
getenv("Probe_Name")
  1. getpid,获取执行进程的PID。
  2. getplatform,获取运行平台名称。
  3. recover,将设置的discard标示清空。
  4. remove,移除变量的定义。
代码语言:javascript
复制
remove("passwd")
  1. update,更新事件。
  2. updateload,触发更新事件。
  3. upper,将字符串转换为大写字母。
代码语言:javascript
复制
upper("abcD")
  1. hashCode,输出字符串的hashCode码,输出为格式化后的20位hashCode,前十位为String的hashCode,后十位为字符串倒序的hashCode码。
代码语言:javascript
复制
@alarmId=hashCode($alarmID)

七、特殊语句

  1. discard,丢弃次规则处理的结果,一般用于丢弃告警的场景,如告警风暴发生时,丢弃低优先级的告警,用法如下:
代码语言:javascript
复制
if(int($AlarmStomFlg) == 1 && int($Severity) <= 2) { # ,2
	discard
}
  1. include,引用其他规则文件或lookup文件,支持classpath路径、相对路径和绝对路径三种引用方式,用法如下:
代码语言:javascript
复制
include "classpath:config/abc.rules" # classpath
include "./rules/test.rules" # (config),
include '/opt/ict/collector/instance/Probe-0010/config/lookup/Device.lookup" #
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IBM告警规则引擎语法说明
  • 一、规则引擎说明
  • 二、变量声明
  • 三、运算符
  • 四、流程控制
  • 五、集合
  • 六、系统函数
  • 七、特殊语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com