问题
晚上22:00,产线告警,一个产线服务无法访问,每个请求都报502错误。
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>******</center>
</body>
</html>
分析
数据链路示意图:
- MaShang 码商业务服务,处理具体的业务逻辑
- Proxy 代理服务器,通过专线将请求发送到国内的聚石塔服务器
- Tower 天猫聚石塔内的服务,主要用于签名并转发请求给Tmall服务
- Token 更新token
- Tmall 淘宝官方的服务
从产线日志来看,可以排除是代理服务器Proxy的问题。根据经验,线上502多数是由于后端服务挂掉导致的,网关后面是tower服务。登录产线服务器,果真是tower服务器挂了,并且重启tower服务失败。cpu和内存的使用量都正常,再查看磁盘空间,磁盘空间满了。查找大文件,日志足足有15G,真正原因可算找到了。这台服务器是低配版的云服务器,磁盘空间有限。
结论
服务器的日志多年没清理,日志堆满了磁盘,导致服务挂了。删除日志文件,重启服务,问题解决。
改进
根据天猫的规定,tower服务必须部署到他们的聚石塔服务器内。内部做过k8s容器化改造,但没有对聚石塔的服务做容器化改造,tower服务也没有高可用方案。
- 申请服务器资源,每个服务至少部署两个节点,防止单点故障。
- 监控服务器的资源,设置CPU,内存,磁盘空间,网络等服务器资源的告警阈值。
- 定期删除没有使用的日志,或者在服务内限制日志的最大使用量。