Arthas线上排障

发布时间 2023-08-07 17:40:25作者: 爱探索的小康

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突发数据库连接异常,错误日志剧增