:::info 支持,默认支持的是 邮件告警,使用前需要 配置发送人信息 。 :::

配置邮件发送人信息

image.png

设置支持告警提醒

  1. // see internal/router/router.go
  2. ...
  3. mux, err := core.New(logger,
  4. ...
  5. core.WithAlertNotify(alert.NotifyHandler(logger)),
  6. ...
  7. )
  8. // core.WithAlertNotify() 表示已设置告警提醒
  9. // 告警提醒包括:
  10. // 1. 发生 panic 异常时,进行告警提醒;
  11. // 2. 发生已配置告警的 error 时,进行告警提醒;
  12. // alert.NotifyHandler 表示具体告警通知的实现,目前是邮件告警通知

告警逻辑

  1. // see internal/alert/alert.go
  2. // NotifyHandler 告警通知
  3. func NotifyHandler(logger *zap.Logger) func(msg *proposal.AlertMessage) {
  4. if logger == nil {
  5. panic("logger required")
  6. }
  7. return func(msg *proposal.AlertMessage) {
  8. cfg := configs.Get().Mail
  9. if cfg.Host == "" || cfg.Port == 0 || cfg.User == "" || cfg.Pass == "" || cfg.To == "" {
  10. logger.Error("Mail config error")
  11. return
  12. }
  13. subject, body, err := newHTMLEmail(
  14. msg.Method,
  15. msg.HOST,
  16. msg.URI,
  17. msg.TraceID,
  18. msg.ErrorMessage,
  19. msg.ErrorStack,
  20. )
  21. if err != nil {
  22. logger.Error("email template error", zap.Error(err))
  23. return
  24. }
  25. options := &mail.Options{
  26. MailHost: cfg.Host,
  27. MailPort: cfg.Port,
  28. MailUser: cfg.User,
  29. MailPass: cfg.Pass,
  30. MailTo: cfg.To,
  31. Subject: subject,
  32. Body: body,
  33. }
  34. if err := mail.Send(options); err != nil {
  35. logger.Error("发送告警通知邮件失败", zap.Error(errors.WithStack(err)))
  36. }
  37. return
  38. }
  39. }

邮件告警模板

image.png

如何设置其他方式的告警?

编辑 alert.NotifyHandler 方法即可。