Arthas 在线诊断工具
Arthas 是阿里巴巴开源的在线诊断工具,提供了 Dashboard 负载总览
、Thread 线程占用
、Stack 堆栈查看
、Watch 性能观测
等功能。笔者参考原作者 @wf2311 的实现进行了优化:
- 服务发现:自动获取接入的应用列表 IP 和端口,无须手动输入 AgentId
- 权限控制:基于 Spring Security 实现登录控制,并支持 Nacos 动态绑定账号与服务
您可以访问 GitHub 查阅源码。
演示图例
改造前

改造后

登录控制

配置管理
yaml
arthas:
tunnel:
users:
- name: admin
password: 123456
roles: '*' # 全部授权
- name: user
password: 123456
roles:
- eden-gateway # 特定服务授权
如何构建
本项目默认使用 Maven 来构建,最快的使用方式是 git clone
到本地。在项目的根目录执行 mvn package -T 4C
完成本项目的构建。
如何启动
IDEA 启动
本项目不依赖外部组件,可以直接启动运行。
- 在项目目录下运行
mvn install
(如果不想运行测试,可以加上-DskipTests
参数)。 - 进入
tunnel-server
目录,执行mvn spring-boot:run
或者启动ArthasTunnelApplication
类。运行成功的话,可以看到Spring Boot
启动成功的界面。 - 进入
web-ui
目录,执行yarn run dev:tunnel
或者yarn run dev:ui
。运行后控制台日志输出http://localhost:8000
地址,点击访问。
镜像启动
本项目已发布到 Docker Hub,请执行参考命令运行。
bash
docker run -p 8080:8080 --name=arthas-tunnel-server -d shiyindaxiaojie/arthas-tunnel-server
如何部署
FatJar 部署
执行 mvn clean package
打包成一个 fat jar,参考如下命令启动编译后的控制台。
bash
java -Dserver.port=8080 -jar target/arthas-tunnel-server.jar
Docker 部署
调整 Maven 配置文件 setiings.xml
,填写相关凭据。
xml
<settings>
<profiles>
<profile>
<id>github</id>
<properties>
<docker.username>${env.DOCKER_USERNAME}</docker.username>
<docker.password>${env.DOCKER_PASSWORD}</docker.password>
<docker.image>${env.DOCKER_IMAGE}</docker.image>
</properties>
</profile>
</profiles>
</settings>
在项目根目录执行 mvn -Pgithub -pl tunnel-server jib:build -Djib.disableUpdateChecks=true
打包为镜像。
Helm 部署
进入 helm
目录,执行 helm install -n arthas arthas .
安装,在 K8s 环境将自动创建 Arthas 所需的资源文件。
如何接入
为了减少客户端集成的工作,您可以使用 eden-architect 框架,只需要两步就可以完成 Arthas 的集成。
- 引入 Arthas 依赖
xml
<dependency>
<groupId>io.github.shiyindaxiaojie</groupId>
<artifactId>eden-arthas-spring-boot-starter</artifactId>
</dependency>
- 开启 Arthas 配置
yaml
spring:
arthas:
enabled: false # 默认关闭,请按需开启
arthas: # 在线诊断工具
agent-id: ${spring.application.name}@${random.value}
tunnel-server: ws://localhost:7777/ws # Arthas 地址
session-timeout: 1800
telnet-port: 0 # 随机端口
http-port: 0 # 随机端口
笔者提供了两种不同应用架构的示例,里面有集成 Sentinel 的示例。
- 面向领域模型的 COLA 架构 ,代码实例可以查看 eden-demo-cola
- 面向数据模型的 分层架构 ,代码实例请查看 eden-demo-layer