最近看了劉天斯老師的機櫃展示平臺,非常絢麗,而且有大屏顯示的話也是能夠體現運維價值的,這裏就說下我最近在做的CMDB平臺的一些數據:
CMDB數據:
機房,機櫃,機櫃電源,機櫃位置,機房合同,合同到期時間,機房聯繫人。
服務器,CPU,硬盤,是否虛擬化,宿主機,raid類型,內存。
資產ID,上架日期,下架記錄,服務器代理商,代理商聯繫方式,服務器到保日期。
IP地址,MAC地址,業務線,產品線,操作系統。
通信這塊主要技術json-rpc,然後提供Api接口給程序調用,按照固定格式導入即可;硬件固定信息,如IP,MAC,硬盤等信息,通過自動採集的API POST方式加入到數據表。像機房信息,機櫃之類的可以給機房抄送一份excel表格然後直接導入即可。
機房服務器展示:通過把劉天斯老師機櫃暫時平臺的前端拿過來,然後結合到表結構裏面展示;在故障告警的時候,留有一個告警接口的API,通過zabbix 把告警數據發送到運維平臺;運維平臺入庫告警展示:下面是前端簡單展示效果,具體操作如下:
前端機櫃生成效果顯示:閃爍效果直接獲取廠商的gif文件調用即可,機櫃命名方式比如下面的:5-6,5-7就分別表示第五排第六,第七個機櫃:
上面是正常顯示,當出現故障時候:就結合zabbix 告警腳本,發送過去給接口,故障如下:
機房展示效果:
鼠標移動到機櫃就顯示服務器的相關信息:
zabbix 的告警腳本並且發送狀態到運維平臺,並且更改服務器狀態:
[root@controller alertscripts]# cat zabbix_alert.py #!/usr/bin/python #coding:utf-8 import requests,json import smtplib from email.mime.text import MIMEText import sys #郵箱服務器地址 mail_host = 'smtp.163.com' #郵箱用戶名 mail_user = '[email protected]' #郵箱密碼 mail_pass = 'xxxxxx123456' mail_postfix = '163.com' def send_mail(to_list,subject,content): me = mail_user+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content) msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False def alert(message): headers = {"Content-Type": "application/json"} data = {} res = {} data['status'] = message res['params']=data res['jsonrpc'] = "2.0" res["id"] = 1 res["method"]= "alert.turn" url = "http://192.168.63.216:2000/api" r = requests.post(url, headers=headers,json=res) if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3]) alert(sys.argv[2])
後端返回狀態改變之後直接入庫修改,我這邊只是判斷是否主題是PROBLEM或者OK:
前端代碼可以按照劉天斯老師的然後自己修改成jquery即可,前端可以去自由發揮,如下簡單樣例:
<table border="0" cellpadding="1" cellspacing="0" height="440" width="99%"> <tbody><tr> <td class="jgtable" align="center" height="30" valign="bottom"><font class="jgtitle">01</font></td></tr> <td class="jgtable" align="center" height="30" valign="bottom"> </td> </tr> <tr> <td class="jgtable" align="center" height="30" valign="bottom"> </td> </tr> <tr> <td class="jgtable" align="center" height="30" valign="bottom"> </td> </tr> <tr> <td class="jgtable" align="center" height="30" valign="bottom"> </td> </tr> <tr> <td class="jgtable" align="center" height="30" valign="bottom"> </td> </tr> </tbody></table>