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

  • A+
所属分类:zabbix

zabbix从2.2版本开始增加了使用动态库来扩展zabbix功能。loadable modules实际上和我们前面提到的用户自定义key是一样的功能,不同的是,他用加载lib库的方式,并且zabbix不需要fork一个新的进程,性能更好。目前类似的功能包含user parameters 、 external checks 、 system.run[] ,如果这些脚本逻辑过于复杂、耗时太长会出现比较严重的问题。

工作中,我们可以使用c开发一些适用于我们自己生产环境的模块。当然你也可以将它分享给出来,而不需要公布你的源代码,如果你对自己写的代码不自信的话。当agentd、server、proxy启动的时候同时将模块加载进来,退出的时候也会释放。

zabbix模块API

zabbix代码中有提供api所需的头文件.h,目前模块有两类接口需要实现,一类是必须实现的,一类是可选的。

必须实现的接口

两个接口: zbx_module_api_version()、zbx_module_init()

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

模块必要的一些初始化,初始化成功返回ZBX_MODULE_OK,否则返回ZBX_MODULE_FAIL。

可选接口

可选接口有zbx_module_item_list()、 zbx_module_item_timeout()、 zbx_module_uninit()

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

超时时间设置,秒为单位

释放资源,如:文件描述等

定义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目录下

修改配置文件

测试模块

重启zabbix_agentd

# killall zabbix_agentd

# /usr/local/zabbix-2.4.3/sbin/zabbix_agentd

测试key

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

 

 

 

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  3   博主  0

    • 我诶平 0

      49685bdd0901bea514d4d6f3bb842d1a沙发大家爱了就哦了

      • 李丹妮 0

        49685bdd0901bea514d4d6f3bb842d1a帮帮我看一下这是怎么回事呢

        • Aceslup 4

          咋这么6呢