Arthas 在线诊断工具改造,让它更好用,更傻瓜!
你知道的越多,不知道的就越多,业余的像一棵小草!
你来,我们一起精进!你不来,我和你的竞争对手一起精进!
编辑:业余草
来源:juejin.cn/post/7281849496983994383
 推荐:https ://t.zsxq.com/12MKG9QwA 
自律才 能自由
众所周知,最近两周,我陆续发了好几篇 Arthas 相关的文章:https://t.zsxq.com/12BmfIKbR、《》,深受喜爱,今天我们继续发一篇基于 arthas 源码,改造项目的实战案例,希望大家有所收获!
 Arthas 在线诊断工具
Arthas 是阿里巴巴开源的在线诊断工具,提供了 Dashboard 负载总览、Thread 线程占用、Stack 堆栈查看、Watch 性能观测 等功能。我参考一些群友的思路、与案例arthas-ext的实现进行了优化:
- 服务发现:自动获取接入的应用列表 IP 和端口,无须手动输入 AgentId
 - 权限控制:基于 Spring Security 实现登录控制,并支持 Nacos 动态绑定账号与服务
 
本文分享出核心源码,如需详细源码,欢迎加我微信,赠送给有心人。
演示图例
改造前
 改造后
 登录控制
 配置管理
      
      arthas:
  tunnel:
    users:
      - name: admin
        password: 123456
        roles: '*' # 全部授权
      - name: user
        password: 123456
        roles:
          - eden-gateway # 特定服务授权
     
 如何构建
本项目默认使用 Maven 来构建,最快的使用方式是导入我给的源码项目到开发工具。或者源码项目的根目录执行 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 仓库,然后执行如下参考命令。
      
      docker run -p 8080:8080 --name=arthas-tunnel-server -d xttblog(业余草)/arthas-tunnel-server
     
 如何部署
FatJar 部署
执行 mvn clean package 打包成一个 fat jar,参考如下命令启动编译后的控制台。
      
      java -Dserver.port=8080 -jar target/arthas-tunnel-server.jar
     
 Docker 部署
调整 Maven 配置文件 setiings.xml,填写相关凭据。
      
      <settings>
    <profiles>
        <profile>
            <id>gitlab</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 依赖
 
      
      <dependency>
    <groupId>io.github.shiyindaxiaojie</groupId>
    <artifactId>eden-arthas-spring-boot-starter</artifactId>
</dependency>
     
 - 开启 Arthas 配置
 
      
      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 架构」案例和「分层架构」案例。
- 面向领域模型的 「COLA 架构」
 - 面向数据模型的 「分层架构」
 
欢迎十一期间愿意弯道超车的有心人士,加我微信,赠送源码,进行个人学习与研究!
