【逗老师带你学IT】PRTG、Zabbix通过API监控深信服VDC和VMP云桌面运行状态
本文介紹,如果使用API讓PRTG和Zabbix等第三方監(jiān)控系統(tǒng)獲取深信服云桌面產(chǎn)品(VDC+VMP)的運(yùn)行狀態(tài),可以獲取的監(jiān)控項(xiàng)包括
1、集群性能匯總(CPU、內(nèi)存、存儲(chǔ)、網(wǎng)絡(luò)IO)
2、集群運(yùn)行狀態(tài)(在線物理機(jī)數(shù)量、下線物理機(jī)數(shù)量、總虛機(jī)數(shù)量、運(yùn)行虛機(jī)數(shù)量等)
3、單臺(tái)物理機(jī)性能狀態(tài)(CPU、內(nèi)存、存儲(chǔ)、運(yùn)行虛擬機(jī)數(shù)量)
4、單臺(tái)物理機(jī)硬件狀態(tài)(CPU溫度、電源功率、內(nèi)存狀態(tài)等IPMI監(jiān)控項(xiàng))
目錄
- 一、關(guān)于深信服VDC和VMP平臺(tái)
- 1、VDC與VMP的關(guān)系
- 2、VDC與VMP的監(jiān)控指標(biāo)
- 二、VDC API接口說明
- 1、操作權(quán)限認(rèn)證接口
- 2、獲取集群在線用戶數(shù)量接口
- 3、獲取VMP集群匯總性能信息
- 4、獲取指定主機(jī)信息
- 三、代碼使用說明
- 1、Github地址
- 2、PRTG添加自定義傳感器
- 2.1、添加在線用戶監(jiān)控項(xiàng)
- 2.2、添加集群性能匯總監(jiān)控項(xiàng)
- 2.3、添加單一物理機(jī)性能監(jiān)控項(xiàng)
- 2.4、添加服務(wù)器帶外管理監(jiān)控項(xiàng)
- 3、PRTG運(yùn)行Python腳本的傳參
- 搞定!
一、關(guān)于深信服VDC和VMP平臺(tái)
1、VDC與VMP的關(guān)系
先說一下深信服桌面云產(chǎn)品中VDC和VMP的關(guān)系。
VDC(Virtual Desktop Controller)是云桌面的控制平臺(tái),負(fù)責(zé)云端桌面的接入、展現(xiàn)、控制等。
VMP(Virtual Management Platform)是虛擬化管理平臺(tái),負(fù)責(zé)將裸金屬服務(wù)器構(gòu)建成虛擬化集群。
2、VDC與VMP的監(jiān)控指標(biāo)
所以,結(jié)合一個(gè)正常云計(jì)算系統(tǒng)的框架,我們想象一下這二者面向的對(duì)象和能獲取的監(jiān)控項(xiàng)。
VDC面向桌面,能監(jiān)控到桌面終端連接并發(fā)、用戶操作行為、文件拷貝速率、虛擬桌面數(shù)量等。
VMP面向虛擬化,能監(jiān)控到集群的CPU、內(nèi)存、存儲(chǔ)IO等指標(biāo)。
但是!但是!但是!
深信服這個(gè)傻X玩意不按常理出牌,這也就是為什么我要寫這么一篇文章來說明這個(gè)事情。
先上結(jié)論:
深信服的VMP自身就是個(gè)垃圾,對(duì)VMP的監(jiān)控需要通過調(diào)用VDC的接口來實(shí)現(xiàn)。
那么VDC是如何獲取VMP的運(yùn)行情況,如一般的桌面云產(chǎn)品一樣,VDC是可以管理VMP的,例如VDC可以直接調(diào)用VMP創(chuàng)建虛擬機(jī)。在深信服產(chǎn)品內(nèi),VDC內(nèi)需要添加VMP的控制信息,如下圖:
二、VDC API接口說明
深信服的云桌面API接口文檔已經(jīng)上傳【CSDN資源】深信服桌面云開放平臺(tái)(V1.2)
其中包含了資源管理接口、角色管理接口、虛擬機(jī)管理接口、策略組管理接口、用戶管理接口、用戶組管理接口、VMP管理虛擬機(jī)接口、日志接口、運(yùn)維接口等接口說明。感興趣的讀者可以去下載原文手冊(cè)。
本文全部代碼已經(jīng)上傳Github,地址如下:
Public_Share_Project/PRTG 自定義傳感器Customer Senser/深信服VDI監(jiān)控接口/
本文對(duì)運(yùn)維監(jiān)控需要用到的接口做詳細(xì)說明
1、操作權(quán)限認(rèn)證接口
POST https://<VDC ip>/v1/auth/tokens
簡(jiǎn)介
操作權(quán)限認(rèn)證,將auth_token賦值給請(qǐng)求頭部中Auth-Token字段才能獲取其余接口的訪問權(quán)限。
請(qǐng)求參數(shù)
| auth | body | object | y | 認(rèn)證對(duì)象 |
| name | body | string | y | 超級(jí)租戶賬號(hào) |
| password | body | string | y | 超級(jí)租戶密碼 |
返回參數(shù)
| token | body | object | y | token對(duì)象 |
| tenant_id | body | string | y | 租戶ID號(hào) |
| auth_token | body | string | y | 認(rèn)證token |
請(qǐng)求示例代碼
def get_token(deviceip,name,password):try:headers={'Content-Type':'application/json'}data={"auth": {"name": name,"password": password}}post_url='https://%s:11111/v1/auth/tokens'%deviceiprequest = requests.post(url=post_url,headers=headers,json=data,verify = False)request_text=json.loads(request.text)token_text=request_text['data']['token']['auth_token']except Exception as err:raise errelse:return token_text2、獲取集群在線用戶數(shù)量接口
GET https://<VDC ip>/v1/user_groups
簡(jiǎn)介
獲取指定用戶組的基本信息,包括用戶組ID、用戶組名稱、描述、父組ID、是否啟用、區(qū)域名、策略組名、角色名
請(qǐng)求參數(shù)
| group_id | Path | Int | Y | 用戶組ID |
| page_size | Path | Int | Y | 每頁(yè)顯示的數(shù)量 |
| page | Path | Int | Y | 顯示的頁(yè)數(shù) |
響應(yīng)參數(shù)
| id | Body | Int | Y | 用戶組ID |
| name | Body | String | Y | 用戶組名稱 |
| note | Body | String | Y | 描述 |
| group_id | Body | Int | Y | 所屬用戶組ID |
| enable | Body | Int | Y | 是否啟用 1是 0否 |
| area_name | Body | String | Y | 區(qū)域名 |
| grpolicy | Body | String | Y | 策略組名 |
| role_names | Body | String | Y | 角色名列表 |
響應(yīng)示例
{"error_code":0,"error_message":"Operation succeeded. ","data":{"total_count":"2","list":[{"id":-1,"name":"Default Group","note":"System protected,unable to be deleted","group_id":-100,"enable":0,"area_name":"\u5f85\u5206\u914d\u533a\u57df","grpolicy":"Default policy set","role_names":"c"}]} }請(qǐng)求示例代碼
def get_online_user_info(deviceip,token):try:headers={'Content-Type':'application/json','Auth-Token':token}get_url='https://%s:11111/v1/users?group_id=-100&page_size=10&page=1&user_state=online'%deviceiprequest = requests.get(url=get_url,headers=headers,verify = False)value_text=request.textexcept Exception as err:raise errelse:return value_textdef sort_online_user_info(value_text):try:value_dict={}value_json=json.loads(value_text)value_dict['Online_Users_Number']=[value_json['data']['total_count'],'#','']except Exception as err:raise errelse:return value_dict本示例可以獲取到當(dāng)前在線用戶數(shù)量的監(jiān)控指標(biāo),并用于后續(xù)在PRTG和Zabbix上進(jìn)行展示。
3、獲取VMP集群匯總性能信息
GET /v1/vtp?vtp_id=3
簡(jiǎn)介
獲取VMP集群的集群信息,包括集群的主機(jī)、cpu、網(wǎng)卡、虛擬機(jī)、存儲(chǔ)、內(nèi)存數(shù)據(jù)。
請(qǐng)求參數(shù)
| vtp_id | Path | Int | Y | VMP控制器 ID,根據(jù)添加的順序,第一個(gè)VMP集群的vtp_id=1 |
響應(yīng)參數(shù)
| cluster | Body | Object | Y | 集群信息 |
| cpu | Body | Object | Y | CPU信息 |
| net | Body | Object | Y | 網(wǎng)卡信息 |
| host | Body | Object | Y | 主機(jī)信息 |
| vm | Body | Object | Y | 虛擬機(jī)信息 |
| stg | Body | Object | Y | 存儲(chǔ)信息 |
| mem | Body | Object | Y | 內(nèi)存信息 |
| total | Body | Int | Y | 主機(jī)數(shù)量 |
響應(yīng)示例
{"error_code": 0,"data": {"cluster": {"cluster_num": 1,"is_cluster": 0},"is_graphics_cluster": 0,"cpu": {"ratio": "0.64","used": "22127.616","total": "34574.4"},"version": "VMP 5.4.2_B \nVMP5.4.0_B-2019-11-26_18:30:00\nupdate=1","net": {"receive": 894928,"send": 56412,"total": 951340},"host": {"offline": 0,"cnt": 1,"online": 1},"vm": {"on": 27,"vgpu_off": 0,"off": 125,"vgpu_on": 0,"cnt": 152,"vgpu_cnt": 0},"stg": {"itl": 1,"ratio": "0.44","vs": 1,"used": 1745930420224,"ext": 0,"total": 3994554466304,"cnt": 2},"mem": {"ratio": "0.67","used": 68899549184,"total": 103079215104}},"total": 2 }請(qǐng)求示例代碼
def get_vmp_cluster_info(deviceip,token):try:headers={'Content-Type':'application/json','Auth-Token':token}get_url='https://%s:11111/v1/vtp?vtp_id=1'%deviceiprequest = requests.get(url=get_url,headers=headers,verify = False)value_text=request.textexcept Exception as err:raise errelse:return value_textdef sort_vmp_cluster_info(value_text):try:value_dict={}value_json=json.loads(value_text)value_dict['System_Version']=value_json['data']['data']['version'].replace('\n','')value_dict['CPU_Useage']=[float(value_json['data']['data']['cpu']['ratio'])*100,'%',3,-1,70,-1,80]value_dict['Memory_Useage']=[float(value_json['data']['data']['mem']['ratio'])*100,'%',3,-1,70,-1,80]value_dict['Storage_Useage']=[float(value_json['data']['data']['stg']['ratio'])*100,'%',3,-1,80,-1,85]value_dict['VMs_ON_Counts']=[value_json['data']['data']['vm']['on'],'#','']value_dict['VMs_Total_Counts']=[value_json['data']['data']['vm']['cnt'],'#','']value_dict['Physical_Servers_Online_Counts']=[value_json['data']['data']['host']['online'],'#','']value_dict['Physical_Servers_Offline_Counts']=[value_json['data']['data']['host']['offline'],'#',3,-1,0,-1,1]value_dict['Network_Total_Send_Speed']=[round(int(value_json['data']['data']['net']['send'])*8/1024/1024,2),'Mbps','']value_dict['Network_Total_Receive_Speed']=[round(int(value_json['data']['data']['net']['receive'])*8/1024/1024,2),'Mbps','']except Exception as err:raise errelse:return value_dict本示例可以獲取到當(dāng)前集群的CPU、內(nèi)存等各種性能監(jiān)控指標(biāo),并用于后續(xù)在PRTG和Zabbix上進(jìn)行展示。
4、獲取指定主機(jī)信息
GET /v1/vtp/host?vtp_id=3&host_id=xxx
簡(jiǎn)介
獲取指定VMP集群上的指定主機(jī)信息。
請(qǐng)求參數(shù)
| vtp_id | Path | Int | Y | VMP控制器 ID |
| host_id | Path | String | Y | 主機(jī)ID |
響應(yīng)參數(shù)
| host_ip | Body | String | Y | IP地址 |
| running_vms | Body | Int | Y | 運(yùn)行中的虛擬機(jī)數(shù)量 |
| cpu_ratio | Body | Int | Y | CPU使用率 |
| mem_ratio | Body | Int | Y | 內(nèi)存使用率 |
響應(yīng)示例
{"error_code": 0,"error_message": "","data": {"host_ip": "10.70.50.5","running_vms": 20,"cpu_ratio": 57,"mem_ratio": 44} }請(qǐng)求示例代碼
def get_server_info(deviceip,token,host_id):try:headers={'Content-Type':'application/json','Auth-Token':token}get_url='https://%s:11111/v1/vtp/host?vtp_id=1&host_id=%s'%(deviceip,host_id)request = requests.get(url=get_url,headers=headers,verify = False)value_text=request.textexcept Exception as err:raise errelse:return value_textdef sort_vmp_cluster_info(value_text):try:value_dict={}value_json=json.loads(value_text)value_dict['host_ip']=value_json['data']['host_ip']value_dict['CPU_Useage']=[float(value_json['data']['cpu_ratio']),'%',3,-1,70,-1,80]value_dict['Memory_Useage']=[float(value_json['data']['mem_ratio']),'%',3,-1,70,-1,80]value_dict['VMs_Running_Counts']=[value_json['data']['running_vms'],'#','']except Exception as err:raise errelse:return value_dict本示例可以獲取到單一物理機(jī)的性能指標(biāo),并用于后續(xù)在PRTG和Zabbix上進(jìn)行展示。
三、代碼使用說明
作者已經(jīng)上傳了PRTG監(jiān)控系統(tǒng)可用的監(jiān)控腳本,Zabbix版本大佬們簡(jiǎn)單改一下輸出格式就可以了。
1、Github地址
本文全部代碼已經(jīng)上傳Github,地址如下:
Public_Share_Project/PRTG 自定義傳感器Customer Senser/深信服VDI監(jiān)控接口/
2、PRTG添加自定義傳感器
先將三個(gè)py腳本全部拷貝到PRTG探針傳感器的如下目錄
C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\python然后,在所有操作之前,我們首先添加一個(gè)新的設(shè)備,設(shè)備IP地址為VDC管理平臺(tái)的IP地址
添加設(shè)備的時(shí)候,配置Linux登錄憑據(jù),用戶名和密碼為VDC管理平臺(tái)的用戶名和密碼。
2.1、添加在線用戶監(jiān)控項(xiàng)
添加一個(gè)新的傳感器,傳感器類型為Python自定義腳本,選中下拉列表里剛才拷貝進(jìn)去的Sangfor_VDI_Oneline_Users.py腳本,同時(shí)勾選傳遞Linux憑據(jù)
稍等一會(huì)即可獲取到監(jiān)控?cái)?shù)據(jù)。
2.2、添加集群性能匯總監(jiān)控項(xiàng)
添加一個(gè)新的傳感器,傳感器類型為Python自定義腳本,選中下拉列表里剛才拷貝進(jìn)去的Sangfor_vmp_cluster_summary.py腳本,同時(shí)勾選傳遞Linux憑據(jù)
稍等一會(huì)即可獲取到監(jiān)控?cái)?shù)據(jù)。
2.3、添加單一物理機(jī)性能監(jiān)控項(xiàng)
添加一個(gè)新的傳感器,傳感器類型為Python自定義腳本,選中下拉列表里剛才拷貝進(jìn)去的Sangfor_vmp_host_info.py腳本,勾選傳遞Linux憑據(jù),同時(shí)攜帶一個(gè)自定義參數(shù)
{'host_id':'host-b4055d719a00'}這個(gè)host_id在登錄VMP管理頁(yè)面后,可以在查看物理機(jī)詳情的時(shí)候通過iSCSI的IQN發(fā)現(xiàn)和獲取。
稍等一會(huì)即可獲取到監(jiān)控?cái)?shù)據(jù)。
2.4、添加服務(wù)器帶外管理監(jiān)控項(xiàng)
關(guān)于帶外管理監(jiān)控項(xiàng),可以參考博主之前的另一篇文章。
【逗老師帶你學(xué)IT】PRTG獲取HUAWEI FusionServer iBMC傳感器狀態(tài)
深信服一般OEM浪潮的服務(wù)器,都是標(biāo)準(zhǔn)的IPMI接口,本文需要用到的浪潮IPMI監(jiān)控腳本也已經(jīng)上傳到github,按照之前這篇文章的方式添加傳感器就可以了。
3、PRTG運(yùn)行Python腳本的傳參
剛才細(xì)心的讀者可能發(fā)現(xiàn),我們?cè)趧?chuàng)建設(shè)備的時(shí)候填入了一個(gè)linux憑據(jù),并且勾選了將linux憑據(jù)傳遞給python腳本。那么這兩個(gè)字段的數(shù)據(jù)在腳本中是如何獲取的呢。
我們來看一下python腳本的前幾行,這里通過linuxloginusername字段獲取linux憑據(jù)的登錄名,通過linuxloginpassword字段獲取linux登錄憑據(jù)的密碼。
data = json.loads(sys.argv[1]) deviceip = data['host'] name=data['linuxloginusername'] password=data['linuxloginpassword']除了這兩個(gè)字段,PRTG在運(yùn)行Python腳本的時(shí)候還會(huì)傳遞更多的參數(shù)。所有參數(shù)以json結(jié)構(gòu)體的形式傳遞給Python腳本。
以下是筆者抓到的PRTG給Python腳本傳遞的參數(shù)示例。各位同學(xué)在今后編寫自定義腳本的時(shí)候。可以靈活的使用這些系統(tǒng)傳遞參數(shù)。
搞定!
往期回顧:
【逗老師帶你學(xué)IT】PRTG監(jiān)控通過Python通過串口監(jiān)控UPS運(yùn)行狀態(tài)
【逗老師帶你學(xué)IT】PRTG監(jiān)控通過Python+Modbus RTU獲取溫濕度傳感器數(shù)據(jù)
【逗老師帶你學(xué)IT】PRTG監(jiān)控通過Python+Modbus TCP獲取溫濕度傳感器數(shù)據(jù)
【逗老師帶你學(xué)IT】職場(chǎng)數(shù)據(jù)中心異地出口容災(zāi),H3C的IP上一跳保持技術(shù)
【逗老師帶你學(xué)IT】阿里云監(jiān)控報(bào)警回調(diào)+轉(zhuǎn)發(fā)企業(yè)微信+轉(zhuǎn)發(fā)SnmpTrap+PRTG
【逗老師帶你學(xué)IT】HUAWEI華為防火墻自動(dòng)化運(yùn)維Python ssh管理網(wǎng)絡(luò)設(shè)備
【逗老師帶你學(xué)IT】PRTG獲取HUAWEI FusionServer iBMC傳感器狀態(tài)
【逗老師帶你學(xué)IT】PRTG自定義腳本ssh登錄網(wǎng)絡(luò)設(shè)備獲負(fù)載均衡鏈路狀態(tài)
【逗老師帶你學(xué)IT】Django+IIS+Python構(gòu)建微軟AD域控API管理中心
【逗老師帶你學(xué)IT】通過企業(yè)微信推送AD域密碼即將到期提醒
【逗老師帶你學(xué)IT】AD域控 Dsquery 查詢命令實(shí)例匯總
【逗老師帶你學(xué)IT】Google Admin服務(wù)賬號(hào)+API管理G suit內(nèi)所有網(wǎng)域用戶
【逗老師帶你學(xué)IT】PRTG監(jiān)控系統(tǒng)通過企業(yè)微信推送圖文混排告警消息
【逗老師帶你學(xué)IT】PRTG HTTP API獲取指定傳感器流量圖表圖片
【逗老師帶你學(xué)IT】PRTG監(jiān)控系統(tǒng)合并多個(gè)傳感器通道數(shù)據(jù)
【逗老師帶你學(xué)IT】PRTG監(jiān)控系統(tǒng)通過企業(yè)微信推送告警消息
【逗老師帶你學(xué)IT】PRTG監(jiān)控系統(tǒng)配合樹莓派采集企業(yè)內(nèi)部無線網(wǎng)絡(luò)質(zhì)量
【逗老師帶你學(xué)IT】vMware ESXi 6.7合并第三方硬件驅(qū)動(dòng)
【逗老師帶你學(xué)IT】Kiwi Syslog Server安裝和配置教程
【逗老師帶你學(xué)IT】Kiwi Syslog Web Access與Active Directory集成認(rèn)證
【逗老師帶你學(xué)IT】vMware ESXi 6.7合并第三方硬件驅(qū)動(dòng)
【逗老師帶你學(xué)IT】Windows Server Network Policy Service(NPS)記賬與審計(jì)
【逗老師帶你學(xué)IT】Windows Server NPS服務(wù)構(gòu)建基于AD域控的radius認(rèn)證
【逗老師帶你學(xué)IT】AD域控和freeradius集成認(rèn)證環(huán)境,PAP,MSCHAPV2
【逗老師帶你學(xué)IT】深信服SSL遠(yuǎn)程接入與深信服行為審計(jì)同步登陸用戶信息
總結(jié)
以上是生活随笔為你收集整理的【逗老师带你学IT】PRTG、Zabbix通过API监控深信服VDC和VMP云桌面运行状态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小程序demo】带你玩转支付宝小程序之
- 下一篇: KMP 算法 学习 整理