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
相关推荐
葫芦和十三8 小时前
图解 MongoDB 05|文档模型设计:内嵌 vs 引用,反范式不是免费午餐
后端·mongodb·agent
不能放弃治疗11 小时前
单 Agent 实现模式
后端
IT_陈寒13 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
fliter14 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
fliter15 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪15 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter15 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶16 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
JensCS猿16 小时前
从 Spring Boot 回看 SSM 框架:手动挡与自动挡的驾驶哲学
后端
爱勇宝16 小时前
干了近 8 年,一夜之间被裁:AI 时代,程序员最该害怕的不是 AI
前端·后端·程序员