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
达到了批量添加的作用