Arthas 在线诊断工具改造

2023年 9月 25日 48.5k 0

Arthas 在线诊断工具

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

  • 服务发现:自动获取接入的应用列表 IP 和端口,无须手动输入 AgentId
  • 权限控制:基于 Spring Security 实现登录控制,并支持 Nacos 动态绑定账号与服务
  • 您可以访问 GitHub 查阅源码。

    演示图例

    改造前

    改造后

    Arthas 在线诊断工具改造-1

    登录控制

    配置管理

    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,请执行参考命令运行。

    docker run -p 8080:8080 --name=arthas-tunnel-server -d shiyindaxiaojie/arthas-tunnel-server
    

    如何部署

    FatJar 部署

    执行 mvn clean package 打包成一个 fat jar,参考如下命令启动编译后的控制台。

    java -Dserver.port=8080 -jar target/arthas-tunnel-server.jar
    

    Docker 部署

    调整 Maven 配置文件 setiings.xml,填写相关凭据。

    
        
            
                github
                
                    ${env.DOCKER_USERNAME}
                    ${env.DOCKER_PASSWORD}
                    ${env.DOCKER_IMAGE}
                
            
        
    
    

    在项目根目录执行 mvn -Pgithub -pl tunnel-server jib:build -Djib.disableUpdateChecks=true 打包为镜像。

    Helm 部署

    进入 helm 目录,执行 helm install -n arthas arthas . 安装,在 K8s 环境将自动创建 Arthas 所需的资源文件。

    如何接入

    为了减少客户端集成的工作,您可以使用 eden-architect 框架,只需要两步就可以完成 Arthas 的集成。

  • 引入 Arthas 依赖
  • 
        io.github.shiyindaxiaojie
        eden-arthas-spring-boot-starter
    
    
  • 开启 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 架构,代码实例可以查看 eden-demo-cola
    • 面向数据模型的 分层架构,代码实例请查看 eden-demo-layer

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论