Arthas-TunnelServer踩坑及保姆级教程
前言
这几天一直在学习+研究arthas。其中就想到一些问题,这玩意怎么做分布式,怎么在一台机器监听多个进程。然后开始扒官方文档,虽然官方文档有说明,但是有些细节还是没有写的特别详细。目前我有一些阶段性的成果和总结,分享出来。希望对同学们有帮助。
服务端部署
从maven下载tunnel-server jar包。需下载 fatjar。
下载artifactId:arthas-tunnel-server
启动server
java -jar arthas-tunnel-server.jar
客户端部署
从maven下载客户端包。
下载artifactId:arthas-packaging即可。
解压即用
单机版
java -jar arthas-boot.jar 或者 执行 as.sh
- 选择进程id即可开始进入监听。
优点:操作简单,想看哪台的哪个进程,重复操作即可。
缺点:安全性不高,开发人员没有服务器登录权限时就很难这么做了。
如果只是临时使用这也何尝不是好方案呢,实际情况怎么方便怎么来就行。
分布式
如果要做一个统一的管理,统一维护就可以看看分布式架构是怎么玩的。
简单的架构图
每个节点需要装一下刚刚下载的arthas-package
具体操作命令:
./as.sh --tunnel-server 'ws://localflume:7777/ws'
ws://localflume:7777/ws 这个是 tunnel-server的注册地址。tunnel-server安装在哪个节点,就用那个节点的hostname或者ip即可。这块很好理解。
此处有可能启动失败,需要安装telnet服务。a.sh 和 java -jar arthas-boot.jar
是一样的,任意选就可以。
这个是一个节点一个进程的,都是默认配置。单个节点多进程的也很简单,加参数就行。
./as.sh --tunnel-server 'ws://localflume:7777/ws' --telnet-port 9994 --http-port -1
--telnet-port 9994
--http-port -1
telnet-port 默认是 3658 http-port 默认是 8563,在同一台机器里这俩端口一定不能冲突。如果前面已经启动了一个默认的arthas-client,那后面每起一个client都要去修改这俩端口,保证这俩端口是未被其他进程给占用。
启动后选择要监听的进程pid就可以了。arthas是针对进程去监听的,所以进程和client是1对1的关系。有多少个进程就需要多少个client。
Tunnel-ServerWebUI
tunnel-server启动后可以访问他的webui。默认端口是8080
三个输入栏一个是IP,Port,AgentId。前两个好理解,就是tunnel-server的ip和开放出来的ws的port。第三个是每个arthas-client成功连接到进程后会自动生成一个agent-id。如图:
输入agentId,即使在client里长时间为操作退出或者quit退出后都能从webui中重新attach。与http方式不同此方式是长连接,超时退出也依然保持session。
查看Tunnel-Server中已注册的Client列表
http://localflume:8080/actuator/arthas
可以登录这个地址查看当前列表。用户名为 arthas,密码去tunnel-server的日志中找。日志中会生成密码如图:
登陆后可查看当前已注册的client列表。如图:
管理AgentID
一般情况下让agent-id 自动生成即可。但是假设以下场景下怎么去使用就存在问题了。
场景:
1.不开放服务器登录权限。让调试人员只想在webui中去排查和诊断。(对于arthas来说在shell中用命令attach和webui中操作是完全一致的,大部分的公司也权限管理的也很严格,能不让开发直连就尽量避免这种情况)
2.进程重启再重新启动arthas-client时agentid会被重新生成。
基于这两个场景可以预设agent-id。针对某个项目,进程预先设计好agentid。每次启动的时候 加上–agent-id 参数即可。
./as.sh --tunnel-server 'ws://localflume:7777/ws' --telnet-port 9994 --http-port -1
--telnet-port 9994 --agent-id thisistest
事先把agentid发给相关人员,运维重新发布项目、重启项目、宕机重启都不怕了,调试员只需要记住自己项目的agentid即可。
扩展
arthas的这种架构还是蛮舒服的,可以随意的横向扩展。但是像tunnel-server是单机的节点和进程一多肯定会出现瓶颈问题,这时候就考虑用nginx做一个负载了,这样server也可以横向扩展了。这属于arthas集群的解决方案了。这块我也没有实际扩展到这么多,条件允许的同学可以试试。
总结
以上是我在使用arthas的时候一些踩坑的经验分享,其实也算刚入门同学的保姆及教程了。如果有漏掉或者有不同意见的评论区指出来,我写出来的不一定是完全准确,探讨探讨,有问题我再纠正。后续也会分享一些关于arthas相关的经验分享。感谢支持!!!