Monitoring Prometheus查询最后一个本地峰值

Monitoring Prometheus查询最后一个本地峰值,monitoring,prometheus,promql,kubernetes-cronjob,Monitoring,Prometheus,Promql,Kubernetes Cronjob,什么样的普罗米修斯查询(PromQl)可用于识别图形中最后X分钟内的最后一个局部峰值 局部峰值是大于其上一个和下一个数据点的点。(所以​​当前时间绝对不是本地峰值) (p:峰值点,i:作业间隔,m:未执行) 我希望该值能在cron作业的执行过程中发现异常。如图所示,我编写了一个查询,用于计算自上次执行作业以来经过的时间。现在,要设置一个警报规则来计算上次成功执行所经过的时间并查找错过的执行,我需要作业上次执行在该时间间隔内发生的时间量。该时间间隔对于查询来说是未知的(换句话说,作业的时间间隔是

什么样的普罗米修斯查询(PromQl)可用于识别图形中最后X分钟内的最后一个局部峰值

局部峰值是大于其上一个和下一个数据点的点。(所以​​当前时间绝对不是本地峰值)

(p:峰值点,i:作业间隔,m:未执行)


我希望该值能在cron作业的执行过程中发现异常。如图所示,我编写了一个查询,用于计算自上次执行作业以来经过的时间。现在,要设置一个警报规则来计算上次成功执行所经过的时间并查找错过的执行,我需要作业上次执行在该时间间隔内发生的时间量。该时间间隔对于查询来说是未知的(换句话说,作业的时间间隔是由另一个程序指定的),因此我无法将经过的时间与固定时间进行比较。

使用z-score来检测异常。

如果您知道一个系列的平均值和标准偏差(σ),您可以使用该系列中的任何样本来计算z分数。z分数是以平均值的标准偏差数来衡量的。因此,z分数为0意味着z分数与正态分布数据集中的平均值相同,而z分数为1意味着与平均值的偏差为1.0σ,以此类推

  • 使用大样本数据计算度量的平均和标准偏差
  • 获得聚合的平均值和标准偏差后,计算Prometheus查询的z分数
  • 根据正态分布的统计原理,您可以假设任何超出大约+1到-1范围的值都是异常值。例如,当我们的聚合超出此范围超过五分钟时,您可以收到警报。

    如果您希望在经过的时间超过固定持续时间时触发警报,则可以基于
    changes>0
    表达式设置类似于
    up
    警报的警报,该表达式仅在作业运行时为真(即
    >0

    例如:

    规则:
    -警报:CronJobNotRunning
    表达式:|
    变化(
    总数(
    比率(
    cronjob\u持续时间\u时间\u秒\u计数{
    status=“ok”,namespace=“,exported_job=“”
    }[1m]
    )
    )[1m:]
    ) == 0
    用于:
    
    请注意,子查询(
    [1m:::
    )非常昂贵,在那里引入记录规则有助于提高性能,尤其是在仪表板中


    同样,在您的例子中,也可以使用自上次二阶导数非零以来的时间,就像作业开始/完成时(图表中的下降或开始上升时)发生的情况一样。

    我不明白为什么假设正态分布是可以的。如果是这样的话,你的解决方案(假设工作通常按预期工作)就会奏效。解决方案的主要思想是正确的,我使用了它。但我为解决我的问题所做的查询是:abs((time()-max_over_time)(timestamp)(更改(sum by(exported_job)(rate)(cronjob_duration_time_time_seconds)(计数{status=“ok”}[5m]))[1m:]>0)[24h:)-avg_over time((time()-max_over time)(timestamp(更改(sum by(exported_job)(更改(sum by(exported_job)(rate)(rate)(rate)(rate)(cronjob_duration time_duration time_-time_-time_=“ok”}[5m])[1m:]>0[24h:])[1w:])/stddev_over_time((time()-max_over_time)(时间戳(更改(按导出的作业求和)(速率(cronjob_duration_time_time_seconds_count{status=“ok”}[5m]))[1m over time(>0)[24h:])[1w:]>2问题是我应该为设置多长时间的
    ?关键是我们没有作业运行的间隔。
    
    # Long-term average value for the series
    - record: job:cronjob_duration_time_seconds_count:rate10m:avg_over_time_1w
    expr: avg_over_time(sum(rate(cronjob_duration_time_seconds_count[10m]))[1w:])
    
    # Long-term standard deviation for the series
    - record: job:cronjob_duration_time_seconds_count:rate5m:stddev_over_time_1w
    expr: stddev_over_time(sum(rate(cronjob_duration_time_seconds_count[10m]))[1w:])
    
    # Z-Score for aggregation
    (
    job:cronjob_duration_time_seconds_count:rate10m -
    job:cronjob_duration_time_seconds_count:rate10m:avg_over_time_1w
    ) /  stddev_over_time(sum(rate(cronjob_duration_time_seconds_count[10m]))[1w:])