函数变量
函数中可以使用一些内置模板变量
$__range_ms
- 面板时间范围(毫秒)$__range_s
- 面板时间范围(秒)$__range
- 面板时间范围,字符串表示 (30s
,1m
,1h
)$__range_series
- 对所有系列值调用函数
示例
groupBy($__range, avg)
percentile($__range_series, 95) - 95th percentile over all values
转换
groupBy
groupBy(interval, function)
将每个时间序列在给定 interval(间隔)内的点整合成一个点,使用 function(函数)进行计算,函数可以是以下之一:avg (平均值)、min (最小值)、max (最大值)、median (中位数)。
示例
groupBy(10m, avg)
groupBy(1h, median)
scale
scale(factor)
将时间序列的每个点乘以给定的 factor(因子)。
示例
scale(100)
scale(0.01)
delta
delta()
将绝对值转换为增量。此函数仅计算值之间的差值。对于每秒计算,请使用 rate()
函数。
rate
rate()
计算时间序列的每秒增长率。对计数器重置具有鲁棒性。适用于将递增计数器转换为每秒速率。
movingAverage
movingAverage(windowSize)
绘制指标在固定数量的过去点上的移动平均值,由 windowSize
参数指定。
示例
movingAverage(60)
calculates moving average over 60 points (if metric has 1 second resolution it matches 1 minute window)
exponentialMovingAverage
exponentialMovingAverage(windowSize)
接受一系列值和窗口大小,并使用以下公式生成指数移动平均值ema(current) = constant * (Current Value) + (1 - constant) * ema(previous)
常量计算公式为constant = 2 / (windowSize + 1)
如果 windowSize < 1 (例如 0.1),则不计算常量,而是直接取 windowSize 的值 (常量 = windowSize)。
从序列的第一个点(而非第 N 个点 = windowSize)开始绘制 EMA 有点棘手。为此,插件应首先获取前 N 个点并计算它们的简单移动平均值。为避免这种情况,插件使用了此技巧:假设前 N 个点的平均值与前 N 个点 (windowSize) 的平均值相同。因此,你应该记住这一点,并且不要依赖于前 N 个点的间隔。
示例
movingAverage(60)
calculates moving average over 60 points (if metric has 1 second resolution it matches 1 minute window)
percentile
percentile(interval, N)
接受一系列值和窗口大小,并将给定 interval(间隔)内的所有点整合成一个点,按第 N 个百分位数计算。
示例
percentile(1h, 99)
percentile($__range_series, 95) - 95th percentile over all series values
removeAboveValue
removeAboveValue(N)
如果值 > N,则将系列值替换为 null
示例
removeAboveValue(1)
removeBelowValue
removeBelowValue(N)
如果值 < N,则将系列值替换为 null
transformNull
transformNull(N)
将 null
值替换为 N
聚合
aggregateBy
aggregateBy(interval, function)
将所有时间序列在给定 interval(间隔)内的所有点整合成一个点,使用 function(函数)进行计算,函数可以是以下之一:avg (平均值)、min (最小值)、max (最大值)、median (中位数)。
示例
aggregateBy(10m, avg)
aggregateBy(1h, median)
sumSeries
sumSeries()
这将把指标相加并在每个数据点返回总和。此方法需要对每个时间序列进行插值,因此可能会导致高 CPU 负载。尝试将其与 groupBy() 函数结合使用以降低负载。
percentileAgg
percentileAgg(interval, N)
将所有时间序列在给定 interval(间隔)内的所有点整合成一个点,按第 N 个百分位数计算。
示例
percentileAgg(1h, 99)
percentileAgg($__range_series, 95) - 95th percentile over all values
average
average(interval)
已弃用,请改用 aggregateBy(interval, avg)
。
min
min(interval)
已弃用,请改用 aggregateBy(interval, min)
。
max
max(interval)
已弃用,请改用 aggregateBy(interval, max)
。
过滤
top
top(N, value)
返回前 N 个系列,按 value(值)排序,值可以是以下之一:avg (平均值)、min (最小值)、max (最大值)、median (中位数)。
示例
top(10, avg)
top(5, max)
bottom
bottom(N, value)
返回后 N 个系列,按 value(值)排序,值可以是以下之一:avg (平均值)、min (最小值)、max (最大值)、median (中位数)。
示例
bottom(5, avg)
趋势
trendValue
trendValue(valueType)
指定 Zabbix 使用趋势时返回的趋势值类型(平均值、最小值或最大值)。
时间
timeShift
timeShift(interval)
绘制按时间偏移的选定指标。如果未指定符号,则默认使用减号 (-) 将指标向后偏移。如果指定加号 (+),则将指标向前偏移。示例
timeShift(24h) - shift metric back in 24h hours
timeShift(-24h) - the same result as for timeShift(24h)
timeShift(+1d) - shift metric forward in 1 day
别名
以下模板变量可在 setAlias()
和 replaceAlias()
函数中使用
$__zbx_item
,$__zbx_item_name
- 项目名称$__zbx_item_key
- 项目 key$__zbx_host_name
- 主机的可见名称$__zbx_host_id
- 主机 ID$__zbx_host
- 主机的技术名称
示例
setAlias($__zbx_host_name: $__zbx_item) -> backend01: CPU user time
setAlias(Item key: $__zbx_item_key) -> Item key: system.cpu.load[percpu,avg1]
setAlias($__zbx_host_name) -> backend01
setAlias
setAlias(alias)
返回指定的别名而不是指标名称。
示例
setAlias(load)
setAliasByRegex
setAliasByRegex(regex)
返回与正则表达式匹配的指标名称的一部分。
示例
setAlias(Zabbix busy [a-zA-Z]+)
replaceAlias
replaceAlias(pattern, newAlias)
使用模式替换指标名称。模式可以是正则表达式或普通字符串。如果使用正则表达式,支持以下特殊替换模式
模式 | 插入 |
---|---|
$$ | 插入一个“$”。 |
$& | 插入匹配的子字符串。 |
$` | 插入匹配子字符串之前的字符串部分。 |
$' | 插入匹配子字符串之后的字符串部分。 |
$n | 其中 n 是小于 100 的非负整数,插入第 n 个括号内的子匹配字符串,前提是第一个参数是 RegExp 对象。 |
更多详情请参阅 String.prototype.replace() 函数。
注意: Grafana 仪表盘中的其他转换,例如“Join by label”(按标签连接)将覆盖别名函数。这是因为 Grafana 仪表盘转换会应用于查询返回的原始数据。如果出现此类问题,你始终可以使用其他仪表盘转换,例如
示例
CPU system time
replaceAlias(/CPU (.*) time/, $1) -> system
backend01: CPU system time
replaceAlias(/CPU (.*) time/, $1) -> backend01: system
backend01: CPU system time
replaceAlias(/.*CPU (.*) time/, $1) -> system
backend01: CPU system time
replaceAlias(/(.*): CPU (.*) time/, $1 - $2) -> backend01 - system
特殊
consolidateBy
consolidateBy(consolidationFunc)
当绘制图表时,如果图表宽度(像素)小于要绘制的数据点数量,插件会整合这些值以防止线条重叠。consolidateBy()
函数将默认的平均值整合函数更改为 sum
(总和)、min
(最小值)、max
(最大值) 或 count
(计数) 之一。
有效的函数名称是 sum
、avg
、min
、max
和 count
。