本文从一名网工从业者的角度出发,探讨了在企业网运维过程当中,网络工程师能够用什么样的工具让网络更加透明高效。python
上篇文章回顾:Apache Ranger——Hadoop ACL控制工具编程
“网络就像wifi,没有故障的时候,就没有人意识到它的存在”,这句话有无数的翻版,可是对于网络工程师来讲这就是现身说法。因为网络工程师的人数即使是在上千人的公司,也仅仅是个位数,因此他们的工做也不为人知 。“网络是否是有问题?”这句话几乎成了全部SRE排错时的口头禅,若是这个时候网络工程师表示沉默,或者没法拿出足够的证据,那背锅几乎是无疑的,如何让网络环境的运行状态更加透明,如何在每次业务故障的时候自证清白,这不只是基础服务团队要关心的内容,更是整个技术团队想要了解的黑匣子。 安全
对于SRE来讲须要监控程序是否正常,对于主机组来讲须要监控服务器硬件是否正常,对于网络来讲咱们首先须要关心网络设备是否可达。当一台TOR不可达时,基本上预示着会有一片服务器不可达,业务的痛感是至关强烈的。服务器
网络设备的监控最好和业务监控系统尽可能解藕,由于网络故障极有可能引起业务系统异常,若是恰巧致使的是业务的监控系统异常,那网络设备的告警将失去可靠性,“监控不许”且不说这个锅是谁的,这种局面会让网络工程师Trouble Shooting时陷入被动,延长了故障时间。网络
每个网工在走出校门的那一刻,都已经具有基本的编程基础, 何况交换机的数量和服务器的数量有着量级上的差异,因此若是你能看懂几句python,100+的python代码便可搞定一个简易的设备存活监控的程序,Github中可搜索 NodePingManage 就是一个很好的例子,还能够经过多点部署来消除单点故障。有了这类工具, 今后全网的各个角落的可达性终于明了, 漆黑的网络环境,彷佛反射出了一丝光明。 app
设备存活告警虽然能够预警不少异常,而且准确度很高,可是对于冗余性作的比较好的网络,能Ping通并不表明彻底没问题,此时,细心的网络工程师会去看日志,这里能够反映出更多细节。对于万台服务器规模,网络设备的数量也就千台,可是逐台查看日志,人肉判断是否有异常,那简直是场噩梦。运维
《日志告警》程序就成为网络工程师们居家旅行必备之良品,只须要一台Syslog服务器,部署一个日志监控程序,当发现日志中出现特殊关键字,触发邮件+短信告警便可。这么高大上的工具固然须要更多的编程技巧,150+ python代码才能搞定。Github中相似的解决方法有不少,搜索 LogScanWarning 便可获得一个示范案例。工具
今后你能够在业务无感的状况下,发现网络中的异常, 例如:风扇转速异常/电源模块故障/ospf邻居状态抖动/端口flapping/有黑客在爆破个人设备/设备硬件parity error/模块收发光异常/Kernel报错等等。优秀的网络工程师能够在故障发生时快速定位,牛X的网络工程师能够在故障发生前就消除隐患,防范于未然。oop
高速公路铺的再好,也架不住车多人多。确保网络顺畅,品质优良,没有丢包,延时稳定也是网络工程师的职责 ,此时流量监控就成了刚需。业务的飞速发展体如今网络层面就是DC内流量上涨/DCI流量上涨/IDC出口流量上涨/专线流量上涨,流量监控能够准确掌握业务的高峰和低谷,当线路须要扩容时,带宽使用率是老板参考的重要数据。通常状况下线路中的流量超过50%便可发起扩容,由于这意味着当备份链路down以后,主线路将出现拥塞。3d
接口的Error包监控和流量监控同样,都可以经过snmp采集,OID:ifOutErrors,ifInErrors , Error包出现增量会直接影响业务的服务质量,一旦发现须要优先处理,不然业务会拎着一堆TcpTimeOut指标找上门来。固然,能够经过snmp采集的信息还有不少,例如:设备的CPU/内存/温度/防火墙的Session等,掌握这些信息对了解设备的工做环境也很有益处,若是你要作一个自动化巡检工具,那么这些指标必不可少。市面上提供网络监控的软件有不少,例如:Falcon/Zabbix/Solarwinds/Cacti/Nigos 等,有开源的也有收费的,功能相似,此处不加赘述。
第一章中的组合拳打完以后,基本上不会出现“意料以外的故障”,全部的异常都应该有据可查,当SRE莫名其妙提出对网络环境的质疑时,你应该早已心中有谱。可是网络工程师的工做并不是只有救火,平常运维工做中,常常须要配合业务发展作一些线上变动/ 机房扩建/业务类故障排查等。做为一名“懒惰”的网络工程师,程序能够帮忙点什么忙呢?
这个名词借用于Solarwinds套装中的一个组件,直译为“用户设备追踪器” , 在中小型企业网运维中,常常会有这样的需求:
知道服务器的IP,请问链接在交换机的哪一个口?
知道交换机的某个端口,请问链接的服务器的IP是多少?
给你一台服务器的MAC地址,怎么知道在哪一个交换机的哪一个口?
大型互联网公司通常会有CMDB或者网络管理平台来记录这些信息, 可是若是你是一家中小型企业的网管,没有运维研发团队作支持,而且还在沿用二层的环境(服务器网关在核心设备),那就比较费劲了。以上几个问题其实归根究竟是要捋清楚三个要素的对应关系: PORT<>MAC<>IP
举个例子:
一台交换机有多个物理接口,一个物理接口下能够有多个MAC,一个MAC能够对应多个IP,或者不对应任何IP。 有了这个基本的模型,只须要作两件事情便可找到全网设备这三元素的对应关系。首先去服务器直连的交换机获取MAC表(即MAC<->PORT), 而后再去服务器的网关设备获取ARP表(即IP<->MAC),这两张表根据MAC地址做为惟一主键便可获得 PORT <->MAC<->IP 的对应关系。 信息的获取能够经过模拟登录或者OID采集都可,Github中也有不少相似的代码可供参考,有了这个对应关系,即使没有CMDB,你依然能够快速定位想要的信息, 普通网工查找这个信息须要5分钟, 而你只须要5秒钟。
平常网络运维工做中,常常会有一些 “简单重复劳动”,例如:为某个接口划分Vlan/给某台设备添加一条指向主机的路由等, 这些操做即没有科技含量,还占用了工程师宝贵的时间,更要命的是再简单的人肉操做,重复的次数只要足够多,总有失误的时候,正所谓“常在河边走,哪有不湿鞋”,可是在这种问题上犯错误简直是对职业生涯的抹黑,如此“鸡肋”的工做怎么才能干的漂亮?
以《自动划分交换机接口Vlan》的功能为例, 若是有一个工具只须要你提供三个参数:设备IP/端口/vlan编号, 就能自动登录设备把特定接口划分到指定Vlan,那岂不是美哉。没错!你须要的是一个对设备封装后的接口, 如今多数网络设备厂商都会提供本身的API,不管是NETCONF仍是RESTful,只要读懂了使用手册,便可经过程序轻松变动设备的配置,甚至你能够用更加”接地气”的方法,用程序“模拟登录”设备 ,虽然这个方法在效率上比不过NETCONF和RESTful API,可是在通用性上那简直无敌,由于没有哪一个厂商的设备不支持SSH或者TELNET的。
有了这个理论基础,一些简单的网络上的操做就能够经过本身封装的接口来实现变动,甚至能够把变动的权限交给业务,只要业务提交的请求是合法的,变动可当即上线生效。此时,确定会有人大惊失色!把网络设备的权限交给业务,这样真的好么?万一改坏了怎么办…全部的疑惑都是正常的,同时也都是有解的。还以《自动划分交换机接口Vlan》举例子,你能够限制程序执行的内容,你能够规定交换机只能是TOR不能是CSW,你能够约束接口只能是Access不能是Trunk,你能够限定被操做的接口下流量必须为0bps,以免误操做影响到业务,你能够经过动态Token保证接口的安全,你能够要求必须提供接口下现存的MAC以定位接口的位置,你还能够对调用者加白名单,另外,操做成功后还须要有短信+邮件反馈操做后的结果,等等…
全部的考量均可以固化为代码规则,只有程序是最忠实的执行者。接口能够提供7*24 小时整年无休的服务,而人的精力是有限的,用程序去应对业务那些简单有规律的需求,节省出工程师宝贵的时间来思考人生,这才是网络工程师自动化运维之路的正道。
以上,是笔者结合自身工做经历总结的一些心法,写代码对于网络工程师来讲确实有些难度,可是只要跨过这道坎,你会获得更多富裕的时间来扩展本身的专业道路,谨以此文,但愿能抛砖引玉为自动化网络运维尽绵薄之力。
本文首发于公众号”小米运维“,点击查看原文。