阈值
我们在创建监控项时已经使用了阈值。阈值用于我们判断获取的数值是否满足了某个触发条件。
变量
内置变量
监控项选择数据源后,就可以使用数据源提供的一些变量。比如对于负载(Load)
数据源,提供的的变量有${load1}
、${load5}
、${load15}
。可以在界面中查看这些变量及说明。
索引
如果获取的数据是一个数组的话,可以通过索引获取某个索引上的值,索引从0
开始,比如:
[1, 2.5, 3, 4.7, 5]
则:
${0}
表示第一个数据:1
${1}
表示第二个数据:2.5
${2}
的值为:3
- 以此类推如果返回的数据是单行数据,则只支持
${0}
,比如:
"123"
则 ${0}
的值为 123
。
索引也支持级联,对于:
[
{ "name": "ZHANG" },
{ "name": "LI" },
{ "name": "WANG" }
]
则:
$符号
从v0.0.10开始,可以使用一个单独的$
来表示数组中的每一个元素,比如对于:
[
{
"name": "ZHANG SAN",
"count": 10
},
{
"name": "LI SI",
"count": 15
},
{
"name": "WANG ER",
"count": 20
}
]
则:
${$.count}
表示数组中任意一个元素中的count
值,如果用于阈值判断,则自动会循环当前数组,有一个元素满足条件即返回。$
符号不一定在最前面,也可以在中间,以下都是合法的:${$}
- 每一个元素${$.count}
- 每一个元素中的count
值${user.books.$.price}
-user.books
的每一个元素中的price
值
ROW变量
从v0.1.1开始,可以在通知消息中使用${ROW.xxx}
变量来表示使用$
匹配的变量,比如对于上面的JSON数据,可以设置通知消息为:
发现${ROW.name}有异常
又比如,对于硬盘分区数据:
{
"partitions": [
{
"free": 533154402304,
"inodesFree": 9223372036854776000,
"inodesPercent": 1.0842021724855044e-17,
"inodesTotal": 9223372036854776000,
"inodesUsed": 1,
"name": "/private/var/vm",
"percent": 0.20099320386597236,
"total": 998921388032,
"used": 1073762304
},
{
"free": 533154402304,
"inodesFree": 9223372036851067000,
"inodesPercent": 4.021000112736095e-11,
"inodesTotal": 9223372036854776000,
"inodesUsed": 3708718,
"name": "/",
"percent": 46.52807144146622,
"total": 998921388032,
"used": 463919046656
}
]
}
如果设置阈值为${partitions.$.percent} gt 80
,则:
${ROW.name}
- 匹配的分区数据的name
值${ROW.used}
- 匹配的分区数据的已使用字节数- 依次类推…通知消息可以设置为:
${ROW.name}已使用80%
这样通知消息发出时,${ROW.name}
就会被替换成相对应的分区名。
命名变量
如果获取的数据是一个键值对结构的话,可以通过命名获取某个键对应的值,比如:
{
"name": "ZHANG SAN",
"age": 18,
"books": [ "Java", "Golang", "Python" ]
}
则:
${name}
表示name
对应的值:ZHANG SAN
${age}
表示age
对应的值:18
${books}
表示books
对应的值[ "Java", "Golang", "Python" ]
${books.0}
值为Java
,${books.1}
值为Golang
,${books.2}
表示Python
OLD变量
从 v0.0.10 开始起支持${OLD}
变量,表示当前监控项获取的上一条数据,比如有两条记录:当前数据:
{
"load1": 3.2
}
上一条数据:
{
"load1": 4.5
}
那么 ${load1} - ${OLD.load1}
的值为 -1.3
。
如果没有上一条记录,则${OLD}
值和当前数据值一致。
${OLD}
的一个很大的用处是用来检测数据变化,从而发出通知或者执行其他操作。
Agent主机相关变量
从v0.1.1开始,Agent主机相关阈值的通知消息中可以使用一组内置的变量:
运算符
参数值支持加(+)、减(-)、乘(*)、除(/)、取余(%)等运算符,如果有这些运算符的时候,参数值支持Javascript
语法,对于:
{
"load1": 3.2,
"load5": 2.5,
"load15": 4
}
则:
${load1} / 10
值为0.32
${load1} * ${load15}
值为12.8
Math.abs(${load1} - 4)
值为0.8
,其中我们使用了Javascript
的内置方法Math.abs()
Javascript
从v0.0.10开始,除了在参数值中包含一些运算符自动激活Javascript
语法外,还可以直接使用javascript:表达式
来表示当前表达式使用了Javascript
语法,比如:
javascript:new Date().getTime() / 1000 - ${timestamp}
例子中的${timestamp}
从数值中获取。