python zabbix批量添加主机 脚本

简介: 转载:https://www.cnblogs.com/momoshouhu/p/8053907.html1.安装xlrd读取Excel文件1.1. 下载setuptools-38.

转载:https://www.cnblogs.com/momoshouhu/p/8053907.html
1.安装xlrd读取Excel文件

1.1. 下载setuptools-38.2.4.zip,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/packages/69/56/f0f52281b5175e3d9ca8623dadbc3b684e66350ea9e0006736194b265e99/setuptools-38.2.4.zip#md5=e8e05d4f8162c9341e1089c80f742f64

[root@localhost temp]# ll #上传文件setuptools-38.2.4.zip
total 724
-rw-r--r-- 1 root root 736683 Dec 17 22:37 setuptools-38.2.4.zip

[root@localhost temp]# unzip setuptools-38.2.4.zip #解压setuptools-38.2.4.zip

[root@localhost temp]# cd setuptools-38.2.4 #进入setuptools-38.2.4目录

[root@localhost temp]# cd setuptools-38.2.4 #安装

1.2下载pip-9.0.1.tar.gz,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9

[root@localhost temp]# ll
total 1896
-rw-r--r-- 1 root root 1197370 Dec 17 22:53 pip-9.0.1.tar.gz #上传文件pip-9.0.1.tar.gz
drwxr-xr-x 9 root root 4096 Dec 17 22:55 setuptools-38.2.4
-rw-r--r-- 1 root root 736683 Dec 17 22:37 setuptools-38.2.4.zip

[root@localhost temp]# tar -xzvf pip-9.0.1.tar.gz #解压pip-9.0.1.tar.gz

[root@localhost pip-9.0.1]# python setup.py build #编译
[root@localhost pip-9.0.1]# python setup.py install #安装

[root@localhost pip-9.0.1]# pip install xlrd #安装xlrd

3.编辑Excel模板

3.1主机名、显示名、IP、主机组、模板

img_e5790eebd50eebcdfac4a9f9d22c625d.png
image

3.2将Execle表zabbix_host_add.xlsx上传至zabbix服务器

[root@localhost temp]# ll
total 1964
-rw-r--r-- 1 root root 46079 Dec 17 23:28 zabbix_host_add.xlsx

4.编写Python脚本,参考http://www.361way.com/zabbix-api-2/3681.html

#!/usr/bin/python

#coding:utf-8

import json

import urllib2

from urllib2 ``import URLError

import sys,argparse

import xlrd

defaultencoding ``= 'utf-8'

if sys.getdefaultencoding() !``= defaultencoding:

reload``(sys)

sys.setdefaultencoding(defaultencoding)

class zabbix_api:

def __init__(``self``):

self``.url ``= 'http://zabbix服务器IP地址/zabbix/api_jsonrpc.php' #修改URL

self``.header ``= {``"Content-Type"``:``"application/json"``}

def user_login(``self``):

data ``= json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"user.login"``,

"params"``: {

"user"``: ``"Admin"``, ``#web页面登录用户名

"password"``: ``"zabbix" #web页面登录密码

},

"id"``: ``0

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "\033[041m 用户认证失败,请检查 !\033[0m"``, e.code

else``:

response ``= json.loads(result.read())

result.close()

#print response['result']

self``.authID ``= response[``'result'``]

return self``.authID

def host_get(``self``,hostName``=``''):

data``=``json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"host.get"``,

"params"``: {

"output"``: ``"extend"``,

"filter"``:{``"host"``:hostName}

},

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

if hasattr``(e, ``'reason'``):

print 'We failed to reach a server.'

print 'Reason: '``, e.reason

elif hasattr``(e, ``'code'``):

print 'The server could not fulfill the request.'

print 'Error code: '``, e.code

else``:

response ``= json.loads(result.read())

#print response

result.close()

print "主机数量: \033[31m%s\033[0m"``%``(``len``(response[``'result'``]))

for host ``in response[``'result'``]:

status``=``{``"0"``:``"OK"``,``"1"``:``"Disabled"``}

available``=``{``"0"``:``"Unknown"``,``"1"``:``"available"``,``"2"``:``"Unavailable"``}

#print host

if len``(hostName)``=``=``0``:

print "HostID : %s\t HostName : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m"``%``(host[``'hostid'``],host[``'name'``],status[host[``'status'``]],available[host[``'available'``]])

else``:

print "HostID : %s\t HostName : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m"``%``(host[``'hostid'``],host[``'name'``],status[host[``'status'``]],available[host[``'available'``]])

