[云监控]AE3-Script脚本引擎进阶

在上一篇[《[云监控]AE3-Script AE3脚本引擎》](https://ata.alibaba-inc.com/articles/217887)中介绍了AE3-Script的基本特性。本篇将继续介绍该脚本的一些更加深入的用法。

一、动态算术运算

AE3-Script是一种动态类型的语言,字符串(string)、数值(number)和布尔值(bool)都可以进行数学运算。运算时字符串和布尔值将会被转化为数值。如下面的表达式:

"100" + 50 + true;
// Output: 151
true + false;
// Output: 1
true + true
// Output: 2

具体转换规则如下:

类型 转换后
字符串(string) 按十进制文本进行转换
布尔 true 1
布尔 false 0

数学运算的最终结果为数值。

二、动态算术比较运算

当进行比较运算时,如果比较的双方是同类型,且具有可比性,则直接进行比较。如

"A" > "B";
// Output: false
true == true;
// Output: true
true != true
// Output: false

而当双方不是相同类型,或不具可比性时,比较的双方会先转换成数值,再进行比较。如

true > false
// Output: true

根据上一节的转换规则,true为1,false为0,则比较的结果为true。再如:

1 == true
// Output: true

避坑提示 字符串'true''false'转换数值时将失败,而不是转为布尔值的truefalse

'true' == true

将会产生运行时错误:

invalid operation: string == bool (1:8)
| "true" == true
| ............^

比较运算的最终结果为布尔型。

三、赋值

之前介绍了变量,但主要目的是为了引入metric数据的表达。事实上,变量是可以在AE3-Script中被主动创建的。AE3-Script是动态类型语言,变量本身没有类型,被赋值成什么类型,变量就会成为什么类型。变量可以被重复赋值,且可以被赋予不同类型的值。变量必须先赋值后使用,且区分大小写

A := 100;
// 此时变量A为数值类型
A := 'hello'
// A又成为了字符串类型

当一段代码中需要重复进行计算时,可以先把计算的结果放入变量中。

preValue := LastPeriod(@cpu_total[60]).$Average;
(@cpu_total[60].$Average - preValue) * 100 / preValue

这个是典型的同比计算,计算时需要使用上一周期的$Average值两次,通过中间变量preValue有效增强最可读性,同时提升了运行效率。
友情提示 像Java、C++一样,如果是多条语句的话,每条后面一定要有一个英文分号;。最后一条语句,或单条语句则对分号不做强制要求。

四、字符串

算术和比较运算可以将符串转为数值。相反的,在AE3-Script中也可以将两个非字符串转换为字符串。

4.1 字符相加运算符#

不管#两边是什么类型,#会先两将两侧转换为字符串再进行字符串相加操作。

userId := 2
'acs_custom_' # userId;
// Output: acs_custom_2
true # ' ' # 'name'
// Output: true name

4.2 join函数

join函数是一个内置函数,其原型为join(sep string, args...),其中args可以是一个slice,也可以是变长参数。该函数返回以sep连接的字符串。

join(' ', "My name is", 20);
// Output: My name is 20
list := [1, 2, 3];
join(', ', list)
// Output: 1, 2, 3 

五、最佳实践

目前云监控新版控制台已上线多指标报警规则,欢迎体验。

5. 1 创建简单的多指标规则

创建报警规则界面,通过若干步鼠标点击,可以迅速创建出简单的多指标规则。如下图:
[云监控]AE3-Script脚本引擎进阶
上图创建的规则需要『两个指标同时符合条件』才会报警。等同于如下表达式

@cpu_total[60].$Average >= 80 && @load_1m[60].$Average >= 5

对于初接触云监控,对指标不甚了解的人员,可以通过简单的界面点击,迅速建立一个满足80%应用需求的报警规则。

5.2 复杂的多指标规则

当条件比较复杂时,简单的界面就无法满足要求了,此时可以使用『表达式创建』。比如有三个指标,当其中的两个满足条件时就报警:
[云监控]AE3-Script脚本引擎进阶
表达式:

A := @cpu_total[60].$Average > 80; 
B := @load_1m[60].$Average >= 4; 
C := @memory_usedutilization[60].$Average > 90;
A + B + C >= 2

目前界面还有一些小瑕疵,无法进行多行编辑。以上四句写在一行也是OK的,只不过可读性上稍微差些。

上一篇:企业云监控-企业上云的基础监控解决方案


下一篇:基于Tag的自动化监控方案