zabbix user parameters和Loadable modules的使用方法介绍
目录
需求
实现
原理
前端配置
后端配置
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 - |
|
Mem: free |
MemFree |
|
Mem: shared (can be |
N/A |
|
Mem: buffers |
Buffers |
|
Mem: cached |
Cached |
|
-/+ |
MemTotal - |
|
-/+ |
MemFree + |
|
Swap: total |
SwapTotal |
|
Swap: used |
SwapTotal - |
|
Swap: free |
SwapFree |
Centos7中的信息对比:
|
free output |
coresponding /proc/meminfo fields |
|
Mem: total |
MemTotal |
|
Mem: used |
MemTotal - |
|
Mem: free |
MemFree |
|
Mem: shared |
Shmem |
|
Mem: buff/cache |
Buffers + Cached |
|
Mem:available |
MemAvailable |
|
Swap: total |
SwapTotal |
|
Swap: used |
SwapTotal - |
|
Swap: free |
SwapFree |
经常会用到的参数:
centos 5 \6 \7
MemTotal: 内存总量
MemFree: 系统没有使用的物理内存
Buffers: buffer cache中的内存
Cached: pagecache中的内存
SwapCached: 存储在主内存中的内存,同时也在swapfile中,节省I/O
centos 7
MemAvailable: 不需要交换就可以启动新应用程序的内存 (等同于 -/+ buffers/cache: free)
前端配置
我们在zabbix上新建一个监控项,点击configuration->Templates->你的系统模板->Items->Create
Item

后端配置
使用shell和python来实现需要更改配置文件的Include选项,路径指向zabbix_agentd.conf.d
Include=/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
脚本:
#!/usr/bin/python
import re def get_memory():
i = 0
key_num = re.compile('\d+')
with open('/proc/meminfo', 'r') as f:
for line in f:
if line.startswith('MemFree') or line.startswith('Buffers') or line.startswith('Cached'):
num = key_num.findall(line)
i += int(num[0])
return i if __name__ == '__main__':
print(get_memory())
给权限:
chmod 700 get_memory.py
chown zabbix: get_memory.py
测试:
# zabbix_agentd
-t buffers.cache.memory_python
buffers.cache.memory_python [t|62534]
C实现:
/*
模块应该需要将内部函数定义为静态的,并使用与Zabbix内部不同的命名模式
避免和(zbx_*)和可加载模块API函数(zbx_module_*)冲突
/*
static int BUFFER_FREE(AGENT_REQUEST *request, AGENT_RESULT *result);
/*
*key代表item里的key
*FLAG为CF_HAVEPARAMS或0(取决于项是否接受参数),
*FUNCTION是实现功能的具体函数
*test_param 是zabbix_agentd 使用-p启动时候用到的参数列表
/*
static ZBX_METRIC keys[] =
/* KEY FLAG FUNCTION TEST PARAMETERS */
{
{"buffers.cache.memory", , BUFFER_FREE, NULL},
{NULL}
};
/*
*获取buffer_free的数值:MemFree+Buffers+Cached
* */
static int BUFFER_FREE(AGENT_REQUEST *request, AGENT_RESULT *result)
{
int ret = SYSINFO_RET_FAIL;
char line[MAX_STRING_LEN];
zbx_uint64_t buffer_free = ;
zbx_uint64_t value = ;
FILE *f;
ZBX_UNUSED(request);
if (NULL == (f = fopen("/proc/meminfo", "r")))
{
SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot open /proc/meminfo: %s", zbx_strerror(errno)));
return SYSINFO_RET_FAIL;
}
while (NULL != fgets(line, sizeof(line), f))
{
if (( == strncmp(line, "MemFree:", )) || ( == strncmp(line, "Buffers:", )) || ( == strncmp(line, "Cached:", ))) //匹配三个指定的line
{
if ( == sscanf(line, "%*s " ZBX_FS_UI64, &value)) //跳过第一个字符串,读取第二个字符串
{
buffer_free += value;//汇总求和
}
}
}
SET_UI64_RESULT(result, buffer_free/);//K转换为M
ret = SYSINFO_RET_OK;
zbx_fclose(f);
if (SYSINFO_RET_FAIL == ret)
SET_MSG_RESULT(result, zbx_strdup(NULL, "Cannot find a line with \"haha\" in /proc/meminfo."));
return ret;
}
/*
*如果成功获得项值,函数应该返回SYSINFO_RET_OK。否则,应该返回SYSINFO_RET_FAIL
*/
编译:
gcc -fPIC -shared -o buffer_free.so buffer_free .c -I ../../../include/
这里的include在zabbix的源码编译安装文件里可以找到
给权限
chmod 700 buffer_free.so
chown zabbix: buffer_free.so
更改zabbix_agentd.conf的配置,增加:
LoadModule= buffer_free.so
重启zabbix_agentd服务,上面的shell和python在实际的监控应用中也是需要重启服务的,使用zabbix_agentd -t 只是测试,不需要重启服务
service Zabbix_agentd restart
测试:
# zabbix_agentd -t buffers.cache.memory
buffers.cache.memory [u|1250]
zabbix user parameters和Loadable modules的使用方法介绍的更多相关文章
- zabbix 自带监控项报性能问题解决方法
类似报警信息为:Zabbix discoverer processes more than 75% busy 解决方法:修改zabbix_server配置 原因:每个discovery任务在一定时间内 ...
- zabbix API基本使用方法介绍
前言: 以下内容根据zabbix 3.2官方文档总结:https://www.zabbix.com/documentation/3.2/manual/api 此文档只是简单的介绍API的基本使用,关于 ...
- zabbix 监控 图形化界面文字乱码解决方法
zabbix安装后之后,很多小伙伴第一时间都是去设置中文界面,发现页面.菜单等可以正常显示中文,但是 唯有图形显示方块,无法正常显示汉字,按照百度教程,上传windows字体,修改配置文件的2处字体配 ...
- zabbix中Templates的jmx相关key调试方法
1.下载 cmdline jmxclient 如果你有一个完美的模版,你可能可以忽略此步.但是大多数情况下你没有.况且 zabbix 默认的 tomcat 模版也不能很好的工作.这时候有一个工具来调试 ...
- Zabbix 4.4管理界面中文乱码解决方法
1.zabbix 4.4 安装配置过程可参考官方文档: 文档链接地址:https://www.zabbix.com/download?zabbix=4.4&os_distribution=ce ...
- Laravel 获取 Route Parameters (路由参数) 的 5 种方法
Laravel 获取路由参数的方式有很多,并且有个小坑,汇总如下. 假设我们设置了一个路由参数: 现在我们访问 http://test.dev/1/2 在 TestController ...
- zabbix告警时间和恢复时间相同的解决方法
出现原因:在动作,恢复操作中,恢复时间成了{EVENT.DATE} {EVENT.TIME},所以和告警时间相同. 解决方法:将{EVENT.DATE}{EVENT.TIME}改成{EVENT.DAT ...
- 关于 cannot create Parameters: [] 报错问题的解决方法
其实在Sort类中添加无参构造就可以解决 我自己写的是Sort类,其它情况得视你们自己写的类决定 至于为什么也不是很清楚
- grub paramiter & menu.list
在Linux中,给kernel传递参数以控制其行为总共有三种方法: 1.build kernel之时的各个configuration选项. 2.当kernel启动之时,可以参数在kernel被GRUB ...
随机推荐
- 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法
前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...
- JavaScript高级程序设计学习笔记2
垃圾收集原理: 找出不再使用的变量,然后释放其内存. js中最常用的垃圾收集方法是标记清除,当变量进入环境时,就将变量标记为“进入环境”,当变量离开环境时,将其标记为“离开环境”,最后由垃圾收集器完成 ...
- 【MOOC EXP】Linux内核分析实验五报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...
- CSS——【元素内边距padding、元素外边距margin、元素边框border-width、元素大小width/height】与【元素显示大小】的关系
一.基本知识 padding:元素内边距,指的是元素内边框到元素中内容的距离. 用法: padding:长度|百分比 padding-top:长度|百分比 padding-bottom:长度|百分比 ...
- Apache修改了配置文件中的路径后,登录该地址网页出现问题 (其中介绍了selinux的域和安全上下文)
默认的网站数据存放在: /var/www/html 首页名称: index.html Apache服务程序的主配置文件: /etc/httpd/conf/httpd.conf (若是将 119 行 ...
- 暑假学习笔记(一)——初识Neo4j和APICloud入门
暑假学习笔记(一)--初识Neo4j和APICloud入门 20180719笔记 1.Neo4j 接了学姐的系统测试报告任务,感觉工作很繁重,但是自己却每天挥霍时光.9月份就要提交系统测试报告了,但是 ...
- Mybatis 从入门到精通一:mybatis的入门
1.Mybatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation(阿帕奇软件基金会) 迁移到了google ...
- 如何让搜索引擎抓取AJAX内容?
越来越多的网站,开始采用"单页面结构"(Single-page application). 整个网站只有一张网页,采用Ajax技术,根据用户的输入,加载不同的内容. 这种做法的好处 ...
- shell之三大文本处理工具grep、sed及awk
grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...
- NOIP2017列队(phalanx)解题报告
列队作为NOIP2017最后一道题,其实并不难,只是相对于其它题目,有点小小的工业 首先,这道题我用splay维护的,如果你不会splay,又想学一下splay,可以来这里学一学,接下来步入正题 首先 ...