如何测试每小时的警报?
How to test an alert for hourly?
我是 prometheus 的新手,我有一个 for: 1h
警报 我想知道在测试警报时 eval_time 应该设置什么?
目前它失败了,并且只有在 alert: 1m and eval_time: 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"
作为 data_type
的值,所以我不确定是什么。也许下次尝试使用 "foo"
、"bar"
、"baz"
。或者 "1"
、"2"
、"3"
。特别是,您定义的两个 input_series
具有完全相同的名称和标签值。我假设在您的实际测试中情况并非如此,我将它们称为 series1
和 series2
.]
现在,撇开这个不谈,您的测试定义了 2 个时间序列,样本间隔 1 分钟:
series1: 0
series2: 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706
series1
只有一个样本,这意味着使用 rate
的警报永远不会触发它,因为 rate
需要至少 2 个样本才能产生结果。
series2
在 11 分钟内具有 64706 的恒定值,这意味着警报中的 rate(series2[5m]) == 0
表达式将在第 1 分钟之间保持不变(第一次 [=29= 中有 2 个样本) ] 范围)和 15(最后一次 5m
范围包含 2 个样本)。这意味着您的警报将触发 14 分钟(或连续 15 分钟,不确定 for: X
使用哪个定义)。
换句话说,任何 for: X
14m(或 15m)的值都会导致您的警报一次或一次触发。任何大于该值的值都将导致警报永远不会触发,因为条件永远不会保持那么久。 (话虽这么说,alert_rule_test
有 eval_time: 2h
,我认为这意味着 "the alert must be firing at 2h
from the start",但无论您在 for:
中使用什么值,都不应如此。)
无论如何,关键是您需要 series2
覆盖至少与 for:
一样多才能满足该条件。如果你有 10 分钟的样本,条件不能保持 2 小时(当然,除非条件是没有最近的样本)。
关于 eval_time: 2h
,我不知道该说些什么,我猜你只需要尝试一下,看看为什么它看起来不像罐头上说的那样。
我是 prometheus 的新手,我有一个 for: 1h
警报 我想知道在测试警报时 eval_time 应该设置什么?
目前它失败了,并且只有在 alert: 1m and eval_time: 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"
作为 data_type
的值,所以我不确定是什么。也许下次尝试使用 "foo"
、"bar"
、"baz"
。或者 "1"
、"2"
、"3"
。特别是,您定义的两个 input_series
具有完全相同的名称和标签值。我假设在您的实际测试中情况并非如此,我将它们称为 series1
和 series2
.]
现在,撇开这个不谈,您的测试定义了 2 个时间序列,样本间隔 1 分钟:
series1: 0
series2: 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706 64706
series1
只有一个样本,这意味着使用 rate
的警报永远不会触发它,因为 rate
需要至少 2 个样本才能产生结果。
series2
在 11 分钟内具有 64706 的恒定值,这意味着警报中的 rate(series2[5m]) == 0
表达式将在第 1 分钟之间保持不变(第一次 [=29= 中有 2 个样本) ] 范围)和 15(最后一次 5m
范围包含 2 个样本)。这意味着您的警报将触发 14 分钟(或连续 15 分钟,不确定 for: X
使用哪个定义)。
换句话说,任何 for: X
14m(或 15m)的值都会导致您的警报一次或一次触发。任何大于该值的值都将导致警报永远不会触发,因为条件永远不会保持那么久。 (话虽这么说,alert_rule_test
有 eval_time: 2h
,我认为这意味着 "the alert must be firing at 2h
from the start",但无论您在 for:
中使用什么值,都不应如此。)
无论如何,关键是您需要 series2
覆盖至少与 for:
一样多才能满足该条件。如果你有 10 分钟的样本,条件不能保持 2 小时(当然,除非条件是没有最近的样本)。
关于 eval_time: 2h
,我不知道该说些什么,我猜你只需要尝试一下,看看为什么它看起来不像罐头上说的那样。