我在Prometheus中具有APC UPS的SNMP监视。
我有这样的警报规则:
- alert: 'APC status'
expr: apc_snmp_power_status{job="apc_snmp"} != 2
#snmp upsBasicOutputStatus, UID 1.3.6.1.4.1.318.1.1.1.4.1.1.0
for: 3m
labels:
severity: 'warning'
annotations:
title: 'APC {{ $labels.apcname }} status error.'
description: 'APC UPS management card {{ $labels.instance }} reports that UPS {{ $labels.apcname }} is not in Online status. (status {{ $value }}).
1: unknown \
2: onLine \
3: onBattery \
4: onSmartBoost \
5: timedSleeping \
6: softwareBypass \
7: off \
8: rebooting \
... '
是否可以在此处实现任何模板,该模板将用字典中的相应字符串替换$ value?
我想以表单
接收通知'APC UPS管理卡1.2.3.4报告UPS myAPC处于 onBattery 状态。 (状态 3 )。'
答案 0 :(得分:0)
经过几个小时的挖掘,它似乎可以正常工作:
- alert: 'APC status'
expr: apc_snmp_power_status{job="apc_snmp"} != 2
#snmp upsBasicOutputStatus, UID 1.3.6.1.4.1.318.1.1.1.4.1.1.0
for: 30s
labels:
severity: 'warning'
annotations:
title: 'APC {{ $labels.apcname }} status error.'
description: 'APC UPS management card {{ $labels.instance }} reports that UPS {{ $labels.apcname }} is in
{{ if eq ($value | humanize) "1" }} unknown
{{ else if eq ($value | humanize) "2" }} onLine
{{ else if eq ($value | humanize) "3" }} onBattery
{{ else if eq ($value | humanize) "4" }} onSmartBoost
{{ else if eq ($value | humanize) "5" }} timedSleeping
{{ else if eq ($value | humanize) "6" }} softwareBypass
{{ else if eq ($value | humanize) "7" }} off
{{ else if eq ($value | humanize) "8" }} rebooting {{ end }} status. (status {{ $value }})'
问题是比较float64类型和int,我通过'humanize'函数和int引号解决了它。 我不知道GoLang,也许还有另一个更简单的解决方案。