# 1. 部署脚本 脚本放到ZABBIX 脚本目录 > cd /usr/local/zabbix/share/zabbix > 创建一个新目录放置脚本: > mkdir webtest > cd webtest > vi addtest.py #### 脚本内容: ``` # -*- coding: utf-8 -*- # BY xug.cc from pyzabbix import ZabbixAPI, ZabbixAPIException import sys, time, datetime host_name = "web-test" ##需要添加WEB场景的主机的名字 urlname = sys.argv[1] url = sys.argv[2] delay = sys.argv[3] keys = sys.argv[4] class Zabbix(object): def __init__(self): ZABBIX_SERVER = 'http://zabbix.abc.com' ##ZABBIX服务器地址 zapi = ZabbixAPI(ZABBIX_SERVER) zapi.login('Admin', 'passwd') ##用户名密码 self.zapi = zapi ##创建WEB监控 def create_web(self, urlname, url, delay, keys): ##批量添加web场景,并且添加触发器 setpname = ' '.join(url.split('/')[2:]).replace(' ', '-') ##拆分url,只获取url的域名+端口 用URL的域名作为场景名字 steps = [{"name": setpname, "url": url, "status_codes": "200", "no": 1, "required": keys}] ##步骤,如有需要,可用设置多个步骤. #根据host_name获取主机的 hostid hosts = self.zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"]) host_id = hosts[0]["hostid"] #输出场景日志 # print("主机的 host id 为:" + host_id) # print("需要添加的场景名称为:" + urlname) # print("添加的监控步骤为:" + str(steps)) try: item = self.zapi.httptest.create( name=urlname, ##场景的名字 hostid=host_id, ##所在模板或主机 delay=delay, ##执行间隔 steps=steps ##步骤 ) except ZabbixAPIException as e: print("程序出错了,错误信息如下:") print(e) sys.exit() #构建触发器内容: exp1 = "last(/" + host_name + "/web.test.rspcode[" + urlname + \ "," + setpname + "])<>200 or last(/" + host_name + "/web.test.fail[" + urlname + "])=1" ##问题触发器 exp2 = "last(/" + host_name + "/web.test.fail[" + urlname + "])=0" ##恢复触发器 description = "WEB地址测试 地址:" + url + " 出现错误请及时处理" ##触发器标题 #打印日志: # print("问题触发器为: " + exp1) # print("问题触发器为: " + exp2) # print("触发器标题为: " + description) #创建触发器: self.zapi.trigger.create(description=description, priority=3, expression=exp1, recovery_mode=1, recovery_expression=exp2) ##添加触发器 test = Zabbix() def time_to_stamp(date_time): # 时间转为时间戳 import time a_time = time.strptime(date_time, '%Y-%m-%d %H:%M:%S') return int(time.mktime(a_time)) t1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) t2 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) t = datetime.datetime.strptime(t2, "%Y-%m-%d %H:%M:%S") - datetime.datetime.strptime(t1, "%Y-%m-%d %H:%M:%S") ##print("开始时间:", t1, " 结束时间:", t2, " 执行时长为:", str(t)) test.create_web(urlname,url,delay,keys) ##批量添加监控 ``` ## 使用方式 ### 01、修改其中的变量 `host_name = "web-test"` ##需要添加WEB场景的主机的名字 `ZABBIX_SERVER = 'zabbix.abc.com' `#ZABBIX_SERVER的地址 `zapi.login('Admin', 'passwd')` #ZABBIX的管理员密码,需要管理员账号密码,普通账号不能添加 ### 02、给脚本增加权限 ``` chmod +x addtest.py ``` ### 03、测试添加监控 ``` python3 addtest.py WEB测试场景1 www.baidu.com 5m baidu ``` ### 04、参数说明 ** 4个参数分别为:** > WEB测试场景1 #场景的名字 > www.baidu.com #需要监控的url > 5m #监控的时间间隔 > baidu #需要返回的关键字 # 三、进入ZABBIX 验证是否成功添加 WEB 场景:  场景步骤:  触发器:  测试没问题后, 写SHELL批量调用脚本进行批量添加 `vi add.sh` ``` #!/bin/bash export LANG="en_US.UTF-8" dir=$(cd $(dirname $0) && pwd) tdir="$dir/logs" if [ ! -d $tdir ]; then mkdir -p $tdir fi dt=`date "+%F %T"` [ -f $tdir/code_error.txt ] && true >$tdir/code_error.txt ## i: 项目信息 j: url k:时间间隔 l:需要的关键字 while read i j k l;do curl -s -I "$j" > $tdir/curl.txt code=`grep 'HTTP/1.1' $tdir/curl.txt|awk '{print $2}'` #echo "$i $j $code" if [ $code -eq 200 -o $code -eq 301 -o $code -eq 302 -o $code -eq 405 ];then /usr/bin/python3 $dir/addtest.py $i $j $k $l [ $? -eq 0 ] && echo "$dt $i $j $k $l create ok" >> $tdir/info.log || echo "$dt $i $j $k $l create fail" >>$tdir/info.log else echo "$i $j $k $l $code" >>$tdir/code_error.txt echo "链接访问失败" fi done <$dir/weblist.txt ``` 创建 weblist.txt 文件,里面添加需要监控的地址列表 格式如下: 场景的名字 需要监控的url 监控的时间间隔 需要返回的关键字 > web-test01 http://www.baidu.com.com 3m tt > web-test02 http://www.baidu.com/category.php?catid=1 3m abc > web-test03 http://www.huilongkj.com 3m 关键字1 > web-test04 http://www.huilongkj.com/category.php?catid=1 3m 关键字2 执行 `sh add.sh` add.sh 主要为使用SHELL 脚本逐条读取 weblist.txt 格式化参数后 调用 addtest.py 达到了批量添加的作用 Loading... # 1. 部署脚本 脚本放到ZABBIX 脚本目录 > cd /usr/local/zabbix/share/zabbix > 创建一个新目录放置脚本: > mkdir webtest > cd webtest > vi addtest.py #### 脚本内容: ``` # -*- coding: utf-8 -*- # BY xug.cc from pyzabbix import ZabbixAPI, ZabbixAPIException import sys, time, datetime host_name = "web-test" ##需要添加WEB场景的主机的名字 urlname = sys.argv[1] url = sys.argv[2] delay = sys.argv[3] keys = sys.argv[4] class Zabbix(object): def __init__(self): ZABBIX_SERVER = 'http://zabbix.abc.com' ##ZABBIX服务器地址 zapi = ZabbixAPI(ZABBIX_SERVER) zapi.login('Admin', 'passwd') ##用户名密码 self.zapi = zapi ##创建WEB监控 def create_web(self, urlname, url, delay, keys): ##批量添加web场景,并且添加触发器 setpname = ' '.join(url.split('/')[2:]).replace(' ', '-') ##拆分url,只获取url的域名+端口 用URL的域名作为场景名字 steps = [{"name": setpname, "url": url, "status_codes": "200", "no": 1, "required": keys}] ##步骤,如有需要,可用设置多个步骤. #根据host_name获取主机的 hostid hosts = self.zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"]) host_id = hosts[0]["hostid"] #输出场景日志 # print("主机的 host id 为:" + host_id) # print("需要添加的场景名称为:" + urlname) # print("添加的监控步骤为:" + str(steps)) try: item = self.zapi.httptest.create( name=urlname, ##场景的名字 hostid=host_id, ##所在模板或主机 delay=delay, ##执行间隔 steps=steps ##步骤 ) except ZabbixAPIException as e: print("程序出错了,错误信息如下:") print(e) sys.exit() #构建触发器内容: exp1 = "last(/" + host_name + "/web.test.rspcode[" + urlname + \ "," + setpname + "])<>200 or last(/" + host_name + "/web.test.fail[" + urlname + "])=1" ##问题触发器 exp2 = "last(/" + host_name + "/web.test.fail[" + urlname + "])=0" ##恢复触发器 description = "WEB地址测试 地址:" + url + " 出现错误请及时处理" ##触发器标题 #打印日志: # print("问题触发器为: " + exp1) # print("问题触发器为: " + exp2) # print("触发器标题为: " + description) #创建触发器: self.zapi.trigger.create(description=description, priority=3, expression=exp1, recovery_mode=1, recovery_expression=exp2) ##添加触发器 test = Zabbix() def time_to_stamp(date_time): # 时间转为时间戳 import time a_time = time.strptime(date_time, '%Y-%m-%d %H:%M:%S') return int(time.mktime(a_time)) t1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) t2 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) t = datetime.datetime.strptime(t2, "%Y-%m-%d %H:%M:%S") - datetime.datetime.strptime(t1, "%Y-%m-%d %H:%M:%S") ##print("开始时间:", t1, " 结束时间:", t2, " 执行时长为:", str(t)) test.create_web(urlname,url,delay,keys) ##批量添加监控 ``` ## 使用方式 ### 01、修改其中的变量 `host_name = "web-test"` ##需要添加WEB场景的主机的名字 `ZABBIX_SERVER = 'zabbix.abc.com' `#ZABBIX_SERVER的地址 `zapi.login('Admin', 'passwd')` #ZABBIX的管理员密码,需要管理员账号密码,普通账号不能添加 ### 02、给脚本增加权限 ``` chmod +x addtest.py ``` ### 03、测试添加监控 ``` python3 addtest.py WEB测试场景1 www.baidu.com 5m baidu ``` ### 04、参数说明 ** 4个参数分别为:** > WEB测试场景1 #场景的名字 > www.baidu.com #需要监控的url > 5m #监控的时间间隔 > baidu #需要返回的关键字 # 三、进入ZABBIX 验证是否成功添加 WEB 场景:  场景步骤:  触发器:  测试没问题后, 写SHELL批量调用脚本进行批量添加 `vi add.sh` ``` #!/bin/bash export LANG="en_US.UTF-8" dir=$(cd $(dirname $0) && pwd) tdir="$dir/logs" if [ ! -d $tdir ]; then mkdir -p $tdir fi dt=`date "+%F %T"` [ -f $tdir/code_error.txt ] && true >$tdir/code_error.txt ## i: 项目信息 j: url k:时间间隔 l:需要的关键字 while read i j k l;do curl -s -I "$j" > $tdir/curl.txt code=`grep 'HTTP/1.1' $tdir/curl.txt|awk '{print $2}'` #echo "$i $j $code" if [ $code -eq 200 -o $code -eq 301 -o $code -eq 302 -o $code -eq 405 ];then /usr/bin/python3 $dir/addtest.py $i $j $k $l [ $? -eq 0 ] && echo "$dt $i $j $k $l create ok" >> $tdir/info.log || echo "$dt $i $j $k $l create fail" >>$tdir/info.log else echo "$i $j $k $l $code" >>$tdir/code_error.txt echo "链接访问失败" fi done <$dir/weblist.txt ``` 创建 weblist.txt 文件,里面添加需要监控的地址列表 格式如下: 场景的名字 需要监控的url 监控的时间间隔 需要返回的关键字 > web-test01 http://www.baidu.com.com 3m tt > web-test02 http://www.baidu.com/category.php?catid=1 3m abc > web-test03 http://www.huilongkj.com 3m 关键字1 > web-test04 http://www.huilongkj.com/category.php?catid=1 3m 关键字2 执行 `sh add.sh` add.sh 主要为使用SHELL 脚本逐条读取 weblist.txt 格式化参数后 调用 addtest.py 达到了批量添加的作用 Last modification:July 19, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