背景描述
在2018年1月22日星期一,早上发现部署在阿里云所有服务无法访问,登录到阿里云控制台,首先查看SLB负载均衡器状态,发现所有公网负载均衡器被停用,专网负载均衡器工作正常。电话联系阿里云客服,告知阿里云欠费,我们的负载均衡器都是按量付费模式,因欠费所以被停用,立刻向阿里云进行充值,暂时解决问题。
需要解决的问题
阿里云账户就在前两天还有充足的余额,为什么突然欠费?费用产生原因?
备注:因为部署到阿里云业务刚上线,还没有正式启用,还没有做监控。另外阿里云账号绑定手机在其它人手中,所以阿里云短信通知没有收到。
排查过程
首先查看阿里云消费记录,发现OSS对象存储每1小时扣费10到30元不等(大部分是在20以上),持续时间从2018年1月16日星期二晚上17点过开始,一直到2018年1月20日星期六早上9点,余额为0。
备注:OSS对象存储也是按量付费,如下图所示
查看OSS管理平台,发现流出流量达到4.5TB,GET请求达到2600多万次,但OSS所有对象加一起不超过400个对象,总大小不超过100M,如何产生如此巨大流量。第一反应是被恶意攻击,然后通过OSS控制台热点统计分析,发现流量都来自于阿里云,并且都来自于一个省(也正是所购买阿里云ECS所在省),再通过文件访问统计发现所有访问都指向同一张图片,每天产生1T到2T的流量,此时已经怀疑是业务造成。
检查需要调用这张图片的服务,最终发现有一个服务一直在死循环调用这张图片,并且走的是OSS公网接口地址,所以产生了公网流量
解决方法
更改A业务代码,如果出现上述情况,将输出一个业务上的ERROR,此消息作为正常消费处理。业务描述:MQ会往A业务上面推送消息,然后A通过消息内的数据去获取两张图片作对比,首先获取的就是OSS对象存储里面的图片,此时获取成功,然后再获取另外一张图片,因图片不存储,导致获取失败,然后MQ认为此消息没有被正常消费,所以又导致重新推送,如此循环
番外篇
因为大量的请求,导致出错的业务所在服务的日志文件不断的增大,最后服务器空间在2018年1月21日星期日早上9点爆满,另外在欠费时间点后的所有请求都是失败请求。
总结
监控很重要,包括对服务器基本信息的监控,web站点的监控,如果做到了这两个至少可以做到问题早发现,或者有助于排查问题,不至于如此被动,教训啊!!!