5 趋势函数

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

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

趋势函数结果会被缓存,因此多次调用相同参数的同个函数只会从数据库获取一次信息。趋势函数缓存由TrendFunctionCacheSize服务器参数控制。

仅引用趋势函数的触发器按表达式中最小时间周期评估一次。例如,类似

trendavg(/host/key,1d:now/d) > 1 or trendavg(/host/key2,1w:now/w) > 2

的触发器将每天评估一次。若触发器同时包含趋势和历史函数(或date and time及/或nodata()函数),则根据计算时间规则计算。

以下场景支持列出的所有函数:

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

  • 函数参数用逗号分隔
  • 可选参数(或参数部分)用< >表示
  • 函数特定参数详见各函数说明
  • /host/keytime period:time shift参数禁止加引号
通用参数
  • /host/key 是一个常见的必选首参数
  • time period:time shift 是常见的第二个参数,其中:
    • time period - 时间周期(最小为'1h'),定义为<N><time unit>,其中 N - 时间单位数量,time unit - h(小时)、d(天)、w(周)、M(月)或 y(年)。
    • time shift - 时间周期偏移量(参见函数示例)

趋势函数

函数
Description 函数特定参数 注释
baselinedev (/host/key,data period:time shift,season_unit,num_seasons)
Returns the number of deviations (by stddevpop algorithm) between the last data period and the same data periods in preceding seasons. data period - 季节内的数据收集周期,定义为<N><时间单位>,其中
N - 时间单位数量
time unit - h(小时)、d(天)、w(周)、M(月)或y(年),必须小于或等于季节长度

时间偏移 - 时间段偏移量(参见示例)

season_unit - 一个季节的持续时间(h、d、w、M、y),不能小于数据周期

num_seasons - 要评估的季节数量
示例:
=> 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)
Calculates the baseline by averaging data from the same timeframe in multiple equal time periods ('seasons') using the weighted moving average algorithm. data period - 季节内的数据收集周期,定义为<N><时间单位>,其中
N - 时间单位数量
time unit - h(小时)、d(天)、w(周)、M(月)或y(年),必须小于或等于季节长度

时间偏移 - 时间段偏移量,定义数据收集时间范围的结束季节(参见示例)

season_unit - 一个季节的持续时间(h、d、w、M、y),不能小于数据周期

num_seasons - 要评估的季节数量
示例:
=> 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)
Average of trend values within the defined time period. 参见通用参数 示例:
=> 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)
Number of successfully retrieved history values used to calculate the trend value within the defined time period. 参见通用参数 示例:
=> 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)
The maximum in trend values within the defined time period. 参见通用参数 示例:
=> 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)
The minimum in trend values within the defined time period. 参见通用参数 示例:
=> 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>)
Returns the rate of anomalies during the detection period - a decimal value between 0 and 1 that is ((the number of anomaly values)/(total number of values)). eval period - 需要分解的时间段(最小'1h'),定义为<N><时间单位>,其中
N - 时间单位数量
time unit - h(小时)、d(天)、w(周)、M(月)或y(年)。

时间偏移 - 时间段偏移量(参见示例)

detection period - 在eval period结束前计算异常的时间段(最小'1h',不能长于eval period),定义为<N><时间单位>,其中
N - 时间单位数量
time unit - h(小时)、d(天)、w(周)。

season - 预期重复模式("季节")的最短时间段(最小'2h',不能长于eval period,eval period中的条目数必须大于结果频率的两倍(season/h)),定义为<N><时间单位>,其中
N - 时间单位数量
time unit - h(小时)、d(天)、w(周)。

deviations - 视为异常的偏差数量(由devalg计算,可为小数)(必须大于或等于1,默认为3)

devalg(必须用双引号) - 偏差算法,可为stddevpopstddevsampmad(默认)

s_window - 季节性提取的loess窗口跨度(以滞后数为单位,默认为10 * eval period中的条目数 + 1)
示例:
=> trendstl(/主机/key,100h:now/h,10h,2h) → 分析最近100小时的趋势数据,
找出该时间段最后10小时的异常率,
预期周期为2小时,
若评估周期剩余序列值达到该剩余序列MAD的3倍偏差则视为异常
=> trendstl(/主机/key,100h:now/h-10h,100h,2h,2.1,"mad") → 分析截至10小时前的100小时趋势数据,
找出整个时间段的异常率,
预期周期为2小时,
若评估周期剩余序列值达到该剩余序列MAD的2.1倍偏差则视为异常
=> trendstl(/主机/key,100d:now/d-1d,10d,1d,4,,10) → 分析截至一天前的100天趋势数据,
找出该时间段最后10天的异常率,
预期周期为1天,
若评估周期剩余序列值达到该剩余序列MAD的4倍偏差则视为异常,
将季节性提取的loess窗口默认跨度"10 * eval period中的条目数 + 1"覆盖为10个滞后的跨度
=> trendstl(/主机/key,1M:now/M-1y,1d,2h,,"stddevsamp") → 分析一年前的上个月数据,
找出该时间段最后一天的异常率,
预期周期为2小时,
若评估周期剩余序列值达到该剩余序列样本标准差的3倍偏差则视为异常
trendsum (/host/key,time period:time shift)
Sum of trend values within the defined time period. 参见通用参数 示例:
=> 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) → 一年前上个月的总和