【复盘】记一次jumpserver web终端不显示资产问题心路历程

很早就想专门写一个专栏来聊聊关于运维如何troubleshooting。后来转念一想其实本来就没有天下第一的武功哪来普世的解决方法。加之我从业时间也不算太长。故就不聊方法论层次的(自我觉得层次不够)。那这个专栏就聊聊遇到问题时我本人如何解决的这个角度谈谈我个人主观的想法。

故障起因

因为IDC机器问题,需要将jumpserver主服务器下线迁移到其他机架上。我们jumpserver采用容器部署做了主从备份因此可以保证jumpserver不会因为宕机导致 jumpserver服务器无法登录的死循环问题。这点其实在现实很有意义,而且应该作为平时故障切换的演练项目。避免因为基础设施导致最近阿里云和滴滴出现P0事故。

故障详情以及处理过程

bash 复制代码
jms_core
jms_nginx
jms_koko
jms_redis
jms_guacamonle 

我们jumpserver一共有上述5个容器构成。迁移后遇到第一个问题是mysql数据库未启动导致jumpserver无法连接数据库。在重新启动数据库后解决。

数据库启动后登录正常但是在web终端页面资产无法显示。

我的第一反应是 jms_koko组件异常导致,因为koko组件是负责终端这块功能的(我的推测无法确定)。docker logs -f jms_koko --tail=100 查看koko可以看到如下报错。

上述报错让我不得不怀疑koko组件异常 我猜测是因为容器都是同一时间启动在koko启动时core组件未启动就绪导致连接异常(一般现代程序都有重试机制这种情况很少见)。因此我又重启了一次koko组件但还是异常。还排查了域名问题发现都是正常解析的。以及配置文件报错问题。后续又一直在浏览器F12查看接口调用也都只status 200(也正是这200迷惑了我)。

于是上bing寻求寻找答案,正好在jumpserver 官方github中找到了类似的问题(链接如下)。issue中提到了获取资产列表的接口是/api/perms/v1/user/my/asset-groups-assets/ issue中提到nginx配置错误会导致上述问题。我在核对了一遍nginx配置后排除这个异常。因为本次迁移不涉及版本更新和ip变动因此这种可能性很小。

web终端不显示资产 · Issue #1264 · jumpserver/jumpserver (github.com)

于是我进一步排查上述提到的接口/api/perms/v1/user/my/asset-groups-assets/ 发现虽然状态码是200但并未获取到任何数据。于是打开浏览器console控制台发现如下报错

通过查询异常 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)定位到是nginx proxy_tmp权限异常导致的。在修改之前目录权限为700 属主为root属组为app 因为nginx是app用户启动所以导致缓存失效。想起上次也遇到过类似问题 递归修改属主属组为app即可。这里排错参考了掘友-三苗同学-的文章

浏览器报错 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK) 解决办法 - 掘金 (juejin.cn)

授权后故障排除资产可以正常显示

相关推荐
万少26 分钟前
Vibe Coding不停歇,移动端 TRAE SOLO 让你用手机也能编程啦
前端·javascript·后端
Rust研习社41 分钟前
为什么 Rust 没有空指针?
开发语言·后端·rust
皮皮林5511 小时前
全网最全的 Jenkins + Maven + Git 自动化部署指南!
后端
舒一笑1 小时前
用几十行代码搞定 Chat 接口透明转发:跨环境轻量级网关实战
后端·程序员·架构
铁皮饭盒2 小时前
成为AI全栈 - 第3课:路由 RESTful Elysia 状态码 设计规范
前端·后端·全栈
我叫黑大帅2 小时前
如何通过 Python 实现招聘平台自动投递
后端·python·面试
狼爷3 小时前
短视频播放量(Views)计数系统实现方案:高并发、不丢数的工业级实践
后端·架构
苍何4 小时前
我用 Tabbit 浏览器搭了一套内容创作全自动流水线,太香了!
后端
苍何4 小时前
全网首测,TRAE SOLO 的 AI 麦克风!
后端
IT_陈寒4 小时前
Redis这个内存杀手,差点让我们运维半夜追杀我
前端·人工智能·后端