ZABBIX6lTS批量添加WEB场景

本脚本适用于ZABBIX6 LTS 

一、环境配置

1、安装依赖包:


yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

2、安装python3

centos7 默认python 为 python2

本代码适用于python3,首先先进行python3的安装

1、下载需要的版本

   wget https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz

2、编译 安装

tar -xvzf Python-3.10.11.tgz

cd Python-3.10.11

./configure --prefix=/usr/local/python3

make && make install

3、创建软链接


ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

4、测试是否安装成功

        python3 -V

5、pip安装第三方库pyzabbix

pip3 install pyzabbix

二、部署脚本

脚本放到ZABBIX 脚本目录

cd /usr/local/zabbix/share/zabbix

创建一个新目录放置脚本:

mkdir webtest

cd webtest

vi addtest.py

脚本内容:

# -*- coding: utf-8 -*-
# BY majingjing@huilongkj.com  20230523

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值