10.1长假过后突然多个系统出现了故障,信息化系统如果没有完善的监控,你不能在问题出现之前得到预警,只能等用户报给你,你来充当救火的角色,这个体验是非常糟糕的。明年我会写个关于监控的文章,评估一个公司怎么样你不要去看办公位,你应该就去看他们的厕所,而去一个信息化部门参观,你不要听他们华丽的PPT,你就去看他们的监控系统。

我们遇到的那些问题,有个重启就好了。

然而重启有时候掩盖了问题,如果能保留现场定位问题是最好,有时候为了业务的紧迫性,不得不重启解决,等待有时间再回去回溯问题的根源。

如果重启解决不了,这时候就看定位问题的能力了,其实很多时候解决问题的方法很简单,难的在于找到问题的所在,就像看病,开检测单花了1000,拿药可能就花了10元。

网页路径

来说说信息系统问题的定位,我还是以一个非常经典的例子来说明,对于一个普通用户,如果在浏览器内输入一串网址回车后几秒他看到一个网页,对他来说很简单,但是真正在专业人士来看,底层实际上可能走了下面流程:

  • 用户端浏览器 -> hosts文件 -> DNS -> 浏览器缓存 -> Safe Browsing -> 证书检查 -> 网关/无线/路由器 -> 代理 -> CDN -> 防火墙 -> 反向代理/SSL卸载 -> IPS/IDS -> WAF -> 负载均衡 -> 虚拟化宿主机 -> 虚拟机 -> 操作系统 -> HTTP服务器 -> HTTP服务器 WAF -> URL重写 -> 文件载入 -> 脚本解析 -> URL路由分发 -> Cache -> 数据库 -> 渲染结果 -> 压缩 -> HTTPS加密 -> 返回 -> 网络层分包 -> 重组包 -> 浏览器接收 -> 浏览器插件 -> 字符集 -> CSS渲染 -> JS渲染 -> 页面载入完成

这条链路非常长,每个都可以展开很多,普通用户可能只是看到网页无法显示,跟你说网络不通,这种没有任何意义。

就像有人跟你说网速慢,网速是一个非常主观的概念,心情好不好都会影响网速,定量的说法专业的人会跟你说目的地(国内、国外、教育网、运营商)、协议(视频、直播、HTTP、BT)、带宽、时延、抖动、丢包率,只有这些结合再加上历史数据比较,你才能定位网速是不是突然慢了。

如果有人能这么专业地告诉你,什么故障,他的环境,从哪个端点到哪个端点,他已经通过替换法测试过,并告知你确认问题的命令,这就非常得舒服(同提问的艺术),遇到这种人(你就嫁了吧),你就会很愿意配合,一个是你知道这是个专业靠谱的人,二是你知道他确实尽力并且遇到问题了,因为按他的方法,可能他已经自己处理10个问题里面的9个了,只有一个需要你帮忙。

一个经验丰富的人应当有能力从现象看本质来分辨出问题出在哪。

有能力的话尽量做一个专业的人吧,人都是会互相推诿的,不认为自己有错,不想给自己找事,信息系统,从用户到运维到系统到网络,各层都不能直接把问题不经过任何定位直接抛给其他层,不定位浪费所有人的时间,也不利于问题的解决。

定位问题:测试环境

定位问题就几个大法,以我们最常听见的网络不通举例,测试端口是否通断telnet,网络是否通ping,路由tracert,tcpdump抓包,进程top、free,curl等等,浏览器就F12,接着就是所有的日志。当然千万不要直接关闭防火墙测试,我知道很多厂商喜欢这样子,最近我们连续出过多起服务器配置好的防火墙被厂商关闭,其中有些就确实出问题了。

架构一定要简单

能隔离隔离,比如我前面公众号提到的DNS权威和递归分离,邮件MTA、MX、HTTP、POP分离,Web流量跟其他流量分离,都是很好的例子。一个关键的设备串在中间,所有人定位问题都要折腾你。

部署要标准化

我遇到很多情况,在系统出问题的时候冲进去看的时候发现部署非标,找日志位置,启动脚本找半天。或者系统不够新,测试工具无法运行。一定要为未来定位问题布置一个干净的台面。

定位问题:替换

这是十几年前攒机DIY学来的技能,替换所有可以替换的组件,交叉比对,替换成错误的配置,多次替换看错误信息是否有变化。如果已经部署的代码不能修改,就简化代码测试。

定位问题:peer review

有时候自己折腾很久绕不出来,找个人说说可能自己就会豁然开朗。或者睡一觉起来,突然就找到解决问题。

罕见的两个错误叠加

这种情况很少遇到,有时你遇到一个故障,然后你基于Google、StackOverflow查找,有人叫你改某个配置,你改了,无效,一般会恢复配置。然后再改另外一个,也是无效。然而问题解决需要同时改这2个配置,这种情况也不是不可能。

变更

变更有可能慢慢变更,让问题暴露一段时间后再进行另外一个变更,出故障一般我们会问,最近什么有没有做什么变化?我们前段时间就遇到这个问题,时间紧迫接连上了2个设备,问题出现后只能一个个下线测试。

错误必须清0

这就是坑,如果错误不清0,在你下次遇到问题的时候,错误日志里面报了非常多错误,你都不知道这个故障是不是由这个引起,你会浪费时间在处理这些错误上,而这时候没有时间让你思考,为什么不在更长的时间内把问题清0呢?

最后祝大家永远不需要用到这篇文章,系统永不出故障,服务器永不宕机,网站永不会被黑,转发这条锦鲤就会有好事发生。。。