一、背景
随着互联网的迅速发展,各个云商不断崛起,5年前上万规模的互联网公司可能不超过200家,最近几年来,这个数字在不断上涨,而且增长的速度惊人,尤其是虚拟化、容器技术的出现,十万级别的服务器规模应该也会慢慢普及。兵马未动,监控先行。监控的重要性不必多说,有认曾经将监控比喻成运维之眼,作为一名运维人员,如果没有监控,就相当于在"瞎忙活"。但是对于一个强大的监控软件,到底需要哪些功能,要怎样展现才能更加让大众接受以及在实现上有哪些难点.....等等一系列问题,你是否考虑过呢?
二、分析
一个强大的监控系统,如下一些功能必不可少。
1.数据批量采集和优化处理(原始数据收集以及处理)
2.集中展示(图表展示和数字展示以及个性化展示)
3.告警(指定告警、告警升级、以及告警抑制)
4.权限分离(用户权限隔离)
5.审计(安全审计)
三、详解
1、数据采集和处理
如同炒菜,你首先需要去把食材买来,然后才能开工烹饪。监控系统他也需要食材----数据。他首先需要从各地采集海量数据。如:cpu、内存、网络、磁盘等数据,当然还有其他数据:包括服务器uptime、os信息等等。采集到数据后,集中存储到中央,也就是数据库,然后进行统一处理。这里就有一个问题,是不是所有数据需要全部存储到数据库呢?如果是全部数据都需要存储的话,空间可能是个问题,也许你认为现在磁盘硬件很便宜了,但是如果原始数据不经过加工,他的增长速度是你无法想象的。
我们来做个简单计算:假设我们有6000个监控项(大约60个host,每个host100个item),每60s采集一次,也就是每秒需要采6000/60=100,也就是数据库每一秒需要新增100个值。而这些值需要在数据库保持一定的时间,通常是几个月、半年、或者是一年。每个新的数据和索引值需要一定的磁盘空间,这里假如我们保持最少时间:30天。我们每秒现在新增100个值,30天累计下来:(30*24*3600)*100=259,200.000,或约260M。根据所使用的数据库引擎,接收到的值类型(浮点型,整型,字符串,日志文件等),磁盘空间保持一个单一的值可能会有所不同,从40字节到几百个字节。通常情况下,每个值大约是50个字节。在我们的案例中,这意味着260M的值将需要260M * 50字节= 13GB的磁盘空间。也就是说,60台主机,每个主机100个监控项,一个月的量基本上就可以达到13GB的磁盘空间,以此类推,如果是6000台,每台100个监控项,数据需要保持半年,那就是13GB的600倍,也就是7800GB了。如果是6万台、16万台呢,而且这里的监控项平均100个,已经是按最少的进行计算了。
是不是一定需要把每分钟的数据进行保存呢?我个人认为,除了一些关键性的业务外(如:计费类),其他大部分都是可以进行稀疏处理的。比如,采集的时候是一分钟采集一次,数据线也是一分钟一个点,但是到了后期,时间一长,我们可能不需要这么精细,而只是需要查看一个趋势图而已,我们一般可以这样处理:比如一个星期,我们可以每小时一个点(计算一小时的平均值、最大值、最小值),而一个月,我们可以一天一个点或者半天一个点这样处理,这里都是取时间段的平均值、最大值、最小值。
2、数据展示和分析
作为数量这么庞大的监控系统,每天采集到大量的服务器数据,但是,光采集了数据并进行存储,也是毫无用处的。我们需要集中展示和挖掘,才能将这些数据转化成商业价值,通过这些数据挖掘和分析,可以指导我们线上生产环境,并作出一些成本预算、趋势分析。比如:服务器选型、故障判断、流量分析、用户分布、游戏活动效果、资源需求等等。这些对于降低成本、故障处理以及线上运营有非常大的指导作用。当然,这里需要用大数据的思维去思考,我们也就不分析的那么高深了。哈哈,主要是我目前还没达到那个水平。
3、告警
如果我们需要对某个游戏进程的存活与否进行监控告警,需要如何实现呢?通常做法就是写个脚本,然后再做个定时任务,定时去执行这个脚本扫描进行是否存在,一旦检测都进程不存在,则进行短信和邮件通知。但是这种原始的方式还是存在许多问题的:
1.如果需要每台机器都去写脚本、然后做定时任务,你可能就会每天都奔波于脚本和定时任务之间
2.如果需要服务器维护,然后你又去每台机器停掉定时任务,继续奔波于每台机器的定时任务
3.如果有一天又来了新的需求,需要在监控到进行宕掉后,进行进程的拉起,你可能又会进入下一轮脚本和定时任务之间了
一个伟大的运维人员就甘愿每天被这样轮么?
4、权限分离
当机器已经达到一定规模,也就意味着机器的使用者也达到了一定规模,这个时候,如果不同部门的人需要只查看自己负责项目的机器信息,也是你需要考虑权限分离的时候了。同时,权限分离,包括查看、使用、报警、报警屏蔽、模板设定等一系列权限的分离。
5、审计
审计是任何一个系统都必须具备的,也就是对于本系统使用者的任何操作有有迹可循,需要记录哪个用户在哪个时间点干了哪些事。
至此,一个强大的监控系统必备功能就分析完了,接下来我们看看目前有哪些监控系统供我们选项,当然,这里选项只限于在开源系统中,至于为什么要选择开源,后面会详谈。