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
如果觉得我的文章对你有用,请随意赞赏