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

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页面查看到

f654fdfbdcca289e4ffc843980d82de121a.jpg

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

82a9dff37f12217f02cf5e3043ba0d403b0.jpg

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

aa4ae371380b723547d5ed230933bc87cf2.jpg

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

9dc021915d332eedc81d7918408a69321d8.jpg

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

b029820978e00664fa032b106336c1c14a7.jpg

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

14f8a8584552d46ff25faaa13cdb1b67244.jpg

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

a43320e59b477ad7c1d57a92fe94133aa6f.jpg

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

转载于:https://my.oschina.net/wangyunlong/blog/3066973

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python调用Zabbix API批量查询主机的信息,您需要进行以下步骤: 1. 安装 `zabbix-api` 模块:您可以使用 `pip` 命令安装该模块,例如:`pip install zabbix-api` 2. 导入必要的库和模块: ```python from pyzabbix import ZabbixAPI import json ``` 3. 创建 `ZabbixAPI` 对象并登录: ```python zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() ``` 4. 使用 `host.get` 方法批量查询主机信息: ```python hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) ``` 此时,变量 `hosts` 将包含所有主机的信息。在这个示例中,我们查询了每个主机的 `hostid`、`host`、`name`、`status` 和 `ip` 信息。 5. 处理查询结果: ```python for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 以上代码将遍历每个主机,并打印出其 ID、名称、状态和 IP 地址。 完整代码示例: ```python from pyzabbix import ZabbixAPI import json zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 注意:在实际使用中,您可能需要根据具体情况修改查询的参数和返回结果的处理方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值