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