第54卷 第3期2021年3月
通信技术
Communications Technology
Vol.54 No.3
Mar. 2021
文献引用格式:李朝阳,周波,张小锋,等.一种基于Netmiko的网络设备自动化运维方法研究[J].通信技术,2021,54(3):773-778.
LI Zhaoyang,ZHOU Bo,ZHANG Xiaofeng,et al.A Network Equipment Automation Operation
and Maintenance Method based on Netmiko[J].Communications Technology,2021,54(3):
773-778.
doi:10.3969/j.issn.1002-0802.2021.03.038
一种基于Netmiko的网络设备自动化运维方法研究*
李朝阳,周 波,张小锋,陈 震
(中国西昌卫星发射中心,四川 西昌 615000)
摘 要:对当前信息中心网络运维工作中面临的困难和挑战进行深入分析,提出了一种基于Netmiko构建企业信息中心网络设备自动化运维系统的解决方法,设计了融合数据清洗、模板生成、命令执行及远程控制等关键功能于一体的网络设备自动化运维程序的体系结构。该设计结构清晰,流程合理,并在国产麒麟操作系统上基于Python3进行了编程实现,同时将程序部署于由500余台网络设备架构的实际生产环境中,完成了网络加固、系统升级、配置备份及QoS参数修改等大量重复性操作,取得了良好的应用效果。实践表明,所述方法稳妥可靠,可操作性强,具有良好的可扩展性和技术先进性。
关键词:自动化运维;网络设备;Netmiko;Telnetlib;Python
中图分类号:TP311.11 文献标识码:A 文章编号:1002-0802(2021)-03-0773-06
A Network Equipment Automation Operation and
Maintenance Method based on Netmiko
LI Zhaoyang, ZHOU Bo, ZHANG Xiaofeng, CHEN Zhen
(China Xichang Satellite Launch Center, Xichang Sichuan 615000, China)
Abstract: This paper provides an in-depth analysis of the difficulties and challenges faced in the current information center network operation and maintenance work, and proposes a solution to build an enterprise information center network equipment automated operation and maintenance system based on Netmiko. At the same time, it designs a network equipment automation operation and maintenance program architecture that integrates key functions such as data cleaning, template generation, command execution, and remote control. The design has a clear structure and reasonable process, and it is programmed based on Python3 on the domestic Kylin operating system. By deploying the program in an actual production environment composed of more than 500 network equipment, a large number of repetitive operations such as network reinforcement, system upgrade, configuration backup and QoS parameter modification have been completed, and good application effects have been achieved. Practice indicates that the method described in this paper is reliable, feasible, and has good scalability and technological advancement.
Keywords: automation operation and maintenance; network equipment; Netmiko; Telnetlib; Python
* 收稿日期:2020-11-25;修回日期:2021-02-18 Received date:2020-11-25;Revised date:2021-02-18
通信技术
0 引 言
随着各种IT新技术的不断涌现,依靠手工执行命令管理软硬件资源的方法已经远不能满足一个信息中心的日常运维需求,且传统方法存在出错率高和人力资源成本高等缺陷。试想一个1 000台网络设备的架构中,按照传统人为操作更新设备配置,可能需要一个星期的多人合作。如果采用网络自动化进行多线程并行操作,将大大缩减运维对人力资源的依赖,进一步节约成本。可见,在今天的网络技术领域,如何能够满足大规模网络灵活高效且高质稳定运维的极致需求,是所有IT管理部门应该积极思考的问题。同时,网络基础设施建设和运维管理的标准化、自动化、数据可视化以及智能化必将成为大趋势。本文针对一个由千余台网络设备组成的企业生产网需要进行大量重复性配置需求的特定应用场景,提出了一种基于Python3开源库构建网络设备自动化运维系统的解决方法并加以编程实现,进而为进一步提升信息中心网络运维自动化水平提供技术基础和服务。
1 技术途径
1.1 设备远程控制协议
主流远程管理控制协议主要有:①远程桌面协议(Remote Desktop Protocol,RDP),应用于Windows系统远程桌面;②远程帧缓冲协议(Remote Frame Buffer Protocol,RFB),应用于图形化远程管理,如VNC工具基于RFB;③Telnet协议;
④SSH协议。本文重点讨论后两者的特点及区别。Telnet是命令行界面远程管理协议,简单易于实现,在进行数据传输时采用明文传输方式。安全外壳协议(Secure Shell,SSH)是另外一种命令行界面远程管理协议,在进行数据传输时会对数据进行加密及压缩。相比较而言,SSH更加安全,速度也更快,且代替Telnet仅是SSH的功能之一。
1.2 基于Telnetlib的设备远控技术
Telnetlib是Python的内建模块。鉴于Telnet存在安全隐患,不建议在生产网络中使用Telnetlib库。Python2和Python3中的Telnetlib在使用方式上略有区别。在Python2中,Telnetlib模块下所有函数返回值均为字符串,而在Python3环境下,所有函数参数及返回值为字节型字符串(Byte Strings)。因此,在Python3中使用Telnetlib需要关注:①字符串常量前需加b提示符;②变量后需借助encode进行ASCII编码;③对于read_all函数返回结果需借助decode进行ASCII解码。
1.3 基于Netmiko的设备远控技术
Python中支持SSH协议实现远程连接设备的模块主要有Paramiko和Netmiko,前者是后者开发的基础。Paramiko是Python中的一个非常著名的开源SSHV2项目,于2013年发布,同时支持SSH 服务端和客户端。Netmiko[1]是另一个SSHV2开源项目,于2014年底发布。Netmiko基于Paramiko开发,但其支持更多厂商设备,更加方便易用,简化了回显结果获取,简化了设备的配置命令[2]。目前,它支持包括Cisco、HP proCurve、Juniper Junos、Linux、Alcatel A0s6、Dell KS9以及huawei在内的多个厂商设备。1.4 基于Pandas的数据清洗处理技术
Pandas(Python Data Analysis Library)是基于Numpy的一个工具集,专为解决数据分析任务而创建。Pandas纳入了大量库和一些标准数据模型,为大型数据集提供高效的操作工具。同时,Pandas是Python的一个数据分析包,最初被作为金融数据分析工具而研发,在时间序列数据分析方面表现卓越。Pandas的主要组件是Series和Dataframe[3]。本文主要以Pandas为工具对各个单位提交上来的Excel数据进行清洗和处理,从中提炼出各类交换机加固命令参数。
1.5 基于loguru的日志处理方法
Python第三方日志库loguru相较于自带loging 库更加简洁、高效且灵活。Loguru日志输出格式信息丰富,包含时间、级别、模块名、行号及日志信息;loguru支持输出日志到多个文件,按级别输出;loguru会定时清理超大日志文件,以提高系统运行效率[4]。本文借助loguru模块主要实现两个功能:
①记录数据文件清洗处理过程中产生的各类日志;
②记录程序核心模块运行时产生的各类日志信息。
2 结构设计
本文针对较大规模企业网中的网络设备需要定期大量重复性配置的需求场景,基于Python开源库Netmiko设计如图1所示的体系结构图。该设计重点包括1个自动化操作流程和5个软件功能模块[5]两个方面。
第54卷第3期李朝阳,周 波,张小锋,陈 震:一种基于Netmiko的网络设备自动化运维方法研究
图1中的一个自动化操作通过编程方式实现对人工登录网络设备进行操作配置活动的计算机模拟,以求实现配置操作自动化目标的过程。该设计将一个自动化操作流程分为如图1所示的6个阶段。第1阶段,数据核对阶段,主要借助正则表达式对输入的Excel数据规范性和有效性进行核实检查;第2阶段,数据处理节点,主要依照实际任务需求完成对清洗、解析、参数提取及模板生成等工作;第3阶段,设备过滤阶段,主要完成对特殊设备的排查;第4阶段,登录方式修改阶段,基于安全因素及Netmiko高效应用的考量,通过Telnet方式将设备修改为SSH密码模式,如果已经为SSH方式则不做处理;第5阶段,登录方式验证阶段,为确保核心动作的有效执行,对SSH密码登录参数进行验证;第6阶段,配置运行阶段,主要完成对设备的自动化操作,从而实现运维效率的大幅提升。
①认真核对输入数据
Excel上报数据文件
②excel_file_operation
数据Clean
数据Parser
execl函数 linux配置模板生成
ExcelParserHandler
③filter_sw_ip_operation
基于Pythonping过滤switch SWIPFilterHandler ④SSH_Conf
⑤Login_Test
⑥User_Conf_Opers SSHLoginHandler CommandsHandler
记录日志文件配置网络设备数据解析处理模块设备地址过滤模块设备登录配置模块配置命令执行模块
各类设备配置模板LogRecordHandler
图1 程序结构设计示意
根据实际应用需求,该设计将最终编程实现的自动化运维程序功能分为数据解析处理模块、设备地址过滤模块、设备登录配置模块、日志信息记录模块和配置命令执行模块[7]。
对于数据解析处理模块ExcelParserHandler而言,主要基于Pandas完成对不同部门提交的网络设备配置参数的提取工作,为基于参数模板构造网络设备配置命令提供基础服务;对于设备地址过滤模块SWIPFilterHandler而言,主要基于Pythonping 实现,用于对不在线或者特殊设备的过滤;对于设备登录配置模块SSHLoginHandler而言,主要基于Telnetlib实现,将所有设备登录方式修改为SSH密码模式登录,一方面为Netmiko执行远程操控打下基础,另一方面也是出于对生产网络安全加固的考量;对于日志信息记录模块LogRecordHandler而言,主要基于loguru实现,完成对软件5个功能模块运行过程中产生的各类文本信息及异常情况进行记录,以备后续故障排查及结果验证所用;对于
通信技术
配置命令执行模块CommandsHandler而言,基于Netmiko实现,该模块是整个运维程序开发实现的重点和核心,完成对各类大量重复性配置命令和系统升级操作的自动化工作。
上述5个模块皆基于国产麒麟操作系统以Python3类的形式实现,在自动化操作流程的各个关键节点,通过对上述5个功能模块类的实例化而获得相应操作对象,从而执行相应操作完成相应的自动化功能。
3 编程实践
3.1 功能模块ExcelParserHandler实现
本文对如图1所示设计方法在国产麒麟操作系统上基于Python进行编程实践时,以网络设备运维自动化操作流程为主线,以框架搭建设计为基石,以模块动态加载来应对运维任务的多样性和不确定性,从而保持基于Netmiko的自动化运维程序的稳定性和良好可扩展性。限于篇幅,本文以ExcelParserHandler模块和CommandHandler为重心,阐述该自动化运维程序的编程实现细节。
功能模块ExcelParserHandler基于Pandas库实现,主要完成对不同部门提交的Excel文件进行数据清洗和数据解析,从而获得批量配置交换机所需的各类参数,在配置模板作用下批量生成交换机配置命令。
示例伪码如下:
class ExcelParserHandler(object):
#基于Excel文件的配置文件生成器
def __init__(self,m_fexcel_name):
#excel文件解析工具
self.fexcel_name=m_fexcel_name
def excel_parser(self):
#从Excel构造df对象
ad_excel(self.fexcel_name,sheet_ name=0,header=[0])
self.df=df[[“number”,”sw_ip”,”user_ ip”,”mac”,”port”]]
return  None
def get_commands_list(self):
#基于Excel文件构建命令集
ip_commands={}
sw_ip_list = self.df[“sw_ip”].tolist()
pass
for sw_ip,user_ip,mac in zip(sw_ip_list,user_ip_list,mac_list):
#基于模板构造交换机命令集
pass
if sw_ip in ip_commands.keys():
#key已经存在
ip_commands[sw_ip]=\
ip_commands[sw_ip]+[exec_commands]
if sw_ip not in ip_commands.keys():
#key第一次添加
ip_commands[sw_ip]=[exec_commands]
return ip_commands
def get_switch_list(self):
#获取交换机的列表
self.s_sw=self.df[“sw_ip”]
self.s_sw=self.s_sw.drop_duplicates()
return  self.list()
3.2 核心模块CommandHandler实现
核心模块CommandHandler基于Netmiko以Python3 类的方式实现,具体细节如伪码所示,主要完成以SSH方式实现对大规模网络设备配置操作和系统升级的自动化运行。在实际应用实践中,应将该类的实例化置于线程中,从而实现对千余台网络设备配置管理的并行运行,在提高效率的同时,确保程序运行的稳定性和健壮性。鉴于篇幅所限,本文仅给出关键步骤的伪码表示。
class SwitchCfgCoreHandler(object):
#自动配置交换机核心部件
def__init__(self,m_sw_ip,m_logfile,m_ commands):
self.sw_ip=m_sw_ip
self.logfile=m_logfile
selfmands=m_commands
def config_huawei_switch(self):
#在华为交换机上执行配置操作
sw_huawei={
‘device_type’:’huawei’,
‘ip’:self.sw_ip,
‘username’:’admin’,
‘password’:’admin’}
try:
conn_hw=\
ConnectHandler(**sw_huawei)
任务:网络加固任务:配置备份任务:系统升级任务:修改Qos
图3 运行日志记录

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。