Skip to content

Prometheus time unittest

現在の unixtime を返してくれる time() を使ったときの Prometheus Unittest の書き方です.

よくあるのは SSL 証明書が切れそうなときアラートを発破したいという時かと思います. このアラートのテストをしたいと思ったとき,time() をどう mock するかみたいなことを考えるかと思います.

rules:
- alert: SSLCertExpiringSoon
expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 3
for: 1m

答えはだいたい下記の issue に書いてあります.eval_time が 0s の時 time() は 0 を,例えば 1m の時は 60 を返すようになっているようです.

promtool unittests fail with rate() & time() · Issue #4817 · prometheus/prometheus · GitHub

ということでこんな感じに書けると思います.

- interval: 15s
input_series:
- series: probe_ssl_earliest_cert_expiry
values: 0+0x100
alert_rule_test:
- alertname: SSLCertExpiringSoon
eval_time: 0s
exp_alerts: []
- alertname: SSLCertExpiringSoon
eval_time: 90s
exp_alerts:
- exp_labels:
severity: warning