文档章节

第一次尝试用python实现zabbix主机的批量添加批量删除及模板导入脚本

平头哥-Enjoystudy
 平头哥-Enjoystudy
发布于 06/27 18:53
字数 976
阅读 62
收藏 0

Python3入门练手尝试篇

API参考: zabbix API 4.0版本:https://www.zabbix.com/documentation/4.0/zh/manual/api

#!/bin/python3
import xlrd,os,json,requests,sys
#参考zabbix API 4.0版本:https://www.zabbix.com/documentation/4.0/zh/manual/api

class zabbixtools:
    url = 'http://47.98.222.237/zabbix/api_jsonrpc.php'
    head = {'Content-Type':'application/jsonrequest'}
#获取认证id
    def user_login(self):
        data = {
              "jsonrpc": "2.0",
              "method": "user.login",
              "params": {
                        "user": "Admin",
                        "password": "zabbix"
                        },
               "id": 1,
               "auth": None
                  }
        try:
            request_auth = requests.post(self.url,headers=self.head,data=json.dumps(data))
            request_auth_json = request_auth.json()
            auth = request_auth_json['result']
        except Exception as e:
            return '0'
        return auth
#获取监控主机列表
    def get_hosts(self):
        data={
            "jsonrpc": "2.0",
            "method": "host.get",
            "params": {
                "output": ["hostid","host"],"selectInterfaces": ["interfaceid","ip"]},
            "id": 2,
            "auth": self.user_login()
            }
        
        request_host= requests.post(self.url,headers=self.head,data=json.dumps(data))
        request_host_json = request_host.json()
        return request_host_json

#创建主机        
    def create_hosts(self):
        file=sys.argv[2]
        with xlrd.open_workbook(file) as fb:
            sheet=fb.sheet_by_name('create')
            print('表名称:%s,表行数:%s,表列数:%s'% (sheet.name,sheet.nrows,sheet.ncols))
            for i in range(1,sheet.nrows):
                hostname=sheet.row_values(i)[0]
                hostip=sheet.row_values(i)[1]
                groupid=int(sheet.row_values(i)[2])
                templateid=int(sheet.row_values(i)[3])
                ####################################
                data={
                 "jsonrpc": "2.0",
                 "method": "host.create","params": {"host": hostname,"interfaces": [{"type": 1,"main": 1,"useip": 1,"ip": hostip,"dns":"","port":"10050"}],
                 "groups": [{"groupid":groupid }],
                 "templates": [{"templateid": templateid }],
                 "inventory_mode": 0,
                 "inventory": {"macaddress_a": "01234","macaddress_b": "56768"}},
                 "auth": self.user_login(),
                 "id": 1
                 }        
                request_create=requests.post(self.url,headers=self.head,data=json.dumps(data))
                request_create_json=request_create.json()
#删除主机
    def delete_hosts(self):
        file=sys.argv[2]
        with xlrd.open_workbook(file) as fb:
            sheet=fb.sheet_by_name('delete')
            print('表名称:%s,表行数:%s,表列数:%s'% (sheet.name,sheet.nrows,sheet.ncols))
            delhostname=[]
            for i in range(1,sheet.nrows):
                hostname=sheet.row_values(i)[0]
                delhostname.append(hostname)
            print('获取删除主机名称列表:%s'%(delhostname))
            print('----------------------------------------')
            delhostnameid=[]
            for i in delhostname:
                 data={
                       "jsonrpc": "2.0",
                       "method": "host.get",
                       "params": {"output": ["hostid"],"filter": {"host":i}},
                       "auth":self.user_login(),
                       "id": 1
                      }
                 try:
                     request_delete=requests.post(self.url,headers=self.head,data=json.dumps(data))
                     request_delete_json=request_delete.json()
                     request_delete_hostid=str(request_delete_json['result'][0]['hostid'])
                     delhostnameid.append(request_delete_hostid)
                 except Exception as e:
                     print('无法获取主机%s:ID信息,请在web页面确认该主机是否存在.'%(i))
                     continue                  
                 request_delete_hostid=str(request_delete_json['result'][0]['hostid'])
                 delhostnameid.append(request_delete_hostid)

            print('获取删除主机id列表:%s'%(delhostnameid))
            if len(delhostnameid)== 0:
                print('没有获取任何相关主机hostsid信息,请确检查excel文件信息的准确性.')
                return '0'
          
            print('-------------------------------------')
            del_id={
                 "jsonrpc": "2.0",
                 "method": "host.delete",
                 "params": delhostnameid,
                 "auth": self.user_login(),
                 "id": 1
                  }
            request_del=requests.post(self.url,headers=self.head,data=json.dumps(del_id))
            request_del_json=request_del.json()
            print('删除主机id列表:%s'%(request_del_json))
#导入模板
    def zbx_export(self):
        fb=open(sys.argv[2],encoding='utf8').read()
        data_export={
             "jsonrpc": "2.0",
             "method": "configuration.import",
             "params": { 
                     "format": "xml",
                     "rules": {
                             "applications":{"createMissing":True,"deleteMissing":True},
                             "valueMaps":{"createMissing":True,"updateExisting":True},
                             "groups":{"createMissing":True},
                             "graphs":{"createMissing":True},
                             "screens":{"createMissing":True},
                             "templateScreens":{"createMissing":True},
                             "triggers":{"createMissing":True,"updateExisting":True},
                             "templates":{"createMissing":True},
                             "items":{"createMissing":True,
                             "updateExisting":True,"deleteMissing":True}
                                },
             "source":fb},
             "auth": self.user_login(),
             "id": 1
             }
        request_export=requests.post(self.url,headers=self.head,data=json.dumps(data_export))
        request_export_json=request_export.json()
        return request_export_json

