5 趋势函数
趋势函数与history functions不同,使用保留趋势数据数据进行计算。
趋势存储每小时聚合值。趋势函数使用这些每小时平均值,因此适用于长期分析。
趋势函数结果会被缓存,因此对相同参数函数的多次调用只会从数据库获取一次信息。趋势函数缓存由趋势函数缓存大小服务器参数控制。
仅引用趋势函数的触发器仅按表达式中最小时段评估一次。例如,类似 trendavg(/host/key,1d:now/d) > 1 or trendavg(/host/key2,1w:now/w) > 2
的触发器将每天评估一次。如果触发器同时包含趋势和历史(或date and time和/或nodata())函数,则根据计算时间进行计算。
以下所有函数均支持在:
函数列表未包含额外信息。点击函数查看完整详情。
| 函数 | 描述 |
|---|---|
| baselinedev | 返回最后数据周期与先前季节相同数据周期之间的偏差数(基于stddevpop算法)。 |
| baselinewma | 使用加权移动平均算法,通过平均多个相等时间段('季节')中相同时段的数据来计算基线。 |
| trendavg | 定义时间段内趋势值的平均值。 |
| trendcount | 定义时间段内用于计算趋势值的成功获取历史值数量。 |
| trendmax | 定义时间段内趋势值的最大值。 |
| trendmin | 定义时间段内趋势值的最小值。 |
| trendstl | 返回检测期间异常率 - 介于0到1之间的小数值,即((the number of anomaly values)/(total number of values))。 |
| trendsum | 定义时间段内趋势值的总和。 |
通用参数
/host/key是一个常见的必填第一个参数time period:time shift是一个常见的第二个参数,其中:- 时间周期 - 时间周期(最小为 '1h'),定义为 <N><时间单位>,其中
N- 时间单位的数量,time unit- h(小时)、d(天)、w(周)、M(月)或 y(年)。 - 时间偏移 - 时间偏移(参见函数示例)
- 时间周期 - 时间周期(最小为 '1h'),定义为 <N><时间单位>,其中
函数详情
关于函数参数的一些通用说明:
- 函数参数之间用逗号分隔
- 可选的函数参数(或参数部分)用
<>表示 - 特定函数的参数会在每个函数中分别描述
/host/key和time period:time shift参数永远不要加引号
baselinedev(/host/key,data period:time shift,season unit,num seasons)
返回当前数据周期与之前季节中相同数据周期之间的偏差数量(基于stddevpop算法)。
参数:
- 参见通用参数;
- 数据周期 - 季节内的数据采集周期,格式为<N><时间单位>,其中:
N- 时间单位数量time unit- 时间单位(h小时/d天/w周/M月/y年),必须小于等于季节长度 - 季节单位 - 单个季节的时长(h/d/w/M/y),不得小于数据周期;
- 季节数量 - 需要评估的季节数。
示例:
baselinedev(/主机/key,1d:now/d,"M",6) #计算前一天与过去6个月中同一天的总体标准差数量。若某月不存在对应日期,则使用该月最后一天(例如7月31日将与1月31日、2月28日...6月30日进行对比)
baselinedev(/主机/key,1h:now/h,"d",10) #计算前一小时与过去十天中相同时段的总体标准差数量
baselinewma(/host/key,data period:time shift,season unit,num seasons)
使用加权移动平均算法,通过在多个相等的时间段(“季节”)内对相同时间段内的数据进行平均来计算基线。
参数:
- 参见通用参数;
- 数据周期 - 每个季节内的数据收集周期,定义为<N><时间单位>,其中:
N- 时间单位的数量time unit- h(小时)、d(天)、w(周)、M(月)或 y(年),必须等于或小于季节长度
时间偏移 - 时间周期偏移量,定义了数据收集时间段结束的季节数(参见示例); - 季节单位 - 单个季节的持续时间(h、d、w、M、y),不能小于数据周期;
- 季节数 - 要评估的季节数量。
示例:
baselinewma(/主机/key,1h:now/h,"d",3) # 根据昨天结束的3天周期内的最后完整小时计算基线。如果“now”是星期一13:30,则将分析星期五、星期六和星期日的12:00-12:59的数据
baselinewma(/主机/key,2h:now/h,"d",3) # 根据昨天结束的3天周期内的最后两小时计算基线。如果“now”是星期一13:30,则将分析星期五、星期六和星期日的11:00-12:59的数据
baselinewma(/主机/key,1d:now/d,"M",4) # 根据上个月之前4个月中与“昨天”相同日期的日期计算基线。如果所需日期不存在,则取该月的最后一天。如果今天是9月1日,则将分析7月31日、6月30日、5月31日和4月30日的数据。
trendavg(/host/key,time period:time shift)
定义时间段内趋势值的平均值。
参数:
- 参见通用参数。
示例:
trendavg(/主机/key,1h:now/h) #前一小时的平均值(例如 12:00-13:00)
trendavg(/主机/key,1h:now/h-1h) #两小时前的平均值(11:00-12:00)
trendavg(/主机/key,1h:now/h-2h) #三小时前的平均值(10:00-11:00)
trendavg(/主机/key,1M:now/M-1y) #一年前上个月的平均值
trendcount(/host/key,time period:time shift)
在定义的时间段内,用于计算趋势值的成功检索历史值的数量。
参数:
- 参见 通用参数。
示例:
trendcount(/主机/key,1h:now/h) # 上一小时的值数量(例如 12:00-13:00)
trendcount(/主机/key,1h:now/h-1h) # 两小时前的值数量(11:00-12:00)
trendcount(/主机/key,1h:now/h-2h) # 三小时前的值数量(10:00-11:00)
trendcount(/主机/key,1M:now/M-1y) # 一年前上个月的值数量
trendmax(/host/key,time period:time shift)
定义时间段内趋势值的最大值。
参数:
- 参见 通用参数。
示例:
trendmax(/主机/key,1h:now/h) #前一小时的最大值(例如 12:00-13:00)
trendmax(/主机/key,1h:now/h) - trendmin(/主机/key,1h:now/h) → 计算前一小时(12:00-13:00)的最大值与最小值之差(趋势差值)
trendmax(/主机/key,1h:now/h-1h) #两小时前的最大值(11:00-12:00)
trendmax(/主机/key,1h:now/h-2h) #三小时前的最大值(10:00-11:00)
trendmax(/主机/key,1M:now/M-1y) #一年前上个月的最大值
trendmin(/host/key,time period:time shift)
定义时间段内趋势值的最小值。
参数:
- 参见 通用参数。
示例:
trendmin(/主机/key,1h:now/h) #前一小时的最小值(例如 12:00-13:00)
trendmax(/主机/key,1h:now/h) - trendmin(/主机/key,1h:now/h) → 计算前一小时最大值与最小值之间的差值(趋势差值)(12:00-13:00)
trendmin(/主机/key,1h:now/h-1h) #两小时前的最小值(11:00-12:00)
trendmin(/主机/key,1h:now/h-2h) #三小时前的最小值(10:00-11:00)
trendmin(/主机/key,1M:now/M-1y) #一年前上个月的最小值
trendstl(/host/key,eval period:time shift,detection period,season,<deviations>,<devalg>,<s window>)
返回检测期间的异常率——介于 0 和 1 之间的十进制值,即 ((the number of anomaly values)/(total number of values))。
参数:
- 参见 通用参数;
- 评估周期(eval period) - 必须分解的时间周期(最小为 '1h'),定义为 <N><时间单位>,其中
N- 时间单位的数量time unit- h(小时)、d(天)、w(周)、M(月)或 y(年) - 检测周期(detection period) - 在评估周期结束前计算异常的时间周期(最小为 '1h',不能超过评估周期),定义为 <N><时间单位>,其中
N- 时间单位的数量time unit- h(小时)、d(天)、w(周) - 季节周期(season) - 预期存在重复模式(“季节”)的最短时间周期(最小为 '2h',不能超过评估周期,评估周期中的条目数必须大于结果频率(season/h)的两倍),定义为 <N><时间单位>,其中
N- 时间单位的数量time unit- h(小时)、d(天)、w(周) - 偏差数(deviations) - 被视为异常的偏差数(由 devalg 计算,可以是小数)(必须大于或等于 1,默认为 3);
- devalg(必须用双引号括起) - 偏差算法,可以是 stddevpop、stddevsamp 或 mad(默认);
- s window - 用于季节提取的 loess 窗口跨度(以滞后数为单位)(默认为 10 * 评估周期中的条目数 + 1)
示例:
trendstl(/主机/key,100h:now/h,10h,2h) #分析趋势数据的最后100小时,查找该周期最后10小时的异常率,预期周期性为2小时,如果评估周期的余数序列值达到该余数序列 MAD 的 3 偏差,则视为异常
trendstl(/主机/key,100h:now/h-10h,100h,2h,2.1,"mad") #分析100小时的趋势数据,直到10小时前,查找整个周期的异常率,预期周期性为2小时,如果评估周期的余数序列值达到该余数序列 MAD 的 2.1 偏差,则视为异常
trendstl(/主机/key,100d:now/d-1d,10d,1d,4,,10) #分析100天的趋势数据,直到1天前,查找该周期最后10天的异常率,预期周期性为1天,如果评估周期的余数序列值达到该余数序列 MAD 的 4 偏差,则视为异常,并将用于季节提取的 loess 窗口默认跨度 "10 * 评估周期中的条目数 + 1" 覆盖为 10 滞后数
trendstl(/主机/key,1M:now/M-1y,1d,2h,,"stddevsamp") #分析一年前的上个月,查找该周期最后一天的异常率,预期周期性为2小时,如果评估周期的余数序列值达到该余数序列样本标准差的 3 偏差,则视为异常
trendsum(/host/key,time period:time shift)
定义时间段内趋势值的总和。
参数:
- 参见 通用参数。
示例:
trendsum(/主机/key,1h:now/h) #前一小时的总和(例如 12:00-13:00)
trendsum(/主机/key,1h:now/h-1h) #两小时前的总和(11:00-12:00)
trendsum(/主机/key,1h:now/h-2h) #三小时前的总和(10:00-11:00)
trendsum(/主机/key,1M:now/M-1y) #一年前上个月的总和