添加 "for" 警报时 Prometheus 单元测试失败
Prometheus unit test failing when adding "for" to alert
使用以下普罗米修斯配置:
groups:
- name: backup
rules:
- alert: BackupTooOld
expr: time() - last_backup_success > 216000
# for: 1h # 1m # 1s # <-- Setting any of these causes it to fail
labels:
severity: critical
annotations:
summary: "Backup too old"
description: >-
Backup for {{ $labels.path }} is over 2.5 days old.
...以及以下测试:
rule_files:
- alert.rules
evaluation_interval: 1m
tests:
- name: backup
interval: 1h
input_series:
- series: 'last_backup_success{path="gmail"}'
values: '0x72'
- series: 'last_backup_success{path="drive"}'
values: '90000x72'
alert_rule_test:
- eval_time: 59h
alertname: BackupTooOld
exp_alerts: []
- eval_time: 63h
alertname: BackupTooOld
exp_alerts:
- exp_labels:
severity: critical
path: gmail
exp_annotations:
summary: Backup too old
description: Backup for gmail is over 2.5 days old.
...一切正常。但是,更改 alert
规则以添加任何非零 for
值(1h
、1m
、1s
)会导致第二个测试失败 - 无论多高我设置了eval_time
。我错过了什么?
(for
设置的基本原理是,在启动时,第一次检查 last_backup_success
需要一点时间。我测试了其他设置 for
的警报,这似乎工作正常。)
非零 for
要求警报至少触发两个 evaluation_interval
以确保它涵盖必要的时间。
这里结合了你的时间序列是稀疏的,因为它们每小时只有一个数据点,所以陈旧开始了。这是不切实际的测试数据,1m 的间隔会更好。
在组合示例中,警报不会在 63h 时触发,但它应该在 63h1m 到 63h5m 时以 1m for
触发。给定这个测试数据,超过 5m 的 A 永远不会触发。
使用以下普罗米修斯配置:
groups:
- name: backup
rules:
- alert: BackupTooOld
expr: time() - last_backup_success > 216000
# for: 1h # 1m # 1s # <-- Setting any of these causes it to fail
labels:
severity: critical
annotations:
summary: "Backup too old"
description: >-
Backup for {{ $labels.path }} is over 2.5 days old.
...以及以下测试:
rule_files:
- alert.rules
evaluation_interval: 1m
tests:
- name: backup
interval: 1h
input_series:
- series: 'last_backup_success{path="gmail"}'
values: '0x72'
- series: 'last_backup_success{path="drive"}'
values: '90000x72'
alert_rule_test:
- eval_time: 59h
alertname: BackupTooOld
exp_alerts: []
- eval_time: 63h
alertname: BackupTooOld
exp_alerts:
- exp_labels:
severity: critical
path: gmail
exp_annotations:
summary: Backup too old
description: Backup for gmail is over 2.5 days old.
...一切正常。但是,更改 alert
规则以添加任何非零 for
值(1h
、1m
、1s
)会导致第二个测试失败 - 无论多高我设置了eval_time
。我错过了什么?
(for
设置的基本原理是,在启动时,第一次检查 last_backup_success
需要一点时间。我测试了其他设置 for
的警报,这似乎工作正常。)
非零 for
要求警报至少触发两个 evaluation_interval
以确保它涵盖必要的时间。
这里结合了你的时间序列是稀疏的,因为它们每小时只有一个数据点,所以陈旧开始了。这是不切实际的测试数据,1m 的间隔会更好。
在组合示例中,警报不会在 63h 时触发,但它应该在 63h1m 到 63h5m 时以 1m for
触发。给定这个测试数据,超过 5m 的 A 永远不会触发。