package
0.0.0-20250226155349-d67420b5a80f
Repository: https://github.com/detect-viz/shared-lib.git
Documentation: pkg.go.dev
# README
Notify 模組
通知模組負責處理告警通知的發送、重試和日誌管理。
功能特點
1. 通知發送
- 支持多種通知渠道
- Teams
- Line
- Slack
- Discord
- Webex
- Webhook
2. 生命週期管理
- 通知狀態追蹤
notify_path
: 待發送通知send_path
: 發送成功failed_path
: 發送失敗
- 日誌命名規則
{timestamp}_{resource}_{rule}_{uuid}_{status}_notify.log
status
: alerting/resolved
3. 錯誤處理
- 智能重試機制
- 最大重試次數: 3次
- 指數退避策略
- 初始等待: 1秒
- 最大等待: 30秒
4. 日誌管理
- 自動壓縮
- 每小時執行
- 壓縮1小時前的日誌
- 格式: tar.gz
- 自動清理
- 每天凌晨3點執行
- 保留30天
- 單目錄最大500MB
- 保持1GB剩餘空間
目錄結構
notify/
├── constants/ # 常量定義
├── errors/ # 錯誤類型
├── log/ # 日誌管理
├── channels/ # 通知實現
│ ├── email.go
│ ├── teams.go
│ ├── line.go
│ ├── slack.go
│ ├── discord.go
│ ├── webex.go
│ └── webhook.go
├── template/ # 通知模板
├── utils/ # 工具函數
└── service.go # 核心服務
處理流程
-
接收告警
- 從 alert 模組接收
NotificationLog
- 根據 Type 和 Status 選擇模板
- 從 alert 模組接收
-
發送通知
- 選擇對應的通知器
- 渲染通知模板
- 執行發送
channel, err := NewSender(notification) if err != nil { return err } return channel.Send(message)
-
結果處理
- 發送成功
- 移動到 send_path
- 更新 MySQL 記錄
- 發送失敗
- 重試次數 +1
- 超過最大重試次數移至 failed_path
- 記錄錯誤日誌
- 發送成功
-
日誌管理
- 自動壓縮歸檔
- 定期清理過期日誌
- 監控磁碟空間
使用範例
// 創建通知服務
service := notify.NewService(db)
// 發送通知
notification := models.NotificationLog{
Type: "email",
Status: "alerting",
Subject: "CPU 使用率過高",
Body: "Server CPU 使用率達到 90%",
}
if err := service.Send(notification); err != nil {
logger.Error("發送通知失敗", zap.Error(err))
}
注意事項
- 確保通知配置正確
- 監控重試次數和失敗率
- 定期檢查日誌狀態
- 注意磁碟空間使用