Prometheus 如何每小时测试一次警报?

Prometheus 如何每小时测试一次警报?,prometheus,prometheus-alertmanager,Prometheus,Prometheus Alertmanager,我对普罗米修斯很陌生,我有一个关于:1h的警报,我想知道测试警报时应该设置什么评估时间? 目前它失败了,并且只有在警报:1m和评估时间:10m时才能工作 请有人告诉我这是怎么回事 例如: groups: - name: spark.rules rules: ##### ALERTS ##### - alert: xxxSparkJobsNotConsuming expr: rate(foo{data_type="bar"}[5m]) == 0 for: 1h ---&

我对普罗米修斯很陌生,我有一个关于:1h的警报
我想知道测试警报时应该设置什么评估时间? 目前它失败了,并且只有在警报:1m和评估时间:10m时才能工作

请有人告诉我这是怎么回事

例如:

groups:
- name: spark.rules
  rules:
  ##### ALERTS #####
  - alert: xxxSparkJobsNotConsuming
    expr: rate(foo{data_type="bar"}[5m]) == 0
    for: 1h ---> works if i set it to 5m
    labels:
      service: spark
      severity: warning
      source: spark
    annotations:
      description: 'Nothing have been consumed for 1 hour.'
测试:

   rule_files:
      - spark.rules.yml
    evaluation_interval: 1m

    tests:
     - interval: 1m
       input_series:
        - series: 'foo{data_type="bar"}'
          values: '0'
        - series: 'foo{data_type="bar"}'
          values: '64706+0x10'
       alert_rule_test:
        - eval_time: 2h
          alertname: xxxSparkJobsNotConsuming
          exp_alerts:
           - exp_labels:
               data_type: xxxx
               service: spark
               severity: warning
               source: spark
             exp_annotations:
               description: 'Nothing have been consumed for 1 hour.'
       promql_expr_test:
        - expr: 'foo'
          eval_time: 4m
          exp_samples:
            - labels: 'foo{data_type="bar"}'
              value: 64706
[您在邮件中使用
“xx”
“xxx”
“xxxx”
作为
数据类型的值,因此我不确定是什么。也许下次尝试使用
“foo”
“bar”
“baz”
,或
“1”
“2”
“3”
。特别是,您定义的两个
input_系列
具有完全相同的名称和标签值。我假设在实际测试中不是这样,我将它们称为
series1
series2
]

现在,撇开这一点不谈,您的测试定义了2个时间序列,样本间隔1分钟:

series1: 0
series2: 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706
series1
只有一个样本,这意味着使用
rate
的警报永远不会触发,因为
rate
至少需要两个样本才能产生结果

series2
的常量值为64706,持续11分钟,这意味着警报中的
速率(series2[5m])==0
表达式将在1分钟(第一次在
5m
范围内有2个样本)和15分钟(最后一次
5m
范围包含2个样本)之间保持。这意味着您的警报将触发14分钟(或在连续15分钟内,不确定:X使用哪个定义)

换言之,任何小于或等于14米(或15米)的
for:X
值都会导致您的警报在某个时间触发。任何大于该值的值都将导致警报永不触发,因为该条件不会保持那么长时间。(也就是说,
alert\u rule\u test
具有
eval\u time:2h
,我认为这意味着“警报必须从一开始就在
2h
处触发”,无论您在
for:
中使用什么值,都不应该发生这种情况。)

无论如何,关键是您需要
series2
至少覆盖
for:
的内容,才能保持该条件。如果您有10分钟的样本,则条件不能保持2小时(当然,除非条件是没有最近的样本)

我不知道该怎么说评估时间:2h,我想你只需要玩玩它,看看为什么它看起来不像锡罐上写的那样。

[你同时使用
“xx”
“xxx”
“xxxx”
查看您的消息中的
数据类型的值,因此我不确定是什么。也许下次尝试使用
“foo”
“bar”
“baz”
。或
“1”
“2”
“3”
。特别是,您定义的两个
input_系列
具有完全相同的名称和标签值。我假设在实际测试中不是这样,我将它们称为
series1
series2
]

现在,撇开这一点不谈,您的测试定义了2个时间序列,样本间隔1分钟:

series1: 0
series2: 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706
series1
只有一个样本,这意味着使用
rate
的警报永远不会触发,因为
rate
至少需要两个样本才能产生结果

series2
的常量值为64706,持续11分钟,这意味着警报中的
速率(series2[5m])==0
表达式将在1分钟(第一次在
5m
范围内有2个样本)和15分钟(最后一次
5m
范围包含2个样本)之间保持。这意味着您的警报将触发14分钟(或在连续15分钟内,不确定:X使用哪个定义)

换言之,任何小于或等于14米(或15米)的
for:X
值都会导致您的警报在某个时间触发。任何大于该值的值都将导致警报永不触发,因为该条件不会保持那么长时间。(也就是说,
alert\u rule\u test
具有
eval\u time:2h
,我认为这意味着“警报必须从一开始就在
2h
处触发”,无论您在
for:
中使用什么值,都不应该发生这种情况。)

无论如何,关键是您需要
series2
至少覆盖
for:
的内容,才能保持该条件。如果您有10分钟的样本,则条件不能保持2小时(当然,除非条件是没有最近的样本)


我不知道该怎么说
eval_time:2h
,我想你只需要玩玩它,看看为什么它看起来不像锡罐上写的那样。

那么你的意思是说,如果for条件是1h,我们永远无法测试警报,即使我有1h的值?不,我的意思是,如果要使用
for:1h
测试警报,您需要为
1h
准备样本。按原样,您似乎只有10分钟的样本。因此,您的意思是,如果for条件为1h,即使我有1h的值,我们也无法测试警报?不,我的意思是,如果要使用
for:1h
测试警报,您需要为
1h
提供样本。实际上,您似乎只有10分钟的样本。