return host[``'hostid'``]

def hostgroup_get(``self``, hostgroupName``=``''):

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``:``"hostgroup.get"``,

"params"``:{

"output"``: ``"extend"``,

"filter"``: {

"name"``: hostgroupName

}

},

"auth"``:``self``.user_login(),

"id"``:``1``,

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

#print result.read()

response ``= json.loads(result.read())

result.close()

#print response()

for group ``in response[``'result'``]:

if len``(hostgroupName)``=``=``0``:

print "hostgroup: \033[31m%s\033[0m \tgroupid : %s" %``(group[``'name'``],group[``'groupid'``])

else``:

print "hostgroup: \033[31m%s\033[0m\tgroupid : %s" %``(group[``'name'``],group[``'groupid'``])

self``.hostgroupID ``= group[``'groupid'``]

return group[``'groupid'``]

def template_get(``self``,templateName``=``''):

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``: ``"template.get"``,

"params"``: {

"output"``: ``"extend"``,

"filter"``: {

"name"``:templateName

}

},

"auth"``:``self``.user_login(),

"id"``:``1``,

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

#print response

for template ``in response[``'result'``]:

if len``(templateName)``=``=``0``:

print "template : \033[31m%s\033[0m\t id : %s" % (template[``'name'``], template[``'templateid'``])

else``:

self``.templateID ``= response[``'result'``][``0``][``'templateid'``]

print "Template Name : \033[31m%s\033[0m "``%``templateName

return response[``'result'``][``0``][``'templateid'``]

def hostgroup_create(``self``,hostgroupName):

if self``.hostgroup_get(hostgroupName):

print "hostgroup \033[42m%s\033[0m is exist !"``%``hostgroupName

sys.exit(``1``)

data ``= json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"hostgroup.create"``,

"params"``: {

"name"``: hostgroupName

},

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request``=``urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print "\033[042m 添加主机组:%s\033[0m hostgroupID : %s"``%``(hostgroupName,response[``'result'``][``'groupids'``])

def host_create_andy(``self``,hostName,visibleName, hostip, hostgroupName, templateName):

if self``.host_get(hostip):

print "\033[041m该主机已经添加!\033[0m"

sys.exit(``1``)

group_list``=``[]

template_list``=``[]

for i ``in hostgroupName.split(``','``):

var ``= {}

var[``'groupid'``] ``= self``.hostgroup_get(i)

group_list.append(var)

for i ``in templateName.split(``','``):

var``=``{}

var[``'templateid'``]``=``self``.template_get(i)

template_list.append(var)

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``:``"host.create"``,

"params"``:{

"host"``: hostName,

"name"``: visibleName,

"interfaces"``: [

{

"type"``: ``2``, ``#1:表示IP;2表示SNMP

"main"``: ``1``,

"useip"``: ``1``,

"ip"``: hostip,

"dns"``: "",

"port"``: ``"161" #IP端口10051;SNMP端口161

}

],

"groups"``: group_list,

"templates"``: template_list,

},

"auth"``: ``self``.user_login(),

"id"``:``1

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print "添加主机 : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response[``'result'``][``'hostids'``])

def host_create(``self``, hostip, hostgroupName, templateName):

if self``.host_get(hostip):

print "\033[041m该主机已经添加!\033[0m"

sys.exit(``1``)

group_list``=``[]

template_list``=``[]

for i ``in hostgroupName.split(``','``):

var ``= {}

var[``'groupid'``] ``= self``.hostgroup_get(i)

group_list.append(var)

for i ``in templateName.split(``','``):

var``=``{}

var[``'templateid'``]``=``self``.template_get(i)

template_list.append(var)

data ``= json.dumps({

"jsonrpc"``:``"2.0"``,

"method"``:``"host.create"``,

"params"``:{

"host"``: hostip,

"interfaces"``: [

{

"type"``: ``2``,

"main"``: ``1``,

"useip"``: ``1``,

"ip"``: hostip,

"dns"``: "",

"port"``: ``"161"

}

],

"groups"``: group_list,

"templates"``: template_list,

},

"auth"``: ``self``.user_login(),

"id"``:``1

})

