feat(alert-center): 添加飞书Webhook通知渠道 + 告警引擎实时通知

- 后端: NotifyChannel 模型新增 feishu 类型, FeishuWebhookConfig
- 后端: TestNotifyChannel 真实发送飞书测试消息(文本格式)
- 后端: 告警引擎触发/恢复时自动发送飞书通知(sendFeishuAlert/sendFeishuRecovery)
- 后端: AlertEngine 新增 tcp_time_wait/tcp_close_wait/service_process 指标检测
- 后端: NetworkStatModel 新增 TCPCloseWait 字段
- 后端: QuickSetupRules 一键创建6条告警规则(CPU/内存/磁盘/TIME_WAIT/CLOSE_WAIT/进程)
- 后端: 注册 /alerts/quick-setup 路由
- 前端: AlertChannelDialog 新增飞书类型选项
- 前端: helpers 新增 getChannelIcon/getChannelTypeLabel 支持 feishu/dingtalk/wechat
This commit is contained in:
attacker committed 2026-06-24 08:34:43 +00:00
1 parent 7bc5169e8f
commit 5333f6f04a
30 files changed
+2406 -1001

No files matched your search

+104 -49
View File
@@ -2,35 +2,41 @@ package models
import (
"time"
)
// AgentReport Agent 上报的原始指标数据 // Logan.Li
type AgentReport struct {
ID uint `gorm:"primarykey" json:"id"`
Hostname string `gorm:"size:255;index;not null" json:"hostname"`
CPUUsage float64 `gorm:"type:decimal(6,2)" json:"cpu_usage"` // CPU 使用率 %
CPUCores int `json:"cpu_cores"` // CPU 核心数
Load1 float64 `gorm:"type:decimal(8,2)" json:"load1"` // 1分钟负载
Load5 float64 `gorm:"type:decimal(8,2)" json:"load5"` // 5分钟负载
Load15 float64 `gorm:"type:decimal(8,2)" json:"load15"` // 15分钟负载
MemTotal float64 `gorm:"type:decimal(10,2)" json:"mem_total"` // 总内存 GB
MemUsed float64 `gorm:"type:decimal(10,2)" json:"mem_used"` // 已用内存 GB
MemUsage float64 `gorm:"type:decimal(6,2)" json:"mem_usage"` // 内存使用率 %
DiskInfo string `gorm:"type:text" json:"disk_info"` // 磁盘信息 JSON
PortInfo string `gorm:"type:text" json:"port_info"` // 端口信息 JSON
NetInfo string `gorm:"type:text" json:"net_info"` // 网络指标 JSON
DiskIOInfo string `gorm:"type:text" json:"disk_io_info"` // 磁盘 IO JSON
ReportTime time.Time `json:"report_time"` // 上报时间
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
ID uint `gorm:"primarykey" json:"id"`
Hostname string `gorm:"size:255;index;not null" json:"hostname"`
CPUUsage float64 `gorm:"type:decimal(6,2)" json:"cpu_usage"`
CPUCores int `json:"cpu_cores"`
Load1 float64 `gorm:"type:decimal(8,2)" json:"load1"`
Load5 float64 `gorm:"type:decimal(8,2)" json:"load5"`
Load15 float64 `gorm:"type:decimal(8,2)" json:"load15"`
MemTotal float64 `gorm:"type:decimal(10,2)" json:"mem_total"`
MemUsed float64 `gorm:"type:decimal(10,2)" json:"mem_used"`
MemUsage float64 `gorm:"type:decimal(6,2)" json:"mem_usage"`
DiskInfo string `gorm:"type:text" json:"disk_info"`
PortInfo string `gorm:"type:text" json:"port_info"`
NetInfo string `gorm:"type:text" json:"net_info"`
DiskIOInfo string `gorm:"type:text" json:"disk_io_info"`
// ──── v2.0 新增字段 ────
SwapInfo string `gorm:"type:text" json:"swap_info"` // Swap JSON
ProcessTopInfo string `gorm:"type:text" json:"process_top_info"` // 进程 TOP JSON
FDInfo string `gorm:"type:text" json:"fd_info"` // FD 句柄 JSON
CSInfo string `gorm:"type:text" json:"cs_info"` // 上下文切换 JSON
HeartbeatInfo string `gorm:"type:text" json:"heartbeat_info"` // Agent 心跳 JSON
// ──────────────────────────
ReportTime time.Time `json:"report_time"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
func (AgentReport) TableName() string {
return "monitor_agent_reports"
}
// AgentLatestResponse Agent 最新状态(含服务器元信息)// Logan.Li
// AgentLatestResponse Agent 最新状态(含服务器元信息)
type AgentLatestResponse struct {
ServerID uint `json:"server_id"`
Hostname string `json:"hostname"`
@@ -41,41 +47,91 @@ type AgentLatestResponse struct {
MemTotal float64 `json:"mem_total"`
MemUsed float64 `json:"mem_used"`
DiskUsage float64 `json:"disk_usage"`
DiskTotal int64 `json:"disk_total"` // 磁盘总容量 GB
DiskTotal int64 `json:"disk_total"`
DiskInfo string `json:"disk_info"`
PortInfo string `json:"port_info"`
NetInfo string `json:"net_info"`
DiskIOInfo string `json:"disk_io_info"`
ReportTime string `json:"report_time"`
AgentVersion string `json:"agent_version"`
AgentStatus string `json:"agent_status"`
OS string `json:"os"`
Kernel string `json:"kernel"` // 内核版本
Uptime int64 `json:"uptime"` // 运行秒数
Region string `json:"region"`
HasAuth bool `json:"has_auth"` // 是否有 SSH 凭据
// ──── v2.0 新增 ────
SwapInfo string `json:"swap_info"`
ProcessTopInfo string `json:"process_top_info"`
FDInfo string `json:"fd_info"`
CSInfo string `json:"cs_info"`
HeartbeatInfo string `json:"heartbeat_info"`
// ─────────────────
ReportTime string `json:"report_time"`
AgentVersion string `json:"agent_version"`
AgentStatus string `json:"agent_status"`
OS string `json:"os"`
Kernel string `json:"kernel"`
Uptime int64 `json:"uptime"`
Region string `json:"region"`
HasAuth bool `json:"has_auth"`
}
// AgentReportRequest Agent 上报请求体 // Logan.Li
// AgentReportRequest Agent 上报请求体
type AgentReportRequest struct {
Hostname string `json:"hostname" binding:"required"`
IP string `json:"ip"` // Agent 探测的本机 IP
Timestamp string `json:"timestamp"`
AgentVersion string `json:"agent_version"` // Agent 版本号
CPU CPUMetric `json:"cpu"`
Memory MemMetric `json:"memory"`
Disks []DiskMetric `json:"disks"`
Ports []PortMetric `json:"ports"`
Network NetworkStat `json:"network"` // 网络指标
DiskIO DiskIOStat `json:"disk_io"` // 磁盘 IO
System *SystemStat `json:"system,omitempty"` // 系统信息(首次/变更时上报)
Hostname string `json:"hostname" binding:"required"`
IP string `json:"ip"`
Timestamp string `json:"timestamp"`
AgentVersion string `json:"agent_version"`
CPU CPUMetric `json:"cpu"`
Memory MemMetric `json:"memory"`
Swap *SwapMetric `json:"swap,omitempty"`
Disks []DiskMetric `json:"disks"`
Ports []PortMetric `json:"ports"`
Network NetworkStatModel `json:"network"`
DiskIO DiskIOStatModel `json:"disk_io"`
System *SystemStatModel `json:"system,omitempty"`
// ──── v2.0 新增 ────
ProcessTop []ProcessMetric `json:"process_top,omitempty"`
FD *FDMetric `json:"fd,omitempty"`
ContextSwitches *CSMetric `json:"context_switches,omitempty"`
Heartbeat HeartbeatMetric `json:"heartbeat"`
}
// SystemStat 系统静态信息(OS/内核/运行时长)// Logan.Li
type SystemStat struct {
OSVersion string `json:"os_version"` // OS 版本 (如 "Ubuntu 22.04")
Kernel string `json:"kernel"` // 内核版本
Uptime int64 `json:"uptime"` // 运行秒数
// ──── v2.0 新增上报类型 ────
type SwapMetric struct {
TotalGB float64 `json:"total_gb"`
UsedGB float64 `json:"used_gb"`
UsagePercent float64 `json:"usage_percent"`
}
type ProcessMetric struct {
PID int `json:"pid"`
Name string `json:"name"`
MemoryMB float64 `json:"memory_mb"`
FDCount int `json:"fd_count"`
Threads int `json:"threads"`
}
type FDMetric struct {
Allocated int `json:"allocated"`
Max int64 `json:"max"`
UsagePct float64 `json:"usage_pct"`
}
type CSMetric struct {
CTXPerSec float64 `json:"ctx_per_sec"`
IRQPerSec float64 `json:"irq_per_sec"`
}
type HeartbeatMetric struct {
Version string `json:"version"`
UptimeSec int64 `json:"uptime_sec"`
LastErr string `json:"last_err,omitempty"`
SelfCPU float64 `json:"self_cpu_pct"`
SelfRSSMB float64 `json:"self_rss_mb"`
ReportSeq uint64 `json:"report_seq"`
}
// ──── 已有类型 ────
type SystemStatModel struct {
OSVersion string `json:"os_version"`
Kernel string `json:"kernel"`
Uptime int64 `json:"uptime"`
}
type CPUMetric struct {
@@ -108,18 +164,17 @@ type PortMetric struct {
PID int `json:"pid"`
}
// NetworkStat 网络指标(Agent 上报)
type NetworkStat struct {
type NetworkStatModel struct {
TCPEstablished int `json:"tcp_established"`
TCPTimeWait int `json:"tcp_time_wait"`
TCPCloseWait int `json:"tcp_close_wait"`
TCPTotal int `json:"tcp_total"`
NicName string `json:"nic_name"`
NetRxBPS float64 `json:"net_rx_bps"`
NetTxBPS float64 `json:"net_tx_bps"`
}
// DiskIOStat 磁盘 IO 指标(Agent 上报)
type DiskIOStat struct {
type DiskIOStatModel struct {
ReadBPS float64 `json:"read_bps"`
WriteBPS float64 `json:"write_bps"`
ReadIOPS float64 `json:"read_iops"`