Smartnet 网络运维

「举一反三」

「继开源工具分享之后,本章系列文章将带来团队初尝自研的一些故事和技术分享、几个python模块、几个自动化空白工作领域等....」

1、作者介绍

张智慧,来自“码蚁”团队(南方基地移动云运维团队),负责移动云网络运维、运维工具研发、运维场景开发。

2、前言

看过上一篇介绍forward的文章得人不知还是否记得一张图,移动云网络设备在逐年增加,而网络运维的人数一直是4人。在移动云四期上线后,南北基节点网络设备已超过700台,这700台设备分别属于15种不同的厂商的37种型号。移动云五期即将上线,上线后设备种类和设备数量还将持续增长,但是维护人员的人数一直是4个。海量的设备给网络运维工作带来了极大的挑战。Forward的产生给网络运维工作带来了希望,让网络运维自动化成为了可能。

3、网络的自动化探索

Forward产生后,传统网络运维人员开始自动化运维的探索。日常工作中重复性高的、沟通成本大的工作成为了第一批自动化开发的重点。一段时间后,第一批自动化运维脚本产生了,这些脚本覆盖了日常运维的巡检、故障排查、信息查询的多个场景,并且也达到了预期的效果。同时,在脚本越积越多的工程中也发现了一些无法避免的问题

调用forward时需要写入设备的IP、用户名、密码、设备型号等信息。这些信息暴露在脚本中有一定的风险

脚本的格式千差万别、调用关系较为混乱

基于以上两点,网络组决定基于forward研发一个适用于移动云网络自动化运维的工具。

4、什么是Smartnet

Smartnet是移动云运维团队在长期的运维过程中研发的适用于移动云的自动化工具,它简单理解为是适用于移动云网络运维的网络设备类库的集合,类中根据设备角色的不同,提供了适用于移动云的网络设备查询及配置的不同方法。场景脚本只需要调用smartnet类库中的方法即可自动返回结果。同时,为了让非网络运维的人员也可以使用smartent,还对smartnet进行了指令封装。目前smartnet已使用于故障处理、巡检、查询、配置等多个场景,节省了不少的运维工作量。

5、Smartnet的功能

Smartnet位于forward(forward是移动云研发团队研发的位于更底层的网络自动化工具)的结构之上,smartnet主要做了以下3个事情。

smartnet将网络设备的信息进行统一管理,场景脚本只需要调用smartnet的数据库即可对设备进行登陆

smartnet把移动云常用的查询以及配置的场景进行封装,主程序只需要调用对应的函数即可,无需对于函数进行编写

smartnet还支持指令方式运行,例如:smartne “192.168.1.1” “ showUptime”,无需登陆设备即可获取到192.168.1.1这台设备的启动时间

6、Smartnet和Forward的关系

forward是一个python模块,提供与目标设备之间的通道封装,基于指令行(Command Lines)的方式实现多数功能的封装,供开发者快速简便调用,屏蔽不同设备上指令差异。

下面介绍一下用户场景脚本、smartnet、forward之间的调用关系为:

用户场景脚本中指定设备IP,之后调用该IP对应的smartnet原子函数

Smartnet调用forward对设备进行登录

Forward对指令进行执行并返回原始结果给smartnet

Smartnet对原始结果进行查找匹配,返回结果

Smartnet将原子函数的结果返回给用户场景脚本

用户场景脚本将多个原子函数的结果进行逻辑判断、整合后,将最终的结果进行输出

7、Smartnet类库

Smartnet目前已经封装了23种设备类型超过300个原子函数,原子函数包含常用的查询类和配置类的函数,目前smartnet正在逐步丰富。例如下图为移动云9312的类库,包含查询类的方法:查看vlan的描述、查看设备的NTP状态、查看IP所属的vlan等;配置类:创建vlan、在端口下放通vlan等。下方图片所列仅为目前所开发的部分函数,Smartnet的目标是原子函数覆盖运维的全部场景

8、Smartnet调用方式

上面的类库是如何被调用的呢?目前Smartnet提供了两种方式对底层的方法进行调用(详情可参考下图)

方式一:通过脚本方式调用——在脚本中通过实例化调用smartnet的原子函数;

方式二:通过命令行方式进行调用——直接在部署了forward和smartnet的主机上通过命令行的方式进行调用。

9、Smartnet的作用

由于smartnet对常用的运维场景进行封装,使得同一场景函数无需被重复编写,因此使得:

代码量大幅减少,代码的利用率进一步提高

随着smartnet底层类库的逐渐丰富,对于编写自动化脚本的运维人员来说,由于无需编写底层原子函数,只需关注脚本本身的逻辑,入门的难度也进一步降低,加快了网络的自动化的进程。

10、Smartnet场景举例

场景一:客户反馈网络有问题,访问延迟较大、网络不通等

传统网络运维排查方式——维护人员需要在客户流量所经历的所有网络节点上进行逐一排查(保守估计每天发生3次,每次10分钟,共30分钟),排查工作重复性高,且技术含量较低

自动化方式——按照此类故障的排查方式,将排查思路固化在脚本中。直接输入客户云主机的公网IP,运行脚本后即可输出客户在每个节点的网络情况

场景二:实时查看设备端口状态

传统网络——这个场景对于二线运维人员来说没有难度,但是对于一线和系统负责人来说,网络设备的配置信息及状态信息对他们不可见,他们无法实时获取网络设备的状态、配置等信息,需要网络运维人员手动查询后告知,查询个工作量较小但沟通工作量巨大。

自动化方式——使用自动化后,任何人只要调用smartnet的原子函数即可对设备的物理状态等信息进行查询。

场景三:同事A请求为新建的虚机开通网络,如果人工开通的话通常情况下分为以下三步

首先为虚机分配资源,包括vlan、IP等资源

在核心交换机进行配置,配置vlan、网关、在端口放通vlan等

在接入交换机进行配置,配置vlan、在上行和下行端口放通vlan

整个过程加上资源以及配置方案的审批流程,保守估计至少也得半天..............

如果使用脚本方式开通,那就不一样了,只需要在脚本中输入虚机的相关信息即可一键开通。

11、网络自动化的展望:

目前Smartnet的类库仍有待完善,目标是原子函数覆盖场景脚本的95%以上,即场景脚本大部分无需进行底层函数的编写,直接调用底层原子函数即可。网络自动化方面,目前自动化已经覆盖移动云网络运维的多个场景,但仍有部分较为复杂的场景没有覆盖。希望通过进一步的自动化开发,使得自动化在日常运维中的占比越来越大。

目前smartnet已经应用于移动云网络运维的多个场景。Smartnet的出现给网络的自动化运维插上了翅膀,但也逐渐发现可以自动化的场景越来越多,未来网络运维的自动化将变成什么样,或者你对于网络自动化有什么好的见解,欢迎继续关注“火炉山蚁群”,并留言一起讨论~

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171221G0E05P00?refer=cp_1026

相关快讯

扫码关注云+社区