Arthas线上排障

Arthas线上排障

场景1. Nacos Client访问不到配置中心

Nacos-Server/Nacos-Client: v2.0.4

背景

Nacos-Server因安全需要需要开启鉴权, 所有Client访问配置中心都需要提供控制台账户和密码.

  • Server配置
nacos.core.auth.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverAuthKey
nacos.core.auth.server.identity.value=serverAuthValue
  • Client配置
java -jar app.jar -Dnacos.username=nacos -Dnacos.password=大写密码

现象

服务启动后,日志一直报403 unknow user!!, 滚动一段时间后, 应用退出。

使用Client启动命令中配置的用户名密码能够正常登录nacos-server控制台。

过程

  1. 能正常登录控制台,证明密码没问题。
  2. 本次部署是初次部署,考虑到配置可能有误,拷贝测试环境的nacos-server配置到部署环境,重新部署,问题依旧存在。
  3. 根据错误信息,定位nacos-server源码com.alibaba.nacos.console.security.nacos.NacosAuthManager#resolveTokenFromUser是执行校验的主要方法,用户名和密码通过参数传入。
  4. 使用Arthas监听该方法,看Client传过来的到底是个什么玩意
watch com.alibaba.nacos.console.security.nacos.NacosAuthManager resolveTokenFromUser '{params,returnObj,throwExp}' -x 3
  1. 启动Client后,Client发送过来的请求中,初次携带的鉴权信息是正确的,第二次及以后的密码变成了小写。

result

  1. 去官方issue列表查询,未发现类似问题,源码也没发现有改变配置大小写的地方,从上一步可知Client启动后有一次请求的鉴权信息是正确的, 这次访问配置中心是成功的, 而后续鉴权信息就发生变更了, 可能是来自配置中心的配置覆盖了本地配置, 经排查, Client依赖的配置文件内, 确实存在同名的配置
nacos:
  username: nacos
  password: 小写密码
  1. 去除该配置后, Client启动正常

场景2. Nacos Client突发数据库连接异常,错误日志剧增

现象

Nacos Client运行一段时间后突发数据库连接异常,服务不可用,且错误日志剧增,导致磁盘告警。

img

img

过程

  1. 数据库认证信息放在nacos配置中心,用认证信息手动连接数据库正常,确认密码无问题。
  2. 网络搜索的部分解决方案为增大连接池核心连接数,增加连接超时时间,增加keepalive设置等,与配置现状一致,排除此类问题。
  3. 定位源码,Arthas线上定点爆破。
watch org.postgresql.core.v3.ConnectionFactoryImpl doAuthentication "{params, target, returnObj, throwExp}" -b -x 3
  1. 项目中用了jasypt配置文件加解密,理论上应用上下文中应该是解密后的认证信息,但是从运行时来看,新建数据库连接时用的都是密文,显然不正常。

img

  1. 查看历史日志,找到最初报错的那天,刚好有一次配置变更,但和数据库的配置无关,但这是唯一事件源,只有可能是这次操作导致的。nacos配置中心的配置项变更后,下游服务都会重新刷新上下文,猜测可能刷新后未进行解密。去jasypt组件搜索issue,发现使用的版本果然存在此bug#343,受影响的范围是所有的加密属性,升级jasypt版本后问题解决。

总结

  1. 善用工具。故障的来源多种多样,有人为的,有源码的bug等等,我们往往很难快速找到问题的根因,更何况测试环境验证是通过的。这个时候线上排障工具尤为重要,使用Arthas可以轻松定点爆破线上故障点,为排障提供最直接的灵感来源。
  2. 明确配置边界。明确哪些配置是需要放在Client本地的,哪些是需要放在配置中心的,配置中心的优先级高于本地,非常容易出现配置覆盖问题。
posted @   coder_klong  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示