Arthas 在线诊断工具改造

Arthas 在线诊断工具

Arthas 是阿里巴巴开源的在线诊断工具,提供了 Dashboard 负载总览Thread 线程占用Stack 堆栈查看Watch 性能观测 等功能。笔者参考原作者 @wf2311 的实现进行了优化:

  1. 服务发现:自动获取接入的应用列表 IP 和端口,无须手动输入 AgentId
  2. 权限控制:基于 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 启动

本项目不依赖外部组件,可以直接启动运行。

  1. 在项目目录下运行 mvn install(如果不想运行测试,可以加上 -DskipTests 参数)。
  2. 进入 tunnel-server 目录,执行 mvn spring-boot:run 或者启动 ArthasTunnelApplication 类。运行成功的话,可以看到 Spring Boot 启动成功的界面。
  3. 进入 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 的集成。

  1. 引入 Arthas 依赖
xml 复制代码
<dependency>
    <groupId>io.github.shiyindaxiaojie</groupId>
    <artifactId>eden-arthas-spring-boot-starter</artifactId>
</dependency>
  1. 开启 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
相关推荐
Victor3563 小时前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端
JaguarJack3 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端·php·服务端
BingoGo3 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端
Victor3563 小时前
MongoDB(3)什么是文档(Document)?
后端
牛奔6 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌10 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX12 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了12 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法12 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment13 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端