node_exporter 采集数据有异常导致告警

tidb版本:5.3.1
os:redhat 7.9
现象,promethues 有下列告警:NODE_memory_used_more_than_80%
某一个os 服务器内存使用率超过80%

但是登录服务器一看,free -h 发现内存使用率其实没有超过80%
回到这个告警监控指标的表达式:
(((node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes)/(node_memory_MemTotal_bytes)*100))
我的理解这个告警的原理应该是
总共的os内存-已经使用的内存-buffer/cache的内存(free -h 中输出的buff/cache列的值)
但是我通过
curl http://127.0.0.1:9100/metrics|grep “node_memory_Cached_bytes”
发现node_memory_Cached_bytes 的值比实际的buffer/cache值(free -h) 显示的小很多,所以才导致告警
并且我查看了另外一台os,发现node_memory_Cached_bytes和buffer/cache值(free -h) 显示的基本吻合,就这台机器有问题
想请问下大家,有没有见过类似的问题?
我重启了下node_exporter进程 发现也是没有用的 ,还是在异常告警?

1 个赞

是分配的内存占了80%吧,不是服务器的内存

分配的内存应该就是已经正在的使用的内存,包括buffer/cache

补充下:
1.free -h 里面显示的buffer/cache 显示有57G
2.node_exporter显示的node_memory_Cached_bytes 只有8G
3.怀疑是node_exporter采集错了或者是buffer 占用过大,cache占用过小,这个下星期登录下服务器看下/proc/meminfo 里面的具体Buffer和cache的值 各占多少

如果有zabbix 搞个agent对比看下

暂时没发现

是不是 total - Available 的差值 = 使用内存,有些agent 是这样算的

过来围观学习下

不是系统内存吧

学习一下,我去node_exporter上看,
meminfo_numa Exposes memory statistics from /sys/devices/system/node/node[0-9]*/meminfo, /sys/devices/system/node/node[0-9]*/numastat.
prometheus/node_exporter: Exporter for machine metrics (github.com)

没发现这种情况

注意是不是有其它程序占用内存

没有遇到,关注一下

那是numa node的信息
总体的内存使用率在 /proc/meminfo中获取

目前来说,应该是找到初步的原因了
node_exporter采集的数据是从/proc/meminfo 里面获取的,发现proc/meminfo 里面的SReclaimable 占用很大(大概50G),而Cached 占用很少,所以怀疑是有可能发生了操作系统内存泄露