Bosun никогда не отправлять неизвестные уведомления
Неизвестное уведомление действительно беспокоит меня, и официальные документы кажутся более новыми, чем выпущенный двоичный файл bosun, вроде unknownPost
это нелегальный вариант.
Следующий неизвестный шаблон и уведомление не работают. Я вижу неизвестные уведомления в пользовательском интерфейсе Bosun, но он не отправляет уведомления (http alert). Другие нормальные оповещения работают нормально.
template tmpl_unknown {
body = 'x'
subject = `{{$v := .Eval .Alert.Vars.val }}{"warn_undo": [{"app":"xxx","db_type":"NOSQL","db_cat":"aaaa","ip":"{{.Group.host}}","warn_level":1,"warn_type":"cpu","warn_detail":"cpu {{.Group.device}} total util is {{$v.Value | pct}} ","notifier": "xxxxxxxx","status":"undo","report_time":""}]}`
# body = {{.Name}}: {{.Group | len}} unknown alerts
# subject = `{"warn_undo": [{"app":"aaaa","db_type":"NOSQL","db_cat":"aaaa","ip":"x.x.x.x","warn_level":1,"warn_type":"alive","warn_detail":"Time: {{.Time}} xName: {{.Name}} Alerts:{{range .Group}}{{.}},{{end}}","notifier": "xxxxxxxx","status":"undo","report_time":""}]}`
unknown_alive = `
{"warn_undo": [{"app":"aaaa","db_type":"NOSQL","db_cat":"aaaa","ip":"x.x.x.x","warn_level":1,"warn_type":"alive","warn_detail":"Time: {{.Time}} Name: {{.Name}} Alerts:{{range .Group}}{{.}},{{end}}","notifier": "xxxxxxxx","status":"undo","report_time":""}]}`
}
unknownTemplate = tmpl_unknown
notification gcsx_unknown {
post = ${sys.gcsAlert}
contentType = application/json
print = True
timeout = 5m
next = gcsx_unknown
unknownBody = unknown_alive
bodyTemplate = subject
# unknownMinGroupSize = 5
# unknownThreshold = 0
}
alert cpu_total_util_or_unknown {
template = tmpl_unknown
$val = avg(q("none:0all-last:cpu.pct_used{host=*,device=total}", "1m", ""))
warn = $val > 60
warnNotification = gcsx_unknown
runEvery = 1
unknown = 1m
}
Я хочу предупредить использование процессора. Если хост отсутствует, данные не сообщаются, и я получаю неизвестное предупреждение.
Версия Bosun: новейшая скомпилированная из мастер ветки (2018.10.08)
1 ответ
После рытья кода я наконец нашел проблему, и это просто:
неизвестное уведомление должно быть отправлено как critNotification
cmd/bosun/sched/check.go:290
incident.NeedAck = true
switch event.Status {
case models.StCritical, models.StUnknown:
notify(a.CritNotification)
case models.StWarning:
notify(a.WarnNotification)
}
+ Изменить warn
, warnNotification
в crit
а также critNotification
и уведомление отправлено успешно. Это должно быть задокументировано на bosun.org.
unknownPost
это законный вариант, так же, как unknownPost
,unknownGet
,unknownBody
,unknownEmailSubject
, Но они должны быть определены в переменных шаблона, иначе он сообщит об ошибке:
2018/10/11 16:19:36 fatal: main.go:130: couldn't read rules: conf: bosun_rule.conf:47:0: at <alert x...>:
notification x uses template key unknown_post in unknown post url, but template cpu_util does not include it
Правильный путь это:
template tmpl_unknown {
unknown_alive = `
{"warn_undo": [{"app":"xxx","db_type":"NOSQL","db_cat":"aaaa","ip":"x.x.x.x","warn_level":1,"warn_type":"alive","warn_detail":"Time: {{.Time}} Name: {{.Name}} Alerts:{{range .Group}}{{.}},{{end}}","notifier": "xxx","status":"undo","report_time":""}]}`
unknown_post = "//x.x.x.x:7777/alert"
# unknown_post = {{ V "$gcsAlert" }}
}
notification gcsx_unknown {
post = ${sys.gcsAlert}
contentType = application/json
print = True
timeout = 5m
next = gcsx_unknown
unknownBody = unknown_alive
unknownPost = unknown_post
}
Как вы заметили, префикс http url http:
должны быть удалены.