request ``= urllib2.Request(``self``.url, data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print "添加主机 : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response[``'result'``][``'hostids'``])

def host_disable(``self``,hostip):

data``=``json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"host.update"``,

"params"``: {

"hostid"``: ``self``.host_get(hostip),

"status"``: ``1

},

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except URLError as e:

print "Error as "``, e

else``:

response ``= json.loads(result.read())

result.close()

print '----主机现在状态------------'

print self``.host_get(hostip)

def host_delete(``self``,hostid):

hostid_list``=``[]

#print type(hostid)

for i ``in hostid.split(``','``):

var ``= {}

var[``'hostid'``] ``= self``.host_get(i)

hostid_list.append(var)

data``=``json.dumps({

"jsonrpc"``: ``"2.0"``,

"method"``: ``"host.delete"``,

"params"``: hostid_list,

"auth"``: ``self``.user_login(),

"id"``: ``1

})

request ``= urllib2.Request(``self``.url,data)

for key ``in self``.header:

request.add_header(key, ``self``.header[key])

try``:

result ``= urllib2.urlopen(request)

except Exception,e:

print e

else``:

result.close()

print "主机 \033[041m %s\033[0m 已经删除 !"``%``hostid

if __name__ ``=``= "__main__"``:

zabbix``=``zabbix_api()

parser``=``argparse.ArgumentParser(description``=``'zabbix api '``,usage``=``'%(prog)s [options]'``)

parser.add_argument(``'-H'``,``'--host'``,nargs``=``'?'``,dest``=``'listhost'``,default``=``'host'``,``help``=``'查询主机'``)

parser.add_argument(``'-G'``,``'--group'``,nargs``=``'?'``,dest``=``'listgroup'``,default``=``'group'``,``help``=``'查询主机组'``)

parser.add_argument(``'-T'``,``'--template'``,nargs``=``'?'``,dest``=``'listtemp'``,default``=``'template'``,``help``=``'查询模板信息'``)

parser.add_argument(``'-A'``,``'--add-group'``,nargs``=``1``,dest``=``'addgroup'``,``help``=``'添加主机组'``)

parser.add_argument(``'-C'``,``'--add-host'``,dest``=``'addhost'``,nargs``=``3``,metavar``=``(``'192.168.2.1'``, ``'test01,test02'``, ``'Template01,Template02'``),``help``=``'添加主机,多个主机组或模板使用分号'``)

parser.add_argument(``'-d'``,``'--disable'``,dest``=``'disablehost'``,nargs``=``1``,metavar``=``(``'192.168.2.1'``),``help``=``'禁用主机'``)

parser.add_argument(``'-L'``,``'--allin'``,dest``=``'allin'``,nargs``=``'?'``,default``=``'allin'``,``help``=``'从Excel批量导入主机'``)

parser.add_argument(``'-D'``,``'--delete'``,dest``=``'deletehost'``,nargs``=``'+'``,metavar``=``(``'192.168.2.1'``),``help``=``'删除主机,多个主机之间用分号'``)

parser.add_argument(``'-v'``,``'--version'``, action``=``'version'``, version``=``'%(prog)s 1.0'``)

if len``(sys.argv)``=``=``1``:

print parser.print_help()

else``:

args``=``parser.parse_args()

if args.listhost !``= 'host' :

if args.listhost:

zabbix.host_get(args.listhost)

else``:

zabbix.host_get()

if args.listgroup !``=``'group'``:

if args.listgroup:

zabbix.hostgroup_get(args.listgroup)

else``:

zabbix.hostgroup_get()

if args.listtemp !``= 'template'``:

if args.listtemp:

zabbix.template_get(args.listtemp)

else``:

zabbix.template_get()

if args.addgroup:

zabbix.hostgroup_create(args.addgroup[``0``])

if args.addhost:

zabbix.host_create(args.addhost[``0``], args.addhost[``1``], args.addhost[``2``])

if args.disablehost:

zabbix.host_disable(args.disablehost)

if args.deletehost:

zabbix.host_delete(args.deletehost[``0``])

if args.allin !``= 'allin'``:

workbook ``= xlrd.open_workbook(``'zabbix_host_add.xlsx'``) ``#Excel名

for row ``in xrange``(workbook.sheets()[``0``].nrows):

hostname ``= workbook.sheets()[``0``].cell(row, ``0``).value

visible ``= workbook.sheets()[``0``].cell(row, ``1``).value

hostip ``= workbook.sheets()[``0``].cell(row, ``2``).value

hostgroup ``= workbook.sheets()[``0``].cell(row, ``3``).value

hosttemp ``= workbook.sheets()[``0``].cell(row, ``4``).value

zabbix.host_create_andy(hostname,visible,hostip,hostgroup, hosttemp)

|

上面红色标注,请根据实际情况修改。

上传Python脚本zabbix_host.py至zabbix服务器

[root@localhost temp]# ll
total 1964
-rwxr-xr-x 1 root root 14644 Dec 17 23:28 zabbix_host.py

[root@localhost temp]# chown zabbix:zabbix zabbix_host.py #修改属组属主
[root@localhost temp]# chmod +x zabbix_host.py #添加执行权限

[root@localhost temp]# python zabbix_host.py -L #执行zabbix_host.py进行主机添加

目录
相关文章
|
10月前
|
JSON 算法 API
深度分析小红书城API接口,用Python脚本实现
小红书作为以UGC内容为核心的生活方式平台,其非官方API主要通过移动端抓包解析获得,涵盖内容推荐、搜索、笔记详情、用户信息和互动操作等功能。本文分析了其接口体系、认证机制及请求规范,并提供基于Python的调用框架,涉及签名生成、登录态管理与数据解析。需注意非官方接口存在稳定性与合规风险,使用时应遵守平台协议及法律法规。
|
10月前
|
JSON API 数据安全/隐私保护
【干货满满】分享微店API接口到手价,用python脚本实现
微店作为知名社交电商平台,其开放平台提供商品查询、订单管理等API接口。本文介绍如何通过微店API获取商品到手价(含优惠、券等),涵盖认证机制、Python实现及关键说明。
|
10月前
|
JSON API 数据安全/隐私保护
【干货满满】分享淘宝API接口到手价,用python脚本实现
淘宝开放平台通过API可获取商品到手价,结合商品详情与联盟接口实现优惠计算。需使用AppKey、AppSecret及会话密钥认证,调用taobao.tbk.item.info.get接口获取最终价格。代码示例展示签名生成与数据解析流程。
|
10月前
|
JSON API 数据格式
深度分析大麦网API接口,用Python脚本实现
大麦网为国内领先演出票务平台,提供演唱会、话剧、体育赛事等票务服务。本文基于抓包分析其非官方接口,并提供Python调用方案,涵盖演出列表查询、详情获取及城市列表获取。需注意非官方接口存在稳定性风险,使用时应遵守平台规则,控制请求频率,防范封禁与法律风险。适用于个人学习、演出信息监控等场景。
|
10月前
|
JSON API 开发者
深度分析阿里妈妈API接口,用Python脚本实现
阿里妈妈是阿里巴巴旗下营销平台,提供淘宝联盟、直通车等服务,支持推广位管理、商品查询等API功能。本文详解其API调用方法,重点实现商品推广信息(佣金、优惠券)获取,并提供Python实现方案。
|
10月前
|
JSON API 数据安全/隐私保护
深度分析虾皮城API接口,用Python脚本实现
虾皮开放平台提供丰富的API接口,支持商品管理、订单处理及促销信息查询等功能。本文详解API认证机制与调用方法,基于Python实现商品价格及到手价获取方案,适用于电商数据分析与运营。
|
10月前
|
JSON API 数据安全/隐私保护
【干货满满】分享拼多多API接口到手价,用python脚本实现
拼多多开放平台提供商品价格查询API,通过“pdd.ddk.goods.detail”接口可获取商品基础价、优惠券、拼团价等信息。结合client_id、client_secret及签名机制实现身份认证,支持推广位ID获取专属优惠。本文提供完整Python实现,涵盖签名生成、接口调用与价格解析逻辑,适用于比价工具、导购平台等场景。
|
10月前
|
API 数据安全/隐私保护 开发者
深度分析苏宁API接口,用Python脚本实现
深度分析苏宁API接口,用Python脚本实现
|
10月前
|
前端开发 Shell API
深度分析58同城API接口,用Python脚本实现
58同城为国内知名分类信息平台,涵盖房产、招聘、二手车等多领域。本文基于网页抓包与解析,分享其非官方接口的Python实现方案,分析核心接口特性与反爬应对策略,适用于数据学习与信息聚合。注意:非官方接口存在风险,使用需遵守平台规则。
|
10月前
|
JSON API 数据安全/隐私保护
【干货满满】分享京东API接口到手价,用python脚本实现
淘宝开放平台提供丰富API,通过商品详情接口与淘宝联盟接口,可获取含优惠券、满减后的商品到手价。本文介绍基于Python的实现方案,涵盖签名生成、接口调用、价格解析及错误处理,适用于比价工具、导购平台等场景。

热门文章

最新文章