趋势存储每小时的聚合值。趋势函数使用这些每小时的平均值,因此适用于长期分析。
趋势函数的结果会被缓存,因此多次调用具有相同参数的相同函数只需从数据库中获取信息一次。趋势函数缓存由服务器参数TrendFunctionCacheSize控制。
仅引用趋势函数的触发器将根据表达式中的最小时间段每只评估一次。例如,像
这样的触发器将每天评估一次。如果触发器包含趋势和历史(或基于时间)函数,则根据通常原则进行计算。
此处列出的所有函数均在以下领域得到支持:
Some general notes on function parameters:
关于函数参数的一些通用说明:
<
>
表示/host/key
和 时间周期:时间偏移
参数永远不要 引用/host/key
是常见的强制第一个参数time period:time shift
是常用的第二个参数,其中:N
- 时间单位数,time unit
- h(小时) , d(日),w(周),M(月)或 y(年)。函数 | ||
---|---|---|
描述 | 函数特定参数 | 注释 |
baselinedev (/host/key,data period:time shift,season_unit,num_seasons) | ||
返回最后一个数据周期与之前季节中相同数据周期的偏差次数(使用stddevpop算法)。 | data period - 季节内数据收集周期,定义为<N><time unit>,其中N - 时间单位的数量time unit - h(小时)、d(天)、w(周)、M(月)或y(年),必须等于或小于季节时间偏移 - 时间周期偏移量(见示例) season_unit - 一个季节的持续时间(h、d、w、M、y),不能小于数据周期 num_seasons - 要评估的季节数量 |
示例: => baselinedev(/host/key,1d:now/d,"M",6) → 计算前一天与之前6个月中相同一天之间的标准偏差(总体)次数。如果前一个月中不存在该日期,则使用该月的最后一天(7月31日将与1月31日、2月28日、...6月30日进行分析)。 => baselinedev(/host/key,1h:now/h,"d",10) → 计算昨天前一个小时与之前十天中相同小时之间的标准偏差(总体)次数。 |
baselinewma (/host/key,data period:time shift,season_unit,num_seasons) | ||
通过加权移动平均算法,根据多个相等时间周期(“季节”)中的相同时间帧的数据平均值来计算基线。 | data period - 季节内的数据收集周期,定义为 <N><time unit>,其中N - 时间单位的数量time unit - h(小时)、d(天)、w(周)、M(月)或y(年),必须等于或小于季节 时间偏移 - 时间周期偏移量,定义了季节中数据收集时间帧的结束(见示例) season_unit - 一个季节的持续时间(h、d、w、M、y),不能小于数据周期 num_seasons - 要评估的季节数量 |
示例: => baselinewma(/host/key,1h:now/h,"d",3) → 基于昨天结束的3天周期内最后一个完整小时计算基线。如果"now"是周一13:30,将分析周五、周六和周日12:00-12:59的数据。 => baselinewma(/host/key,2h:now/h,"d",3) → 基于昨天结束的3天周期内最后两小时计算基线。如果"now"是周一13:30,将分析周五、周六和周日11:00-12:59的数据。 => baselinewma(/host/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(/host/key,1h:now/h) → 上一个小时的平均值(例如 12:00-13:00) => trendavg(/host/key,1h:now/h-1h) → 两小时前的平均值(11:00-12:00) => trendavg(/host/key,1h:now/h-2h) → 三小时前的平均值(10:00-11:00) => trendavg(/host/key,1M:now/M-1y) → 一年前的上个月的平均值 |
trendcount (/host/key,time period:time shift) | ||
在定义时间段内成功检索到的趋势值的数量。 | 查看通用参数。 | 示例: => trendcount(/host/key,1h:now/h) → 上一个小时的计数(例如 12:00-13:00) => trendcount(/host/key,1h:now/h-1h) → 两小时前的计数(11:00-12:00) => trendcount(/host/key,1h:now/h-2h) → 三小时前的计数(10:00-11:00) => trendcount(/host/key,1M:now/M-1y) → 一年前的上个月的计数 |
trendmax (/host/key,time period:time shift) | ||
在定义时间段内趋势值的最大值。 | 查看通用参数。 | 示例: => trendmax(/host/key,1h:now/h) → 上一个小时的最大值(例如 12:00-13:00) => trendmax(/host/key,1h:now/h) - trendmin(/host/key,1h:now/h) → 计算上一个小时(12:00-13:00)最大值和最小值之间的差异(趋势变化量) => trendmax(/host/key,1h:now/h-1h) → 两小时前的最大值(11:00-12:00) => trendmax(/host/key,1h:now/h-2h) → 三小时前的最大值(10:00-11:00) => trendmax(/host/key,1M:now/M-1y) → 一年前的上个月的最大值 |
trendmin (/host/key,time period:time shift) | ||
在定义时间段内趋势值的最小值。 | 查看通用参数。 | 示例: => trendmin(/host/key,1h:now/h) → 上一个小时的最小值(例如 12:00-13:00) => trendmin(/host/key,1h:now/h) - trendmin(/host/key,1h:now/h) → 计算上一个小时(12:00-13:00)最大值和最小值之间的差异(趋势变化量) => trendmin(/host/key,1h:now/h-1h) → 两小时前的最小值(11:00-12:00) => trendmin(/host/key,1h:now/h-2h) → 三小时前的最小值(10:00-11:00) => trendmin(/host/key,1M:now/M-1y) → 一年前的上个月的最小值 |
trendstl (/host/key,eval period:time shift,detection period,season,<deviations>,<devalg>,<s_window>) | ||
在检测期间返回异常率 - 介于0和1之间的小数,即(异常值的数量 / 总值数量) 。 |
eval period - 必须分解的时间周期(最小为'1h'),定义为 <N><time unit> 其中N - 时间单位的数量time unit - h(小时)、d(天)、w(周)、M(月)或y(年)。时间偏移 - 时间周期偏移量(见示例) detection period - eval period 结束前的时间段,用于计算异常(最小为'1h',不能长于 eval period),定义为 <N><time unit> 其中 N - 时间单位的数量time unit - h(小时)、d(天)、w(周)。season - 预期重复模式(“季节”)的最短时间段(最小为'2h',不能长于 eval period,eval period 中的条目数量必须大于由此产生的频率(season/h)的两倍),定义为 <N><time unit> 其中 N - 时间单位的数量time unit - h(小时)、d(天)、w(周)。deviations - 被视为异常的偏差数量(由 devalg 计算)(可以是小数),(必须大于或等于1,默认为3) devalg(必须用双引号括起) - 偏差算法,可以是 stddevpop、stddevsamp 或 mad(默认) s_window - 季节性提取的 loess 窗口跨度(滞后数)(默认为 10 * eval period 中的条目数量 + 1) |
示例: => trendstl(/host/key,100h:now/h,10h,2h) → 分析最后100小时的趋势数据, 找到该时期的最后10小时的异常率, 预期周期性为2小时, 如果评估期间的剩余序列值达到该剩余序列的MAD的3个偏差,则视为异常 => trendstl(/host/key,100h:now/h-10h,100h,2h,2.1,"mad") → 分析100小时的趋势数据,直到10小时前, 找到整个时期的异常率 预期周期性为2小时, 如果评估期间的剩余序列值达到该剩余序列的MAD的2.1个偏差,则视为异常 => trendstl(/host/key,100d:now/d-1d,10d,1d,4,,10) → 分析直到昨天为止的100天的趋势数据, 找到该时期最后10天的异常率, 预期周期性为1天, 如果评估期间的剩余序列值达到该剩余序列的MAD的4个偏差,则视为异常, 覆盖季节性提取的loess窗口的默认跨度"10 * eval period 中的条目数量 + 1",使用10个滞后的跨度 => trendstl(/host/key,1M:now/M-1y,1d,2h,,"stddevsamp") → 分析一年前的上个月, 找到该时期最后一天的异常率 预期周期性为2小时, 如果评估期间的剩余序列值达到该剩余序列的样本标准偏差的3个偏差,则视为异常 |
trendsum (/host/key,time period:time shift) | ||
在定义时间段内趋势值的总和。 | 查看通用参数。 | 示例: => trendsum(/host/key,1h:now/h) → 上一个小时的总和(例如 12:00-13:00) => trendsum(/host/key,1h:now/h-1h) → 两小时前的总和(11:00-12:00) => trendsum(/host/key,1h:now/h-2h) → 三小时前的总和(10:00-11:00) => trendsum(/host/key,1M:now/M-1y) → 一年前的上个月的总和 |