1. 程式人生 > >調用zabbix API實現批量管理主機及個監控項

調用zabbix API實現批量管理主機及個監控項

nta mps 返回 eid cati png 輸入 sha min

首先貼上zabbix官網和中文官網的地址:

  https://www.zabbix.com/documentation/3.4/manual/api/reference/item/object

  https://www.zabbix.com/documentation/3.4/zh/manual/api 任何時候任何難題在官網上幾乎都能找到答案

 首先,我們想用利用zabbix的restful api來訪問zabbix,肯定是需要登陸認證的。在zabbix的後續操作中,必須要有一個TOKEN,這也是官方介紹的:官方上實現的方法如下

{
"jsonrpc": "2.0",
"method": "user.login",

"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}
jsonrpc - API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0; (必須的)
method - 調用的API方法;
params - 將被傳遞給API方法的參數;
id - 請求的任意標識符; 這個的id需要特別理解下,我之前一直不是很理解。這裏的id其實就是一個標誌,設置多少無所謂,主要是做返回標誌用,也就是這裏設置多少,返回數據也會有一個相同的ID 用來標誌這個返回對應那個請求!
auth -用戶認證令牌; 因為我們還沒有一個,它的設置null。

了解了之後我們構造一個請求函數----目的是獲取token
def init():
self.url = ‘http://192.168.1.10/zabbix/api_jsonrpc.php‘
self.headers = {‘Content-Type‘: ‘application/json‘}
auth = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "admin", ###驗證

"password":"zabbix"
},
"id": 1,
"auth":None,
}
response = requests.post(self.url, data=json.dumps(auth), headers=self.headers)
authid = json.loads(response.text)[‘result‘] ### auth的id 也就是token

OK 我們已經獲取了TOKEN 了接下來就可以為所欲為了!

第二步我們獲取所有主機list信息(其實也可以去數據庫裏面取--但是如果去數據庫裏面取 還得寫數據庫函數 輸入賬號密碼等等等。。。。)

def get_hosts():
neirong={
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": ”AAA“
}
response = requests.post(self.url, data=json.dumps(neirong), headers=self.headers)
print(response.text)

技術分享圖片

註意這裏的interfacse很重要 因為以後對主機項的操作(比如添加item)就需要這個玩意兒。。 我在這裏卡了很久 以為這個不重要 官網的說法如下:

技術分享圖片

第三步:創建主機ITEM
機上上一步我們說到了創建主機 item,我們就來創建一個 上一步我們已經獲取到了 主機的 hostid 10255 interfaceid 3 這兩個是添加item必須的對於創建item官網的實例為:

{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "Free disk space on $1",
"key_": "vfs.fs.size[/home/joe/,free]",
"hostid": "10084",
"type": 0,
"value_type": 3,
"interfaceid": "1",
"delay": 30
},
"auth": "0424bd59b807674191e7d77572075f33",
"id": 3
}
好了 我們稍稍改一下:

def itemcreate():
neirong ={
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "Free disk space on $1",
"key
": "vfs.fs.size[/boot,pused]",
"hostid": "10255",
"type": 0,
"value_type": 0,
"interfaceid": "3",
"delay": 5
},
"auth": authid ,(註意這個autid是一個坑一會說明)
"id": 3
}
response1 = requests.post(self.url, data=json.dumps(neirong), headers=self.headers)
print(response1.text)
print("OK")

            這裏面的type  value_type的意思可以去官網詳細看看 我這裏設置的是0 0  也就是代表 zabbix_agent float  相信有zabbix基礎的同學是秒懂

接下來我們去zabbix圖形化界面上看一看吧:
技術分享圖片

OK,到此完畢,圖形出不來的看下邊腳本:

def graf_create(self, authid):
neirong = {
"jsonrpc": "2.0",
"method": "graph.create",
"params": {
"name": "test1",
"width": 900,
"height": 200,
"gitems": [
{
"itemid": "28257",
"color": "00AA00"
}
]
},
"auth": authid,
"id": 4
}

    response1 = requests.post(self.url, data=json.dumps(neirong), headers=self.headers)
    print(response1)
    print(response1.text)
    print("OK")

咱們再說那個authid的問題
技術分享圖片
調用一下這個函數
技術分享圖片

調用zabbix API實現批量管理主機及個監控項