heartbeat 上报的内存使用率,是100 - 100*float64(vm.Available)/float64(vm.Total)
,对标的指标是:100-available_percent
func memUsage(ps *system.SystemPS) float64 {
vm, err := ps.VMStat()
if err != nil {
log.Println("E! failed to get vmstat:", err)
return 0
}
return 100 - 100*float64(vm.Available)/float64(vm.Total)
}
Available 约等于 Free + Buffer + Cache。
而 mem_used_percent 这个指标,是 100 * float64(vm.Used) / float64(vm.Total)
。
我看到源码上用的是Target.MemUtil字段值,应该是内存相关的另一个计算值。target.go
mem_util 内存使用率 该指标用于统计弹性伸缩组的内存使用率,以百分比为单位。 计算公式:伸缩组中的所有云服务器内存使用率之和/伸缩组实例数
mem_usedPercent(Agent)内存使用率 该指标用于统计弹性伸缩组的(Agent)内存使用率,以百分比为单位。 计算公式:伸缩组中的所有云服务器(Agent)内存使用率之和/伸缩组实例数 https://support.huaweicloud.com/usermanual-as/as_06_0105.html
我的数据也有1%左右的偏差,我估计是数据来源不一样。一个是数据抓取,一个是heartbeat(这个更敏感,频率更快)