Prometheus 如何每小时测试一次警报?
我对普罗米修斯很陌生,我有一个关于:1h的警报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 ---&
,
我想知道测试警报时应该设置什么评估时间?
目前它失败了,并且只有在警报: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分钟的样本。