为了满足用户的其它监控需求,zabbix允许用户创建自定义监控任务,假设现在有这么一个监控任务,要求监控数据库中某一张表当天更新的数据条数。你会发现zabbix中并不存在这样的Item,为了满足用户的其它需求,zabbix允许用户创建自定义的监控项。
利用zabbix创建自定义监控项需要执行以下操作: 1.在配置文件zabbix_agentd.conf中设置允许添加自定义监控项 2.在zabbix_server.conf中设置监控脚本文件存放路径 3.在指定的路径下创建监控脚本 4.在userparameter_script.conf文件中添加Item key 5.在web端创建监控项
第一步:找到你的zabbix_agentd.conf,设置允许添加自定义脚本将#Include=/usr/local/etc/zabbix_agentd.conf.d/前的#号去掉即可
第二步:设置创建监控脚本的存放路径,打开zabbix_server.conf配置文件,找到AlertScriptsPath,设置路径为
代码语言:javascript复制AlertScriptsPath=/usr/local/share/zabbix/alertscripts
第三步:创建监控脚本,会到刚开始的问题,我们要监控的是数据库中一张表的数据更新条数。为了模拟这个环境,我在sqlserver下建了一个pythontest数据库,并在其中建了一张表secumain,建表语句如下:
代码语言:javascript复制CREATE TABLE secumain(
[id] [int] NULL,
[content] [varchar](32) NULL,
[updatetime] [datetime] NULL
)
我的监控脚本是用python写的,代码如下:
代码语言:javascript复制#!/usr/bin/python
#coding=utf-8
import pymssql
server = "198.192.1.1"
user = "sa"
password = "6527293"
conn = pymssql.connect(server, user, password, "pythontest")
cursor = conn.cursor()
cursor.execute("select COUNT(*) from secumain where updatetime>(select cast(convert(varchar(10),getdate()-1,120) ' 00:00:00' as datetime)) and updatetime<getdate()")
result=cursor.fetchall()[0][0]
result=float(result)
print (result)
cursor.close()
conn.close()
注意:为了确保脚本无误,你最好执行一下写好的脚本
第四步:在userparameter_script.conf文件中添加Item key,Item key的格式为
代码语言:javascript复制UserParameter=<key>,<command>
前面是key值,也就是在web端添加监控脚本时的key值,command就是该key值对应的执行脚本,也就是脚本执行路径。配置如下:
代码语言:javascript复制UserParameter=script.getUpdateCountFromSecumain,/usr/local/share/zabbix/alertscripts/getUpdateCountFromSecumain.py
每添加一个新的执行脚本,只需要按照上面的方式,在userparameter_script.conf文件中添加即可。添加完成之后切记需要重启zabbix_server和zabbix_agentd服务,可以通过zabbix_get检测监控脚本是否添加成功,检测指令如下:
代码语言:javascript复制zabbix_get -s 127.0.0.1 -k script.getUpdateCountFromSecumain
(检测格式zabbix_get -s host -k key)
由于我没有在该表中添加任何数据,的到的结果是0
第五步:在web端创建监控项,和之前创建监控项的方式一样,这是这里需要手动输入key值
代码语言:javascript复制script.getUpdateCountFromSecumain
我现在在表中添加五条数据
点击检测中-》最新数据找到get count from secumain这个监控项,点击右侧的图形,可以看到检测到的数据是5条
看到这样的结果说明成功创建了自定义监控项