网络工程师的日常第一篇
结论在最前:本篇会简单讲讲我对网络运维中监控方式的理解和介绍。(不包括具体技术应用syslog,snmp,gRPC,ssh,console等等。本来想包括,结果光写监控的方式都写了这么一堆,太长了怕没人看(短了好像也没人))
值得纪念的第一篇技术相关文章。按照之前的想法,应该先提纲挈领的写一个网络运维的大图出来,再逐渐开始深入技术。但是现在想想,还是先整点实用的东西,同时再完善整体架构,让大家有的可看(好像开始有大家了)。
简单说说监控是什么
说到监控,大家都能理解,这是实现运营目标的最起点。题外话,我理解的运营目标就是满足客户的需求,分为两个方面,1. 对性能的要求。2. 对稳定性的要求(这点在后边的文章中肯定会再提)。而监控就能快速甚至提前发现性能不足的地方或者网络中断的情况,从而快速的扩容或修复。
监控的好坏评价标准就是发现问题的及时性,最好的监控就是在问题发生前就发现,及时修复或规避风险(就像地震预报)。预报之下,问题出现到发现的时间越短,证明监控功能越好。同时,现今平台化、流程化的监控是和问题处理恢复(又一个坑)紧密相连的,有时候他们的SLA是一起算的,即问题恢复SLA。但是,如果深入需要深入优化这个SLA,就需要将监控和问题处理两个阶段区分开来,分别分析处理。
那么,监控的不同方式又具有怎样的特性呢?
监控分类介绍(排名不分先后)
基于业务的监控
也就是自己不监控自己的设备,而是通过业务的是否正常来感知故障。这样的监控可说是最差的监控,就像自家的wifi上不了网了,才发现已经欠费停电了。但是这个也能算监控,为什么呢?因为有些时候,我们连业务是不是好的也不知道,或者业务有问题了也不会告诉我们,这种才是真的两眼一抹黑。维护了半天设备连是不是正常都不知道才是最悲哀的。
基于业务模型的监控
和上边只差两个字,但是效果却有天壤之别。这样的监控可说是最精确、最敏感的监控。它要求我们了解业务的模型、特点,进行有针对性的监控,甚至模拟业务流量进行主动探测监控。最简单的例子,如果我知道设备接口的入出流量比例或一天的流量趋势,就可以通过监控流量是否偏离日常而作出判断。
而很多‘网络工程师’,维护了很长时间网络,却只能在客户咨询时告诉人家ping是可以通的……这样搞下去,真的只能苦力活越干越多,最后因为厂商设备做的越来越稳定而被淘汰。因为现在的业务日新月异,而网络层则还在使用几十年前的RFC,只是一个简单的网络通已经不能满足监控的需要了。这也是为什么不同领域的公司也需要有相关经验的网工,比如运营商网络,IDC网络,金融网络等等(后边有时间讲讲不同类型网络的技术差异?)。
由于业务流量和实际网络的特性,这种监控确实可能在网络设备没有发现问题的情况下感知业务的异常,但是它却不能真的告诉我们这个故障导致发生在哪,除非网络的其他监控也能发现问题。所以基于业务模型的监控可以作为监控的最上层,但是其他监控也必不可少。
基于设备的监控
这个可以说是最传统的监控方式,我觉得在原理上,无论监控的是网络设备、服务器还是任何什么东西,原理都是相通的。通过某些节点提供的监控方式,了解设备的健康状态。比较简单的是监控单点设备的状态,前提是设备支持我们监控它,你要是让我去监控一辆夏利,那肯定是不行的,特斯拉还有可能。复杂一点的就是各个设备之间状态的关联监控,一个设备接口down了,可能是对端整机挂了,故障处理的时候如果判断错了,恢复动作可能就不准了。(想起了一个相声,说一个哥们手摸头也疼,摸胸也疼,摸屁股还疼,去看医生发现是手指折了)。
也是因为它的传统,围绕它的监控协议,平台工具则更是丰富多彩。本来想在这篇文章里边介绍一下,结果光写监控的方式都写了这么一堆,只好放到下一次再写了。
监控发展方向
说到发展方向,又得回到之前说的目标,简单来说就是尽早、尽准的发现问题。于是,我能想到的监控进化方向就有这几个。
系统化,平台化。这个就不用说了。任何东西一上量,一需要协调,都会走这条路。
基于业务模型的监控。这个上边也提了,通过业务类型整合监控数据或把一些监控上移挪到服务器上去,从而更及时的发现问题。(现在最多的好像是业务监控下移到网络上来,谁让做Linux开发维护的人比网络工程师多呢XD)
故障预测。这个也是之前说的,因为现在是个领域就说大数据,机器学习和AI,所以网络这边也不能免俗。如果能通过之前的特征,预测以后可能出现的问题,也是很NB的。但是本人却持怀疑态度。主要是必要性和可行性两方面。1. 必要性不足。因为现在网络中能看到的信息,和网络设备耦合性极强,如果出现则必然关联某些故障,根本不需要所谓预测,比如我看到设备内存持续增高,那就肯定有问题了,这谈不上预测。2.可行性不确定。有些真正产生问题的因素无法采集或发生太快。比如机房断电,接口中断等等,他们发生前往往设备是不能知道的。再比如某些异常攻击导致设备异常等等。这些东西可能确实有预兆,但是他们却不在设备可知的范围内。(注意我强调的是设备不知道)