def main():
    if len(sys.argv) == 3:
        if (sys.argv[1] == 'delete' or sys.argv[1] == 'create' or sys.argv[1] == 'export') and  os.path.isfile(sys.argv[2]):
            auths = zabbixtools()
            if auths == 0:
                print('获取认证令牌失败..请检查提交数据的准确性')
                return '0'
            #获取认证令牌    
            print('-------------')
            print('获取用户认证令牌auth:%s'% auths.user_login())
            if sys.argv[1] == 'create': 
                #添加监控主机
                print('-------------')
                print('添加主机log:%s'% auths.create_hosts())
            elif sys.argv[1] == 'delete': 
                #删除主机
                print('-------------')
                print('删除主机log:%s'% auths.delete_hosts())
            if sys.argv[1] == 'export': 
                #导入模板
                print('-------------')
                print('导入模板log:%s'% auths.zbx_export())
            else:
                pass
            #获取线上监控主机列表
            print('--------------')
            hostlist=auths.get_hosts()['result']
            for i in hostlist:
                i['ip']=i['interfaces'][0]['ip']
                del i['interfaces']
                print('目前监控主机列表:%s'%(i))
        else:
            print('执行失败.Usage: /bin/python3 %s delete/create/export target_file'%(sys.argv[0]))
    else:        
        print('执行失败.Usage: /bin/python3 %s delete/create/export target_file'%(sys.argv[0]))
        return '0'
    
if __name__ == '__main__':
    main()

1.用法:批量添加主机:先准备好excel表格,内容如下。注:模板id和主机组id可以通过web页面查看到

执行脚本添加主机:python3 zabbix_delete_create_export.py create server.xlsx

已经添加成功,查看web页面效果如下:

2.批量删除主机操作:创建delete表 写入需要删除主机的列表。(故意写了几条错误的数据test-no01-03)

执行脚本:python3 zabbix_delete_create_export.py delete server.xlsx

查看web界面,已经删除成功

3.导入模板,先通过web页面将模板导出为xml文件。删除之前已经创建好的测试模板 执行脚本:

查看web页面,模板添加成功.

© 著作权归作者所有

平头哥-Enjoystudy
粉丝 2
博文 107
码字总数 81388
作品 0
朝阳
运维
私信 提问
Zabbix批量添加web监控模板

转载自:http://blog.csdn.net/qq942477618/article/details/53928951 本文参考自 清风拂面 《python实现zabbix批量监控WEB网站和批量监控主机端口》 修改,使得以后添加web时更加方便,zab...

kuSorZ
2017/10/23
0
0
zabbix API 的介绍与应用

利用zabbix的API功能可以方便地通过其他程序调用zabbix,从而实现灵活的扩展Zabbix方式。 一、zabbixAPI简介 Zabbix的API具有重要的功能,为第三方调用zabbix、批量操作提供可编程接口,从而轻...

xingliguang
2016/10/27
0
0
第二个运维平台项目

把之前的运维平台重新整理和改写,主要实现的思路是从服务器采购开始,采购之后,从网络部申请得到IP地址;通过厂商那里得到的MAC地址直接定制装机,装机时候直接指定IP地址;后期硬件信息采...

小罗ge11
2016/09/01
0
0
利用zabbix API进行管理

zabbix 现在之所以那么流行,个人感觉跟zabbix 强大的API有一个很大的关系,利用API可以帮我们完成很多事情: 1、获取相关组,主机信息。 2、比如有人喜欢获取历史数据重新出图。 3、添加删除...

小罗ge11
2018/06/29
0
0
Zabbix分布式监控之Discovery自动发现配置

当我们能够熟练构建Zabbix监控平台之后,我们会发现,对zabbix的认识只是刚开始,今天带大家来学习Zabbix比较牛的功能,自动发现功能。什么是自动发现呢,简单来说就是,可以自动批量去发现局...

wgkgood
2017/04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android Camera模块解析之拍照

最近学习Android的camera模块,本文先介绍一下camera2的api,然后给出android camera拍照的例子,讲解一下camera 拍照的原因知识,与大家共勉。 camera2 介绍 android camera拍照功能介绍 一...

天王盖地虎626
4分钟前
4
0
Excel 曝Power Query安全漏洞

近日,Mimecast 威胁中心的安全研究人员,发现了微软 Excel 电子表格应用程序的一个新漏洞,获致 1.2 亿用户易受网络攻击。其指出,该安全漏洞意味着攻击者可以利用 Excel 的 Power Query 查...

linuxCool
11分钟前
1
0
SpringBoot | 第三十八章:基于RabbitMQ实现消息延迟队列方案

前言 >前段时间在编写通用的消息通知服务时,由于需要实现类似通知失败时,需要延后几分钟再次进行发送,进行多次尝试后,进入定时发送机制。此机制,在原先对接银联支付时,银联的异步通知也...

oKong
11分钟前
3
0
Excel 曝Power Query安全漏洞

近日,Mimecast 威胁中心的安全研究人员,发现了微软 Excel 电子表格应用程序的一个新漏洞,获致 1.2 亿用户易受网络攻击。其指出,该安全漏洞意味着攻击者可以利用 Excel 的 Power Query 查...

linux-tao
28分钟前
1
0
Java - NIO框架

Java NIO提供了与标准IO不同的IO工作方式。 Channels and Buffers(通道和缓冲区) 标准IO基于字节流和字符流,NIO基于通道(Channel)和缓冲区(Buffer)。数据从channel读取到buffer,或从Buffe...

丰田破产标志
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部