Arthas 在線診斷工具改造,讓它更好用,更傻瓜!
你知道的越多,不知道的就越多,業(yè)余的像一棵小草!
你來,我們一起精進!你不來,我和你的競爭對手一起精進!
編輯:業(yè)余草
來源:juejin.cn/post/7281849496983994383
推薦:https ://t.zsxq.com/12MKG9QwA
自律才 能自由
眾所周知,最近兩周,我陸續(xù)發(fā)了好幾篇 Arthas 相關(guān)的文章:https://t.zsxq.com/12BmfIKbR、《》,深受喜愛,今天我們繼續(xù)發(fā)一篇基于 arthas 源碼,改造項目的實戰(zhàn)案例,希望大家有所收獲!
Arthas 在線診斷工具
Arthas 是阿里巴巴開源的在線診斷工具,提供了 Dashboard 負載總覽、Thread 線程占用、Stack 堆棧查看、Watch 性能觀測 等功能。我參考一些群友的思路、與案例arthas-ext的實現(xiàn)進行了優(yōu)化:
- 服務(wù)發(fā)現(xiàn):自動獲取接入的應(yīng)用列表 IP 和端口,無須手動輸入 AgentId
- 權(quán)限控制:基于 Spring Security 實現(xiàn)登錄控制,并支持 Nacos 動態(tài)綁定賬號與服務(wù)
本文分享出核心源碼,如需詳細源碼,歡迎加我微信,贈送給有心人。
演示圖例
改造前
改造后
登錄控制
配置管理
arthas:
tunnel:
users:
- name: admin
password: 123456
roles: '*' # 全部授權(quán)
- name: user
password: 123456
roles:
- eden-gateway # 特定服務(wù)授權(quán)
如何構(gòu)建
本項目默認使用 Maven 來構(gòu)建,最快的使用方式是導入我給的源碼項目到開發(fā)工具?;蛘咴创a項目的根目錄執(zhí)行 mvn package -T 4C 完成本項目的構(gòu)建。
如何啟動
IDEA 啟動
本項目不依賴外部組件,可以直接啟動運行。
- 在項目目錄下運行
mvn install(如果不想運行測試,可以加上-DskipTests參數(shù))。 - 進入
tunnel-server目錄,執(zhí)行mvn spring-boot:run或者啟動ArthasTunnelApplication類。運行成功的話,可以看到Spring Boot啟動成功的界面。 - 進入
web-ui目錄,執(zhí)行yarn run dev:tunnel或者yarn run dev:ui。運行后控制臺日志輸出http://localhost:8000地址,點擊訪問。
鏡像啟動
將項目發(fā)布公司內(nèi)部、或個人的 Docker Hub 倉庫,然后執(zhí)行如下參考命令。
docker run -p 8080:8080 --name=arthas-tunnel-server -d xttblog(業(yè)余草)/arthas-tunnel-server
如何部署
FatJar 部署
執(zhí)行 mvn clean package 打包成一個 fat jar,參考如下命令啟動編譯后的控制臺。
java -Dserver.port=8080 -jar target/arthas-tunnel-server.jar
Docker 部署
調(diào)整 Maven 配置文件 setiings.xml,填寫相關(guān)憑據(jù)。
<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>
在項目根目錄執(zhí)行 mvn -Pgithub -pl tunnel-server jib:build -Djib.disableUpdateChecks=true 打包為鏡像。
Helm 部署
進入 helm 目錄,執(zhí)行 helm install -n arthas arthas . 安裝,在 K8s 環(huán)境將自動創(chuàng)建 Arthas 所需的資源文件。
如何接入
為了減少客戶端集成的工作,您可以使用eden-architect框架,只需要兩步就可以完成 Arthas 的集成。
- 引入 Arthas 依賴
<dependency>
<groupId>io.github.shiyindaxiaojie</groupId>
<artifactId>eden-arthas-spring-boot-starter</artifactId>
</dependency>
- 開啟 Arthas 配置
spring:
arthas:
enabled: false # 默認關(guān)閉,請按需開啟
arthas: # 在線診斷工具
agent-id: ${spring.application.name}@${random.value}
tunnel-server: ws://localhost:7777/ws # Arthas 地址
session-timeout: 1800
telnet-port: 0 # 隨機端口
http-port: 0 # 隨機端口
筆者提供了兩種不同應(yīng)用架構(gòu)的示例,里面有集成 Sentinel 的示例。分別是「COLA 架構(gòu)」案例和「分層架構(gòu)」案例。
- 面向領(lǐng)域模型的 「COLA 架構(gòu)」
- 面向數(shù)據(jù)模型的 「分層架構(gòu)」
歡迎十一期間愿意彎道超車的有心人士,加我微信,贈送源碼,進行個人學習與研究!
