目录 需求 实现 原理 前端配置 后端配置 shell实现 python实现 C实现
需求:
采集主机的-/+ buffers/cache free的数据
实现:
采集/proc/meminfo中的数据,通过shell 、 python、 c分别来实现user parameters和Loadable modules监控方式
原理:
首先我们先来了解linux的内存参数
我们在centos 5 和 centos 6上输入 free -k,会返回下面的输出:
在centos 7 上输入 free -k 返回结果:
上面输出的数据可以从 /proc/.meminfo中匹配到对应的数据:
Centos 7 里有一个MemAvailable参数用来替代-/+ buffers/cache:
MemAvailable: 59666176 kB
对比下free输出和/proc/meminfo的信息:
free output
coresponding /proc/meminfo fields
Mem: total
MemTotal
Mem: used
MemTotal - MemFree
Mem: free
MemFree
Mem: shared (can be ignored nowadays. It has no meaning.)
N/A
Mem: buffers
Buffers
Mem: cached
Cached
-/+ buffers/cache: used
MemTotal - (MemFree + Buffers + Cached)
-/+ buffers/cache: free
MemFree + Buffers + Cached
Swap: total
SwapTotal
Swap: used
SwapTotal - SwapFree
Swap: free
SwapFree
Centos7中的信息对比:
free output
coresponding /proc/meminfo fields
Mem: total
MemTotal
Mem: used
MemTotal - MemFree - Buffers - Cached - Slab
Mem: free
MemFree
Mem: shared
Shmem
Mem: buff/cache
Buffers + Cached + Slab
Mem:available
MemAvailable
Swap: total
SwapTotal
Swap: used
SwapTotal - SwapFree
Swap: free
SwapFree
经常会用到的参数:
centos 5 \6 \7
MemTotal: 内存总量
MemFree: 系统没有使用的物理内存
Buffers: buffer cache中的内存
Cached: pagecache中的内存
SwapCached: 存储在主内存中的内存,同时也在swapfile中,节省I/O
centos 7
MemAvailable: 不需要交换就可以启动新应用程序的内存
前端配置
我们在zabbix上新建一个监控项,点击configuration->Templates->你的系统模板->Items->Create Item
后端配置
使用shell和python来实现需要更改配置文件的Include选项,路径指向zabbix_agentd.conf.d
Include=http://www.likecs.com/usr/local/etc/zabbix_agentd.conf.d/*.conf
修改配置后请重启zabbix_agentd服务
shell实现:
我们在/usr/local/etc/zabbix_agentd.conf.d/路径下新建一个memory.conf的文件,写入下面的内容:
UserParameter=buffers.cache.memory,echo $((`grep -E 'MemFree|Buffers|Cached' /proc/meminfo | head -3 | awk '{print $2}' | paste -sd+ | bc` /1024 ))
测试:
# zabbix_agentd -t buffers.cache.memory
buffers.cache.memory [t|62525]
python实现:
在memory.conf里面增加一行配置:
UserParameter=buffers.cache.memory_python,python get_memory.py
脚本: