5 趋势函数

趋势函数与history functions不同,使用 用于计算的保留趋势数据数据。

趋势存储每小时的聚合值。趋势函数使用这些每小时的平均值,因此适用于长期数据分析和监控。 长期分析

趋势函数结果会被缓存,因此使用相同参数多次调用同一函数时, 仅从数据库中获取一次信息。趋势函数缓存由以下项控制: 趋势函数缓存大小 服务器参数。

引用趋势函数的触发器在最小时间周期内评估一次。 在表达式中。例如,像这样的触发器

trendavg(/主机/key,1d:now/d) > 1 or trendavg(/主机/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(年)。
    • 时间偏移 - 时间偏移(参见函数示例)

函数详情

关于函数参数的一些通用说明:

  • 函数参数之间用逗号分隔
  • 可选的函数参数(或参数部分)用 < > 表示
  • 特定函数的参数会在每个函数中分别描述
  • /host/keytime 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(必须用双引号括起) - 偏差算法,可以是 stddevpopstddevsampmad(默认);
  • 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) #一年前上个月的总和

请参见 all supported functions