趋势函数与history functions不同,使用保留趋势数据数据进行计算。
趋势存储每小时聚合值。趋势函数使用这些每小时平均值,因此适用于长期分析。
趋势函数结果会被缓存,因此多次调用相同参数的同个函数只会从数据库获取一次信息。趋势函数缓存由TrendFunctionCacheSize服务器参数控制。
仅引用趋势函数的触发器仅按表达式中最小时间周期评估一次。例如,类似
的触发器将每天评估一次。若触发器同时包含趋势和历史函数(或date and time及/或nodata()函数),则根据计算时间规则计算。
以下场景支持列出的所有函数:
关于函数参数的通用说明:
<
>
表示/host/key
和time period:time shift
参数禁止加引号/host/key
是一个常见的必选首参数time period:time shift
是常见的第二个参数,其中:
N
- 时间单位数量,time unit
- h(小时)、d(天)、w(周)、M(月)或 y(年)。函数 | ||
---|---|---|
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(必须用双引号) - 偏差算法,可为stddevpop、stddevsamp或mad(默认) 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) → 一年前上个月的总和 |