基础设施-机器机器列表-对象列表里的 内存 cpu使用率与Prometheus里查询数据不一致

Viewed 121

image.png
image.png

我的数据也有1%左右的偏差,我估计是数据来源不一样。一个是数据抓取,一个是heartbeat(这个更敏感,频率更快)

4 Answers

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)

prometheus是查的哪个指标,
n9e是显示百分比的。

我看到源码上用的是Target.MemUtil字段值,应该是内存相关的另一个计算值。target.go

mem_util 内存使用率 该指标用于统计弹性伸缩组的内存使用率,以百分比为单位。 计算公式:伸缩组中的所有云服务器内存使用率之和/伸缩组实例数

mem_usedPercent(Agent)内存使用率 该指标用于统计弹性伸缩组的(Agent)内存使用率,以百分比为单位。 计算公式:伸缩组中的所有云服务器(Agent)内存使用率之和/伸缩组实例数 https://support.huaweicloud.com/usermanual-as/as_06_0105.html