monicazhang 发表于 2016-8-1 09:00:18

zabbix 第三方库支持加载扩展模块

来源自 “ttlsa”
zabbix从2.2版本开始增加了使用动态库来扩展zabbix功能。loadable modules实际上和我们前面提到的用户自定义key是一样的功能,不同的是,他用加载lib库的方式,并且zabbix不需要fork一个新的进程,性能更好。目前类似的功能包含user parameters 、 external checks 、 system.run[] ,如果这些脚本逻辑过于复杂、耗时太长会出现比较严重的问题。
Zabbix培训
工作中,我们可以使用c开发一些适用于我们自己生产环境的模块。当然你也可以将它分享给出来,而不需要公布你的源代码,如果你对自己写的代码不自信的话。当agentd、server、proxy启动的时候同时将模块加载进来,退出的时候也会释放。

监控软件zabbix模块APIzabbix代码中有提供api所需的头文件.h,目前模块有两类接口需要实现,一类是必须实现的,一类是可选的。
必须实现的接口两个接口: zbx_module_api_version()、zbx_module_init()






Zabbix实施

用于返回API版本,必须实现,默认返回常量ZBX_MODULE_API_VERSION_ONE(数值1)





模块必要的一些初始化,初始化成功返回ZBX_MODULE_OK,否则返回ZBX_MODULE_FAIL。开源监控软件
可选接口可选接口有zbx_module_item_list()、 zbx_module_item_timeout()、 zbx_module_uninit()





Zabbix安装
返回模块内定义的item列表,包含key,如:agent.ping、agent.version,每个item都使用结构体ZBX_METRIC



超时时间设置,秒为单位

Zabbix配置



释放资源,如:文件描述等
定义item结构体





key:item key名称,例如agent.ping、mysql.version等
flags:CF_HAVEPARAMS 或者0
function:将要调用的函数
test_param:参数列表
示例





在定义function需要接收两个参数AGENT_REQUEST 、AGENT_RESULT ,如下






编译模块编译准备
zabbix提供了一份用于测试的模块源码,在zabbix源码目录下




请一定记住所有的源代码最好放到modules目录下来编译,因为他需要一些接口都在源码中。例如include/module.h、include/sysinc.h、 include/config.h,前面两个.h文件解压就存在,而config.h需要在源码根目录下执行./configure(不能带参数,否则会报错)。
开始编译






加载模块拷贝so文件到zabbix目录下
# cp dummy.so /usr/local/zabbix-2.4.3/lib/

修改配置文件
LoadModulePath=/usr/local/zabbix-2.4.3/lib/ # 可自定义LoadModule=dummy.so # 可以加载多个




测试模块重启zabbix_agentd
# killall zabbix_agentd
# /usr/local/zabbix-2.4.3/sbin/zabbix_agentd
测试key






可以看到定义好的三个key都成功了。学好linux c开发自己的zabbix模块吧。

想做Nagios,iTop各种交流的,可以进入开源监控工具Nagios交流QQ群号 :476809427
页: [1]
查看完整版本: zabbix 第三方库支持加载扩展模块