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
This commit is contained in:
1 parent
93abf81e40
commit
59320aa410
23 files changed
+902
-29
No files matched your search
@@ -0,0 +1,37 @@
|
||||
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"`
|
||||
}
|
||||
Reference in new issue
Block a user