Zabbix使用API批量匯入主機
Zabbix 提供API介面,可以為我們的運維工作提供很大的便利,現將整理並驗證的python指令碼提供給搭建。
本文是zabbix批量匯入主機的python指令碼。
匯入資訊包含:主機名稱、可見名稱、主機IP、主機組、埠、模版。
本文只支援含一個模版、二個模版的建立,如有其它需要,可自行更改指令碼
EXCE模版:
[[email protected] API]# more pil_host1.py
#coding:utf-8
# by abel
# [email protected]
import json
import urllib2
from urllib2 import URLError
import sys
import xlrd
class ZabbixTools:
def __init__(self):
self.url = 'http://10.10.50.81 /zabbix/api_jsonrpc.php'
self.header = {"Content-Type":"application/json"}
# 獲取主機key
def user_login(self):
data = json.dumps({
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": 'Admin ',
"password": 'zabbix'
},
"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 "Auth Failed, please Check your name and password:", e.code
else:
response = json.loads(result.read())
result.close()
self.authID = response['result']
return self.authID
# 獲取hostid
def host_get(self,hostName):
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.get",
"params":{
"output":["hostid","name"],
"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())
result.close()
print "Number Of %s: " % hostName, len(response['result'])
lens=len(response['result'])
if lens > 0:
return response['result'][0]['name']
else:
return ""
# 獲取hostgrouid
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:
response = json.loads(result.read())
result.close()
lens=len(response['result'])
if lens > 0:
self.hostgroupID = response['result'][0]['groupid']
return response['result'][0]['groupid']
else:
print "no GroupGet result"
return ""
# 獲取templateid
def template_get(self, templateName):
data = json.dumps({
"jsonrpc":"2.0",
"method": "template.get",
"params": {
"output": "extend",
"filter": {
"host": [
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 'template_get_result:%s' % response['result']
self.templateID = response['result'][0]['templateid']
return response['result'][0]['templateid']
# 如主機組不存在則建立hostgroup
def hostgroup_create(self, hostgroupName):
data = json.dumps({
"jsonrpc": "2.0",
"method": "hostgroup.create",
"params": {
"name": hostgroupName
},
"auth": self.user_login(),
"id": 1
})
hostgroupid = self.hostgroup_get(hostgroupName)
if hostgroupid == '':
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
print 'result:%s' % result
except URLError as e:
print "Error as ", e
else:
response = json.loads(result.read())
result.close()
return response['result']['groupids']
# 建立host
def host_create(self, hostName,visibleName,hostIp, hostgroupName,hostPort, templateName1):
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.create",
"params":{
"host": hostName,
"name": visibleName,
#"proxy_hostid": self.proxy_get(proxyName),
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": hostIp,
"dns": "",
"port": hostPort
}
],
"groups": [
{
"groupid": self.hostgroup_get(hostgroupName)
}
],
"templates": [
{
"templateid": self.template_get(templateName1)
}
],
},
"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 "host : %s is created! hostid is %s\n" % (hostip, response['result']['hostids'][0])
self.hostid = response['result']['hostids']
return response['result']['hostids']
def host_create_with2templates(self, hostName,visibleName,hostIp, hostgroupName, hostPort,templateName1, templateName2):
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.create",
"params":{
"host": hostName,
"name": visibleName,
#"proxy_hostid": self.proxy_get(proxyName),
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": hostIp,
"dns": "",
"port": hostPort
}
],
"groups": [
{
"groupid": self.hostgroup_get(hostgroupName)
}
],
"templates": [
{
"templateid": self.template_get(templateName1)
},
{
"templateid": self.template_get(templateName2)
}
],
},
"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 "host : %s is created! hostid is %s\n" % (hostip, response['result']['hostids'][0])
self.hostid = response['result']['hostids']
return response['result']['hostids']
# 程式的入口
if __name__ == "__main__":
test = ZabbixTools()
workbook = xlrd.open_workbook('host_list.xls')
for row in xrange(workbook.sheets()[0].nrows):
#過濾掉第一行
if row == 0:
continue
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
hostport=int(workbook.sheets()[0].cell(row,4).value)
hosttemp=workbook.sheets()[0].cell(row,5).value
hosttemp2=workbook.sheets()[0].cell(row,6).value
hostgroup=hostgroup.strip()
hostgroupid = test.hostgroup_get(hostgroup)
if hostgroupid == '':
test.hostgroup_create(hostgroup)
hostnameGet=test.host_get(hostname)
if hostnameGet.strip() != '':
print "%s have exist! Cannot recreate !\n" % hostnameGet
continue
if hostnameGet.strip() == '' and hosttemp != '' and hosttemp2 != '':
print hostname + ',' + visible + ',' + hostip + ',' + hostgroup + ',' + str(hostport) + ',' + hosttemp + ',' + hosttemp2
test.host_create_with2templates(hostname,visible,hostip,hostgroup,hostport,hosttemp,hosttemp2)
continue
if hostnameGet.strip() == '' and hosttemp != '':
print hostname + ',' + visible + ',' + hostip + ',' + hostgroup + ',' + str(hostport) + ',' + hosttemp
test.host_create(hostname,visible,hostip,hostgroup,hostport,hosttemp)
10.10.50.81/zabbix/api_jsonrpc.php'
self.header = {"Content-Type":"application/json"}
# 獲取主機key
def user_login(self):
data = json.dumps({
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": 'Admin',
"password": 'zabbix'
},
"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 "Auth Failed, please Check your name and password:", e.code
else:
response = json.loads(result.read())
result.close()
self.authID = response['result']
return self.authID
# 獲取hostid
def host_get(self,hostName):
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.get",
"params":{
"output":["hostid","name"],
"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())
result.close()
print "Number Of %s: " % hostName, len(response['result'])
lens=len(response['result'])
if lens > 0:
return response['result'][0]['name']
else:
return ""
# 獲取hostgrouid
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:
response = json.loads(result.read())
result.close()
lens=len(response['result'])
if lens > 0:
self.hostgroupID = response['result'][0]['groupid']
return response['result'][0]['groupid']
else:
print "no GroupGet result"
return ""
# 獲取templateid
def template_get(self, templateName):
data = json.dumps({
"jsonrpc":"2.0",
"method": "template.get",
"params": {
"output": "extend",
"filter": {
"host": [
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 'template_get_result:%s' % response['result']
self.templateID = response['result'][0]['templateid']
return response['result'][0]['templateid']
# 如主機組不存在則建立hostgroup
def hostgroup_create(self, hostgroupName):
data = json.dumps({
"jsonrpc": "2.0",
"method": "hostgroup.create",
"params": {
"name": hostgroupName
},
"auth": self.user_login(),
"id": 1
})
hostgroupid = self.hostgroup_get(hostgroupName)
if hostgroupid == '':
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
print 'result:%s' % result
except URLError as e:
print "Error as ", e
else:
response = json.loads(result.read())
result.close()
return response['result']['groupids']
# 建立host
def host_create(self, hostName,visibleName,hostIp, hostgroupName,hostPort, templateName1):
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.create",
"params":{
"host": hostName,
"name": visibleName,
#"proxy_hostid": self.proxy_get(proxyName),
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": hostIp,
"dns": "",
"port": hostPort
}
],
"groups": [
{
"groupid": self.hostgroup_get(hostgroupName)
}
],
"templates": [
{
"templateid": self.template_get(templateName1)
}
],
},
"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 "host : %s is created! hostid is %s\n" % (hostip, response['result']['hostids'][0])
self.hostid = response['result']['hostids']
return response['result']['hostids']
def host_create_with2templates(self, hostName,visibleName,hostIp, hostgroupName, hostPort,templateName1, templateName2):
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.create",
"params":{
"host": hostName,
"name": visibleName,
#"proxy_hostid": self.proxy_get(proxyName),
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": hostIp,
"dns": "",
"port": hostPort
}
],
"groups": [
{
"groupid": self.hostgroup_get(hostgroupName)
}
],
"templates": [
{
"templateid": self.template_get(templateName1)
},
{
"templateid": self.template_get(templateName2)
}
],
},
"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 "host : %s is created! hostid is %s\n" % (hostip, response['result']['hostids'][0])
self.hostid = response['result']['hostids']
return response['result']['hostids']
# 程式的入口
if __name__ == "__main__":
test = ZabbixTools()
workbook = xlrd.open_workbook('host_list.xls')
for row in xrange(workbook.sheets()[0].nrows):
#過濾掉第一行
if row == 0:
continue
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
hostport=int(workbook.sheets()[0].cell(row,4).value)
hosttemp=workbook.sheets()[0].cell(row,5).value
hosttemp2=workbook.sheets()[0].cell(row,6).value
hostgroup=hostgroup.strip()
hostgroupid = test.hostgroup_get(hostgroup)
if hostgroupid == '':
test.hostgroup_create(hostgroup)
hostnameGet=test.host_get(hostname)
if hostnameGet.strip() != '':
print "%s have exist! Cannot recreate !\n" % hostnameGet
continue
if hostnameGet.strip() == '' and hosttemp != '' and hosttemp2 != '':
print hostname + ',' + visible + ',' + hostip + ',' + hostgroup + ',' + str(hostport) + ',' + hosttemp + ',' + hosttemp2
test.host_create_with2templates(hostname,visible,hostip,hostgroup,hostport,hosttemp,hosttemp2)
continue
if hostnameGet.strip() == '' and hosttemp != '':
print hostname + ',' + visible + ',' + hostip + ',' + hostgroup + ',' + str(hostport) + ',' + hosttemp
test.host_create(hostname,visible,hostip,hostgroup,hostport,hosttemp)
參考連結:https://www.cnblogs.com/reblue520/p/7614347.html
相關推薦
Zabbix使用API批量匯入主機
Zabbix 提供API介面,可以為我們的運維工作提供很大的便利,現將整理並驗證的python指令碼提供給搭建。 本文是zabbix批量匯入主機的python指令碼。 匯入資訊包含:主機名稱、可見名稱、主機IP、主機組、埠、模版。 本文只支援含一個模版、二個模版的建立,
[ Python - 13 ] 批量管理主機必備模塊
oot 信息 imp group 接收 shc ring mount rgs 批量管理程序必備模塊 optparse configparser paramiko optparse模塊 簡介: optparse模塊主要用來為腳本傳遞命令參數功能
批量管理主機工具--ansible
文件 agentless none 線程數 style color user 結果 highlight ansible是Python語言(Python2)編寫的一款批量管理linux主機的工具,適用於數十臺、百臺機器的管理,無需安裝agent,非常方便。 1 主要依賴的
Python多線程批量Ping主機IP的腳本
python ping 多線程 threading Queue Python 編寫多線程 Ping 主機IP的腳本 1. 先編寫一個 Ping 主機IP的腳本 ping_ip.py import subprocess import time # 記錄開始執行的時間 start_time
ansible-批量修改主機名
主機名 cts gather res nbsp etc ble tasks hostname 修改cat /etc/ansible/hosts [test]10.27.235.108 host_name=test_host_name - hosts: test u
一個簡單的shell小腳本,批量ping主機ip的存活狀態
proc ges echo col 垃圾 ces null The scrip #!bin/bash #ping host ip #2018年7月17日 #The shell script author xiaolong for hostip in {200..210}
調用zabbix API實現批量管理主機及個監控項
nta mps 返回 eid cati png 輸入 sha min 首先貼上zabbix官網和中文官網的地址: https://www.zabbix.com/documentation/3.4/manual/api/reference/item/object ht
批量匯入資料(Mysql)報MySQL server has gone away 問題的解決方法
問題分析 首先度娘:mysql出現ERROR : (2006, 'MySQL server has gone away') 的問題意思就是指client和MySQL server之間的連結斷開了。 造成這樣的原因一般是sql操作的時間過長,或者是傳送的資料太大(例如使用inser
C++批量匯入檔案
如果這樣做: for (int i = 1; i<= 100; i++) { img = imread(“D:\低解析度截圖重新命名\%d.jpg”, i); imgs.push_back(img); } 看似不報錯,但是如果imshow一下,就會發現根本沒有讀圖。 對於檔案流,和普通
jdbc百萬資料批量匯入,流式讀取
Connection connReader = null; Connection connWrite = null; String url = "jdbc:mysql://XX:3306/XX?" + "user=XX&password=XX&
CAS統一登入認證(13): ldap 批量匯入使用者
cas登入後臺驗證賬號來自ldap,需要批量匯入賬號到ldap,這個問題幾經研究,最後方法如下: 先編寫程式生成ldif格式檔案,然後再在ldapadmin.exe程式或 phpldapadmin網頁中匯入這個ldif檔案 1. 生成的ldif檔案格式: 【空行】 dn: u
zabbix api 批量新增主機
網上都是python2 urllib庫的。 於是寫了1版python3 requests庫的 # /usr/bin/env python3 # -*- coding:utf-8 -*- # mail: [email protected] import requests import j
使用kettle來根據時間戳或者批次號來批量匯入資料,達到增量的效果。
1、Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上執行,資料抽取高效穩定。下載圖形化介面的zip包格式的,直接解壓縮使用即可。安裝部署模式這裡不說了,自己可以根據自己的需求安裝為單機模式或者叢集模式。 Kettle的社群官
C# 批量匯入 SqlBulkCopy
快速批量匯入方法 SqlBulkCopy 1 public string InsertSqlBulkCopy(DataTable dt, string tableName, ref string errinfo) 2 {
【轉載】QP02檢驗計劃批量匯入
其他參考: https://archive.sap.com/discussions/thread/3430191 *&---------------------------------------------------------------------* *& PROGRAM
使用solr批量匯入mysql資料庫,以及Unable to read: dataimport.properties等坑
折騰了一下午終於成功了!先放一張成功圖: 成功把mysql的資料新增進去了,我這裡是整合了tomcat9,整合步驟挺麻煩的,百度一大堆! 這裡主要介紹批量匯入資料,這裡有些坑,所以記錄一下: 步驟: 第一: 引入需要的jar包 我這裡把home目錄放外面了,所以核心配置檔案引入jar包需要改一下
Solr批量匯入資料
1、從solr 4.10.3 的dist 下 所需Jar包複製一份到 solr_home的索引庫(db1 是我自己新建的索引庫)下lib下 如果沒有就新建 2、在索引庫(db1)的核心配置檔案(solrconfig.xml)中 新增請求處理器。 <requestHand
將根據時間戳增量資料方案修改為根據批次號增量資料方案 使用kettle來根據時間戳或者批次號來批量匯入資料,達到增量的效果。
1、之前寫過根據時間戳來增量資料,時間戳增量資料存在一定的缺點,就是如果開啟自動的話,以後如果因為某個外在因素出錯了,那麼這個開始時間和結束時間不好控制,那麼就可能造成一些其他資料量不準的情況,但是根據批次號不會出現這個問題: 使用kettle來根據時間戳或者批次號來批量匯入資料,達到增量的效果。
銷售訂單批量匯入(1)
注意:數量和金額必須用字元,否則 0.81 會變成81 *&---------------------------------------------------------------------
【Springboot+mybatis】 解析Excel並批量匯入到資料庫
【Springboot+mybatis】 解析Excel並批量匯入到資料庫 置頂 2018年01月16日 20:05:52 冉野丶 閱讀數:4060 標籤: excel匯入資料庫 檔案上傳 excel解析 更多 個人分類: POI 工作問題歸納 版權宣告:本文為博主原創文章,未經博主允許不得