Files
Logan.Li 59320aa410 perf: 修复 Agent 校验 CPU 热点并实现指标分层聚合与频率下发
CPU 根因:每个 Agent 请求都做一次 bcrypt 校验(实测 72ms),
30 台主机 18 req/s × 72ms ≈ 1.35 核,实测容器 CPU 135%。

- agentauth: 校验结果按 Token 哈希缓存(TTL 5min,轮换即失效),
  last_used_at 写入按 60s 节流。实测 CPU 135% → 1.6%,请求延迟 103ms → 1.6ms
- metricagg: 新增后台逐级降采样聚合 raw→1m/5m→1h→6h/1d,取代前端手动触发
- metrics_aggregate: 补 uniq_metric_agg 唯一索引(原 idx_agg 非唯一导致 upsert 插重复行)
- agent 合并配置接口 GET /agent/config:一次返回任务+探针+端口策略+频率,
  配置轮询 5s→30s;服务端可下发 report_interval,Agent 热更新 ticker 无需重装
- retention: agent_reports 保留期 7d→1d(趋势由聚合表承担)
- redis: 增加 maxmemory 512mb + volatile-lru
- fix(upgrade): 升级脚本改为 fail-fast,修复下载失败仍报 UPGRADE_OK 的静默谎报

// Logan.Li
2026-09-14 08:23:31 +00:00

38 lines
1.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package model
import "time"
// AgentSetting Agent 采集策略。
//
// Hostname 为空串表示全局默认,非空表示对单台主机的覆盖;
// 平台改这里即可下发新的采集/上报频率,Agent 侧热更新 ticker,无需重装。 // Logan.Li
type AgentSetting struct {
ID uint `gorm:"primarykey" json:"id"`
Hostname string `gorm:"size:255;uniqueIndex:uniq_agent_settings_hostname;not null;default:''" json:"hostname"`
ReportInterval int `gorm:"not null;default:10" json:"report_interval"` // 采集上报间隔(秒)
ConfigPollInterval int `gorm:"not null;default:30" json:"config_poll_interval"` // 配置轮询间隔(秒)
UpdatedBy string `gorm:"size:128;not null;default:''" json:"updated_by"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// TableName 固定表名,便于迁移脚本与代码保持一致。 // Logan.Li
func (AgentSetting) TableName() string { return "monitor_agent_settings" }
// AgentConfigDTO 下发给 Agent 的合并配置。
//
// 原先 Agent 每 5 秒要分别请求 tasks/poll、health-probes/config、port-policy
// 三个接口,请求量是上报本身的 6 倍;合并为单次响应后可显著降低平台与网络开销。 // Logan.Li
type AgentConfigDTO struct {
// ConfigVersion 为配置指纹,Agent 可比对后跳过后续相同配置的处理。 // Logan.Li
ConfigVersion string `json:"config_version"`
// ReportInterval 采集上报间隔(秒),Agent 收到后热更新 ticker。 // Logan.Li
ReportInterval int `json:"report_interval"`
// ConfigPollInterval 配置轮询间隔(秒)。 // Logan.Li
ConfigPollInterval int `json:"config_poll_interval"`
Tasks []AgentTask `json:"tasks"`
HealthProbes []HealthProbe `json:"health_probes"`
PortPolicy *AgentPortPolicyDTO `json:"port_policy,omitempty"`
}