4
目前,Arthas只支持用 arthas-spring-boot-starter
的方式,让应用引入arthas,然后在启动时attach自身,再连接到 tunnel server上。
这种方式有很多缺陷:
- 应用启动时就需要attach自身,不能做到动态attach
- 应用如果自身没有响应了,在tunnel server上也没办法查看了
因此,考虑一种真正支持大规模管控的方式。
- 在应用机器上,启动一个常驻的native agent
- native agent可以考虑用rust/java GraalVM/go 等(java GraalVM有mavend可以参考 https://github.com/apache/maven-mvnd)
- native agent负责连接远程管理平台,接收管理平台的 attach 命令,负责中转arthas的执行命令和结果
- native agent要充分考虑安全问题,比如要支持TLS连接
- 考虑docker/k8s环境下支持,比如 native agent本身以sidecar方式,或者k8s临时容器方式部署,参考:https://github.com/alibaba/arthas/issues/1874
整个事情比较多,考虑一步步实现。
agent的基本功能- Agent侧支持查看,列出所有java 进程
- 支持通过jvm自身机制去attach
- 支持sidecar方式,或者k8s临时容器的attach (考虑集成 https://github.com/apangin/jattach )
- 启动时注册到server报,上报信息
- 接收server端的attach指令
- 接收server端的诊断命令,返回结果到server端
- 查看agent列表
- agent管理功能
参考: https://github.com/alibaba/arthas/issues/1350