时间是我们最大的敌人 --奇异博士
云计算一个难点在于保障系统的高可用,当在发生故障的时候,能够尽快的恢复(参考最近的gitlab和亚马逊s3故障教训)。如同奇异博士所说,工程师是在和时间在战斗。监控和报警是工作的重中之重。一般来说,我们肯定会做好宿主机层面和服务层面的监控报警,否则系统形如裸奔。
然而,某些场景中,宿主机和服务运行正常,但是上面的虚拟机被异常关机或者重启,抑或网络连通性出现问题(包括私有网,外网,以及不带外网的情况下通过L3访问外网等),上述情况下现有的监控方案覆盖不到,不能及时发现问题;另外,每次线上更新主机和网络等服务,需要观察升级对已有云主机的影响。基于上述考虑,从用户态出发,有了这个线上打桩监控的方案,切实提升系统可用性,保障网易云服务的SLA。
在当前线上所有节点部署一台虚拟机,虚拟机内部部署测试工具进行线上业务的网络监控,主要实现的功能包括:
其中,网络连通性方面通过ping进行检查,时间间隔为0.2s,结果方式采用如下的形式进行记录:
[date] [src_ip] [dst_ip] [state]
例如:
INFO [root] 2017-03-01 14:21:35 ping from 10.166.224.65 to 10.166.224.17 is ok!
无异常出现的情况不做任何推送操作,仅打印日志记录;在网络出现异常后,打印日志,同时通过IM或邮件的形式进行实施告警推送。
由于实现中,需要在每个节点进行虚拟机的预埋,所以会占用部分线上的资源,使用中会选取最小的规格(1v1e,512M内存)来进行验证,尽量少的占用系统资源。
经过调研对比(ansible, salt,puppet等),选取了较为轻量的python fabric模块,进行打桩机脚本与配置文件的下发和服务的部署。
另外完整的方案部署还需要考虑日志回滚,进程守护等问题。因此在脚本下发过程中,也会注入好事先准备的logrotate,supervisor等配置文件。
在fabric主程序中封装了部分常用命令,展示如下:
执行一次,在命令行下各节点看连通性结果。
fab -f network_check.py dry_run
拉起所有节点云主机测试连通性服务。
fab -f network_check.py start
停止所有节点测试连通性服务。
fab -f network_check.py stop
抓回所有节点的日志。
fab -f network_check.py get_log
并行执行,可以加上 -P
参数。
fab -f network_check.py start -P
报警消息
登录到哨兵监控节点看一下日志,果然在10:40左右10.173.32.77网络连通性异常。
通过私有网ip反查对应宿主机所在节点。
查看宿主机对应的监控,果然在该段时间内有异常产生。
通过此线上打桩方案,我们能够以用户态监控各个节点的网络连通性,有无异常宕机、重启等发生,从而能够更早的发现某些异常场景,为问题排查与服务恢复争取更多时间。
网易云新用户大礼包:https://www.163yun.com/gift
本文来自网易实践者社区,经作者黄哲骁授权发布。