feat(notify): 告警补服务端掉线/Agent 不可达/配置漂移,巡检改 Source 接口(v1.2.10)
CI / verify (push) Canceled after 0s

- 三个新事件(默认关闭):公网服务端掉线、公网 agent 不可达、配置漂移;连续失败阈值与漂移提醒间隔均可配,达标与恢复各报一次

- 避免误报:只在「用户要服务端运行」时判定掉线;ConnectionState=unknown 按健康处理;没配 agent 的服务端不参与可达性判定

- internal/monitor 改 Source 接口(Routes/Servers/Agents/Drift),frp 适配在 internal/app/monitor_source.go;「连续 N 次」抽成共用 failureTransition,通知一律在锁外调用

- 通知图标分类补齐;通知方式标签改「Webhook / IM 机器人」;新增 6 个设置项;补 serverDown/serverLabel/stateOr 测试

- agent 无改动,AgentVersion 保持 0.12.2
This commit is contained in:
2026-09-25 09:54:48 +08:00
parent 862442e77f
commit c8264bf280
17 changed files with 606 additions and 70 deletions
+18
View File
@@ -11,6 +11,9 @@ const (
EventNginxReloadFailure = "nginx_reload_failure"
EventResourceThreshold = "resource_threshold"
EventTunnelDown = "tunnel_down"
EventFrpsServerDown = "frps_server_down"
EventAgentUnreachable = "agent_unreachable"
EventRouteDrift = "route_drift"
MaskedSecret = "********"
@@ -29,6 +32,9 @@ const (
DefaultMemoryThreshold = 90
DefaultDiskThreshold = 85
DefaultTunnelFailThreshold = 3
DefaultFrpsFailThreshold = 2
DefaultAgentFailThreshold = 3
DefaultDriftCooldownHours = 24
// DefaultResourceAlertCooldown 是资源类告警的静默期:持续高占用时每半小时提醒一次,
// 期间恢复正常会清掉冷却,再次超标可立即再报。
DefaultResourceAlertCooldown = 30 * 60 // seconds
@@ -113,6 +119,12 @@ type Config struct {
MemoryThreshold int `json:"memory_threshold"`
DiskThreshold int `json:"disk_threshold"`
TunnelFailThreshold int `json:"tunnel_fail_threshold"`
OnFrpsDown bool `json:"on_frps_down"`
OnAgentUnreachable bool `json:"on_agent_unreachable"`
OnRouteDrift bool `json:"on_route_drift"`
FrpsFailThreshold int `json:"frps_fail_threshold"`
AgentFailThreshold int `json:"agent_fail_threshold"`
DriftCooldownHours int `json:"drift_cooldown_hours"`
}
type RuntimeConfig struct {
@@ -148,6 +160,12 @@ type SaveInput struct {
MemoryThreshold int
DiskThreshold int
TunnelFailThreshold int
OnFrpsDown bool
OnAgentUnreachable bool
OnRouteDrift bool
FrpsFailThreshold int
AgentFailThreshold int
DriftCooldownHours int
}
type TestInput struct {