Elasticsearch ram.percent误导报警
Contents
最近用Golang重构了所有的Prometheus Exporter监控项,发现elasticsearch的一个内存占用误导问题,监控项的原理是从集群中取得所有机器的使用情况,主要是堆内存不要超过GC的75阈值,命令参考如下:
GET /_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master
然后发现一个有问题的现象,ES显示系统的内存占用率和实际相差很大。
搜索了下有人已经上个月反馈了,详见
大家都知道在Centos7或者其它Systemd系统之后,Linux默认的内存占用计算是(total- available)/total,而ES的计算方式是(total-free)/total,比如我虚拟机的输入如下:
|
|
按照ES的计算方式,我的机器内存使用率接近100%了,但是实际上也就50%左右,最后放弃了这个监控项,只监控集群的堆内存占用了,OS层的内存,负载,CPU啥的还是交给Node Exporter吧,专业的事情交给专业的组件来做,解耦了也清楚些。