7.1 問題
編寫一個remote_comm.py腳本,實現以下功能:
- 主機192.168.4.10已安裝zabbix_agent
- 將該主機填加到zabbix監控的主機中
- 主機屬於Linux Servers組
7.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:編寫腳本,檢索組
1)從zabbix官方文檔中使用hostgroup.get 方法獲取主機組請求,如圖-9所示:
官方文檔地址如下:
https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/hostgroup/get
圖-15
2)編寫get_hostgroup.py文件,檢索組
copytext
[root@localhost day12]# vim get_hostgroup.py
#!/usr/bin/env python3
import requests
import json # python中的dict類型要轉換爲json格式的數據需要用到json庫
#要訪問的網址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#請求頭部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是從官方文檔處獲得的
data = {
# API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0
"jsonrpc": "2.0",
"method": " hostgroup.get ", #調用的API方法
# params將被傳遞給API方法的參數
"params": {
"output": "extend",
},
"auth": "0424bd59b807674191e7d77572075f33", #之前獲取到的令牌
"id": 1 #請求的任意標識符
}
#使用requests發送請求,訪問指定網站,向url發送data請求,r收到的返回響應爲json格式
#將data轉成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
ginfo = r.json()
print(ginfo['result']) #打印主機組信息
for item in ginfo['result']:
print(item['groupid'], item['name']) #打印主機組id和名稱
[root@localhost day12]# vim get_hostgroup.py
#!/usr/bin/env python3
import requests
import json # python中的dict類型要轉換爲json格式的數據需要用到json庫
#要訪問的網址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#請求頭部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是從官方文檔處獲得的
data = {
# API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0
"jsonrpc": "2.0",
"method": " hostgroup.get ", #調用的API方法
# params將被傳遞給API方法的參數
"params": {
"output": "extend",
},
"auth": "0424bd59b807674191e7d77572075f33", #之前獲取到的令牌
"id": 1 #請求的任意標識符
}
#使用requests發送請求,訪問指定網站,向url發送data請求,r收到的返回響應爲json格式
#將data轉成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
ginfo = r.json()
print(ginfo['result']) #打印主機組信息
for item in ginfo['result']:
print(item['groupid'], item['name']) #打印主機組id和名稱
pop-up
3)測試腳本執行,獲取了主機名稱及id,如圖-10所示:
圖-16
步驟二:編寫腳本,檢索模板
1)從zabbix官方文檔中使用template.get 方法獲取模板請求,如圖-11所示:
官方文檔地址如下:
https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/template/get
圖-17
2)編寫get_template.py文件
copytextpop-up
[root@localhost day12]# vim get_template.py
#!/usr/bin/env python3
import requests
import json # python中的dict類型要轉換爲json格式的數據需要用到json庫
#要訪問的網址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#請求頭部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是從官方文檔處獲得的
data = {
# API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0
"jsonrpc": "2.0",
"method": "template.get", #調用的API方法
# params將被傳遞給API方法的參數
"params": {
"output": "extend",
},
"auth": "0424bd59b807674191e7d77572075f33", #之前獲取到的令牌
"id": 1 #請求的任意標識符
}
#使用requests發送請求,訪問指定網站,向url發送data請求,r收到的返回響應爲json格式
#將data轉成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
#將json格式解碼
tinfo = r.json()
#print(tinfo) #打印模板信息
for item in tinfo['result']:
print(item['templateid'], item['host']) #打印模板名及id
[root@localhost day12]# vim get_template.py
#!/usr/bin/env python3
import requests
import json # python中的dict類型要轉換爲json格式的數據需要用到json庫
#要訪問的網址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#請求頭部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是從官方文檔處獲得的
data = {
# API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0
"jsonrpc": "2.0",
"method": "template.get", #調用的API方法
# params將被傳遞給API方法的參數
"params": {
"output": "extend",
},
"auth": "0424bd59b807674191e7d77572075f33", #之前獲取到的令牌
"id": 1 #請求的任意標識符
}
#使用requests發送請求,訪問指定網站,向url發送data請求,r收到的返回響應爲json格式
#將data轉成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
#將json格式解碼
tinfo = r.json()
#print(tinfo) #打印模板信息
for item in tinfo['result']:
print(item['templateid'], item['host']) #打印模板名及id
3)測試腳本執行,獲取了模板名稱及id,如圖-12所示:
圖-18
步驟三:編寫腳本,創建主機
1)從zabbix官方文檔中使用host.create方法獲取創建主機請求,如圖-13所示:
官方文檔地址如下:
https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/host/create
圖-19
2)編寫get_host.py文件
copytextpop-up
[root@localhost day12]# vim get_host.py
#!/usr/bin/env python3
import requests
import json # python中的dict類型要轉換爲json格式的數據需要用到json庫
#要訪問的網址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#請求頭部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是從官方文檔處獲得的
data = {
# API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0
"jsonrpc": "2.0",
"method": "user.login", #調用的API方法
# params將被傳遞給API方法的參數
"params": {
"host": "mylinux", #要創建的主機的名稱
"interfaces": [
{
"type": 1, # 1 agent; 2 SNMP; 3 IPMI; 4 JMX
"main": 1, # 該接口是否在主機上用作默認接口。1 默認
"useip": 1, # 是否應通過IP進行連接
"ip": "192.168.4.3",
"dns": "",
"port": "10050" #ip已裝zabbix_agent,端口號爲10050
}
],
"groups": [
{
"groupid": "2" #之前檢索到的主機組id
}
],
"templates": [
{
"templateid": "10001" #之前檢索到的模板id
}
],
"inventory_mode": 0, #資產信息,0爲停用
},
"auth": "0424bd59b807674191e7d77572075f33", #之前獲取到的令牌
"id": 1 #請求的任意標識符
}
#使用requests發送請求,訪問指定網站,向url發送data請求,r收到的返回響應爲json格式
#將data轉成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
[root@localhost day12]# vim get_host.py
#!/usr/bin/env python3
import requests
import json # python中的dict類型要轉換爲json格式的數據需要用到json庫
#要訪問的網址
url = 'http://192.168.4.2/zabbix/api_jsonrpc.php'
#請求頭部信息
headers = {'Content-Type': 'application/json-rpc'}
# data是從官方文檔處獲得的
data = {
# API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0
"jsonrpc": "2.0",
"method": "user.login", #調用的API方法
# params將被傳遞給API方法的參數
"params": {
"host": "mylinux", #要創建的主機的名稱
"interfaces": [
{
"type": 1, # 1 agent; 2 SNMP; 3 IPMI; 4 JMX
"main": 1, # 該接口是否在主機上用作默認接口。1 默認
"useip": 1, # 是否應通過IP進行連接
"ip": "192.168.4.3",
"dns": "",
"port": "10050" #ip已裝zabbix_agent,端口號爲10050
}
],
"groups": [
{
"groupid": "2" #之前檢索到的主機組id
}
],
"templates": [
{
"templateid": "10001" #之前檢索到的模板id
}
],
"inventory_mode": 0, #資產信息,0爲停用
},
"auth": "0424bd59b807674191e7d77572075f33", #之前獲取到的令牌
"id": 1 #請求的任意標識符
}
#使用requests發送請求,訪問指定網站,向url發送data請求,r收到的返回響應爲json格式
#將data轉成json格式
r = requests.post(url, headers=headers, data=json.dumps(data))
3)測試腳本執行,運行腳本成功後,主機創建成功,如圖-20所示:
圖-20