侯闊 楊曉濤 趙鑫 楊佳琦 王昊 李亞明




摘要:文章針對現在企業(yè)網絡的運維存在的問題,基于Python設計了三種方法實現了企業(yè)網絡設備的自動化運維。同時,在運維過程中提取大量有價值的設備日志數據,為以后的智能運維云平臺設計提供了數據基礎。
關鍵詞:Python;企業(yè)網;網絡自動化運維
中圖分類號:TP393? ? ?文獻標識碼:A
文章編號:1009-3044(2022)34-0071-03
1 問題描述
目前企業(yè)網絡的現狀是,企業(yè)信息系統(tǒng)中的網絡設備廠商繁多,大多數設備已經過了維保期。建設時間太長,原始資料丟失等原因為目前企業(yè)的信息系統(tǒng)維護工作增加了難度[1]。傳統(tǒng)的信息系統(tǒng)運維方式需要運維人員進行大量重復的運維工作,以手工形式管理硬件、軟件資源[2]。流程較長,消耗成本較高,且容易出現各種人為失誤。同時,人工巡檢難以及時、準確地發(fā)現網絡中潛在安全隱患[3]。運營商和大型IDC機房配備完整的監(jiān)控系統(tǒng),但是需要消耗大量的人力物力,中小型企業(yè)幾乎沒有配備獨立的監(jiān)控大廳和充足的維護人員,又因缺乏一個有效的監(jiān)控手段[4],信息系統(tǒng)的隱患不能提前被發(fā)現,業(yè)務中斷后也不能及時修復。所以企業(yè)迫切地需要一種輕型便捷的運維方式。
當前,國內的網絡自動化運維發(fā)展尚處于初級階段。運用Python或其他編程語言,設計一種基于命令的網絡設備自動化運維工具,還沒有做出一款包含前后端的運維云平臺[5]。國外有一些基于Web界面的網絡監(jiān)控系統(tǒng),還沒有推出App的版本,對設備做巡檢的數據也沒有做進一步挖掘分析,沒有將深度學習模型,智能算法與網絡自動化運維相結合,實現網絡運維的智能化[6]。想要開發(fā)出一款網絡自動化運維軟件,第一步就要能夠實現在設備中自動提取中有價值的數據,后期可以基于數據挖掘開發(fā)出智能監(jiān)控云平臺。針對此問題,本文對網絡自動化運維進行設計,可以實現網絡設備自動化配置、網絡設備的狀態(tài)實時監(jiān)控、自動化提取網絡日志數據。
2 Python腳本編程設計
2.1 自動化配置設備代碼設計
網絡維護人員通常都是在凌晨0點至6點對網絡進行割接升級操作,會極大地影響維護人員的工作狀態(tài)和身體健康。可以提前寫好設備的配置命令,并通過測試和雙人審核,然后通過編寫Python代碼,設置任務計劃,能夠實現定時地自動遠程登錄設備,并進行設備的配置。代碼如下:
import paramiko? ?#加載模塊
import time? ?#加載模塊
username='gfq'? ? #用戶
password='gfq123'? #密碼
ip = '192.168.20.3'? #地址
def ensp(command, ssh=None):# 創(chuàng)建SSH對象
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 連接服務器
ssh.connect(hostname=ip,port=22,username=username,password=password)# 執(zhí)行命令
print("進入網絡設備",ip)
command=ssh.invoke_shell()# 激活terminal
command.send("sys\n")
command.send("dhcp enable\n")
command.send("dhcpv6 pool pooll\n")
command.send("address prefix 3000::/64\n")
command.send("excluded-address 3000::1\n")
command.send("dns-server 4000::1\n")
command.send("dns-domain-name huawie.com\n")
command.send("int g0/0/1\n")
command.send("ip add 192.168.30.5 24\n")
command.send("ipv6 enable\n")
command.send("ipv6 address 3000::1/64 \n")
command.send("dhcpv6 server pooll\n")
time.sleep(20) # 如果程序執(zhí)行得太快,沒有等到返回足夠的信息,chan.recv(65535)不能得到想要的結果
outpit = command.recv(65535)
print(outpit.decode().strip())
ssh.close()
if __name__ =='__main__':
ensp("dis cu")
2.2 設備狀態(tài)監(jiān)測設計
目前的企業(yè)網故障處理流程是一種倒序的流程,當企業(yè)員工發(fā)現網絡出了問題反饋到網絡管理員,網絡管理員才去排除網絡故障,而且網絡管理員不能精準地定位發(fā)生故障的時間,為處理故障帶來很大的麻煩。通過編寫Python代碼,對所有網絡設備進行循環(huán)ping測試,可以實時全年無休地對設備進行檢測,監(jiān)測設備是否因故障離網。代碼如下:
#導入pythoning的模塊
from pythonping import ping
#導入datetime模塊來保存檢查的日期
from datetime import datetime
import os,sys
while 1:
#獲取當前的日期和具體時間
now = datetime.now()
date = "%s-%s-%s" % (now.year, now.month, now.day)
time = "%s-%s-%s" % (now.hour, now.minute, now.second)
#打開存放交換機IP地址的文件
ip_list = open("ip_list.txt", "r")
#使用追加讀寫的方式創(chuàng)建一個以日期命名的文件,方便每日檢查
f = open("ping_result.txt", "a+")
#在文件中首先寫入檢查的具體時間
f.write("Time: " + "\n"+date +"\n"+ time + "\n")
#通過for循環(huán)遍歷每臺設備的IP地址
for line in ip_list:
ip = ip = line.strip()
ping_result = ping(ip)
#pythonping如果能夠ping通,返回值內有Reply這個字符串,失敗時則沒有。可以通過這個不同來打印出最后的結果
if "Reply" in str(ping_result):
print(ip + " is reachable.")
f.write(ip + " is? reachable." + "\n")
else:
print(ip + " is not reachable.")
# 將能夠通信的IP地址寫入文檔中
f.write(ip + " is not reachable."+ "\n")
ip_list.close()
f.close()
2.3 自動化提取設備日志數據設計
想開發(fā)一個智能化的網絡自動化運維平臺,數據是必不可少的。平臺通過對數據的閾值設置而發(fā)生報警,平臺也可以基于網絡設備的歷史數據對系統(tǒng)的健康度做出一個預測,有了設備日志數據,還可以對設備做巡檢的數據做進一步挖掘分析,將深度學習模型,智能算法與網絡自動化運維相結合,實現網絡運維的智能化。自動化提取設備日志代碼如下:
import telnetlib
import time
import os
from datetime import datetime
host = "10.10.0.39"
username = "hktest"
password = "hk@123456"
command1 = "display temperature all"
command2="display cpu-usage"
command3="display memory-usage"
command4="display interface brief"
command5="display transceiver verbose"
now = datetime.now()? # 獲得當前時間
timestr = now.strftime("%Y_%m_%d_%H_%M_%S")
print('年_月_日_時_分_秒:', timestr)
dir = 'E:/shuju/data' + '/' + timestr? # os.getcwd()獲得當前執(zhí)行目錄
if os.path.exists(dir):? # 看文件夾是否存在
print('文件夾已存在')
else:? # 如果不存在
os.makedirs(dir)? # 則創(chuàng)建文件夾
tn = telnetlib.Telnet(host)
tn.read_until(b'username:',timeout=8)
tn.write(username.encode('ascii')+b"\n")
tn.read_until(b"password:",timeout=8)
tn.write(password.encode('ascii')+b"\n")
time.sleep(2)
tn.write(command1.encode('ascii')+b"\n")
time.sleep(5)
v_result = tn.read_very_eager().decode('ascii')
file=open(dir+'\\temperature.txt',mode='w')
file.write(v_result)
print(v_result)
tn.write(command2.encode('ascii')+b"\n")
time.sleep(5)
v_result2 = tn.read_very_eager().decode('ascii')
file=open(dir+'\\cpu-usage.txt',mode='w')
file.write(v_result2)
print(v_result2)
tn.write(command3.encode('ascii')+b"\n")
time.sleep(5)
v_result3 = tn.read_very_eager().decode('ascii')
file=open(dir+'\\memory-usage.txt',mode='w')
file.write(v_result3)
print(v_result3)
tn.write(command4.encode('ascii')+b"\n")
time.sleep(5)
v_result4 = tn.read_very_eager().decode('ascii')
file=open(dir+'\\interface brief.txt',mode='w')
file.write(v_result4)
print(v_result4)
tn.write(command5.encode('ascii')+b"\n")
time.sleep(5)
v_result5 = tn.read_very_eager().decode('gbk')
file=open(dir+'\\transceiver verbose.txt',mode='w')
file.write(v_result5)
print(v_result5)
配合計算機的任務計劃,實現每隔五分鐘運行代碼一次,持續(xù)不斷的提取設備數據,任務計劃設置如圖1所示:
3 運行實例
3.1 實現自動化配置
通過運行上述自動化配置設備代碼,可以實現自動遠程登錄到設備上,并且自動配置提前寫好的配置腳本,結果如下:
3.2 實現實時監(jiān)控網絡設備狀態(tài)
通過運行上述監(jiān)測設備狀態(tài)代碼,可以實現對設備持續(xù)的ping測試并記錄測試結果,結果包含詳細的日期時間和設備狀態(tài),當有設備斷網時,能夠查詢歷史記錄,確定中斷時間。此數據還能夠為以后的運維平臺提供支持,一旦平臺檢測到設備斷網能第一時間發(fā)出告警,達到實時監(jiān)控設備的目的。結果如下:
Time:
2022-10-11
8-35-55
10.10.0.108 is? reachable.
10.10.0.109 is? reachable.
10.10.0.110 is? reachable.
10.10.0.111 is? reachable.
10.10.0.112 is? reachable.
10.10.0.113 is? reachable.
10.10.0.114 is? reachable.
10.10.0.115 is not reachable.
10.10.0.116 is? reachable.
10.10.0.117 is? reachable.
10.10.0.118 is not reachable.
10.10.0.119 is not reachable.
10.10.0.120 is not reachable.
10.10.0.121 is? reachable.
10.10.0.122 is? reachable.
3.3 實現自動化提取設備日志數據
通過運行上述自動化提取設備日志數據代碼和計算機任務計劃,可以實現每個五分鐘自動登錄到網絡設備并提取設備日志數據,包括設備的溫度、CPU使用率、端口物理狀態(tài)、端口協議狀態(tài)、端口入流量、端口出流量、端口入方向的誤碼率、端口出方向的誤碼率、端口收光功率、端口發(fā)光功率等有價值的數據。這些數據極大地方便了網絡管理員隨時查看設備狀態(tài)參數,而且為后期的運維平臺設計提供了數據基礎,通過對這些數據進行可視化展示,可以非常直觀地查看設備的狀態(tài),通過對這些數據進行閾值設置,可以實現故障的報警,還可以用算法對數據進行挖掘分析,對網絡的健康度做出預測,最終實現一個完整的監(jiān)控系統(tǒng)。提取的設備數據如下所示:
4 結束語
本文基于Python設計了三種企業(yè)網絡設備自動化運維方案,最終目標是保證中小型企業(yè)的信息系統(tǒng)能夠穩(wěn)定地運行,業(yè)務零中斷。第一種可以實現定時地對設備進行配置,該方法可以大量地解放生產力,網絡管理員只需提前寫好設備配置命令并測試審核,即可以實現在凌晨對設備自動地割接升級工作。第二種可以實時自動監(jiān)測網絡內的所有設備狀態(tài),并數據詳細地記錄報告,包含日期時間和設備的在網狀態(tài)信息,一旦設備發(fā)生故障,可以立即查看離網時間,準確定位故障時間,為處理故障提供支持。第三種可以實現自動化提取大量的有價值的設備日志數據,在后期研究中,通過對這些大數據進行清洗和挖掘,配合著智能算法和數據可視化技術,可以為企業(yè)做出一款可以自動化運維的云平臺。平臺可以自動采集信息設備數據,當信息系統(tǒng)指標超過閾值時發(fā)出預警。并且對數據進行分析,可以對信息系統(tǒng)的健康程度做出預測。該領域是當前運維技術發(fā)展的主要方向之一,也是中小企業(yè)的迫切需求之一。在實際的運維管理中能起到非常重要的作用,具有很高的社會效益和經濟效益。
參考文獻:
[1] 楊自興,李志民,李子乾,等.電網信息系統(tǒng)運維管理自動化探索與研究[J].信息通信,2020,33(12):192-194.
[2] 林亮滾.自動化運維監(jiān)測系統(tǒng)的應用研究[J].工程建設與設計,2020(22):247-248.
[3] 金光濤,豐德偉,馬小亮,等.數據中心自動化運維設計與應用[J].信息技術與信息化,2020(11):68-71.
[4] 謝春.配網自動化成套設備運維中的問題分析及解決對策[J].湖北農機化,2020(18):149-150.
[5] 程崯.某電力公司IP網絡配置管理系統(tǒng)的設計與實現[D].成都:電子科技大學,2020.
[6] 何潔.攀枝花供電公司內網安全監(jiān)控平臺設計與實現[D].成都:電子科技大學,2021.
【通聯編輯:謝媛媛】