成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

瀏覽:3日期:2023-03-17 17:54:50

項(xiàng)目最初使用 Arthas 主要有兩個(gè)目的:

通過(guò) arthas 解決實(shí)現(xiàn)測(cè)試環(huán)境、性能測(cè)試環(huán)境以及生產(chǎn)環(huán)境性能問(wèn)題分析工具的問(wèn)題。 通過(guò)使用 jad、mc、redefine 功能組合實(shí)現(xiàn)生產(chǎn)環(huán)境部分節(jié)點(diǎn)代碼熱更新的能力。 技術(shù)選型相關(guān)

因?yàn)楣具€未能建立起較為統(tǒng)一的生產(chǎn)微服務(wù)配置以及狀態(tài)管理的能力,各自系統(tǒng)的研發(fā)運(yùn)維較為獨(dú)立。現(xiàn)在項(xiàng)目使用了 Spring Cloud 以及 Eureka 的框架結(jié)構(gòu),和 SBA 的基礎(chǔ)支撐能力較為匹配,同時(shí),SBA 已經(jīng)可以提供服務(wù)感知,日志級(jí)別配置管理,以及基于 actuator 的 JVM、Spring 容器的眾多管理插件,可以滿足基礎(chǔ)使用的需求。

在調(diào)研期間,Arthas 整體版本為 3.4.5,提供了基于 Webconsole 的 Tunner Server 模式,通過(guò)前面鏈接文章已經(jīng)實(shí)踐,與SBA已經(jīng)可以實(shí)現(xiàn)集成。因?yàn)轫?xiàng)目本身沒(méi)有歷史包袱,在實(shí)際集成的過(guò)程中采用了 SBA 2.0 版本以提供更多的管理功能和圖形界面能力。其他優(yōu)點(diǎn):

web console 界面嵌入 SBA 整體密碼登錄和網(wǎng)頁(yè)權(quán)限管理,實(shí)現(xiàn)登陸 SBA 后才可以使用相關(guān) arthas web console 的功能。 基于SBA 客戶端依賴的 jolokia-core 開放目標(biāo)服務(wù)進(jìn)程的 jmx 管理,通過(guò)實(shí)現(xiàn) jmx 接口復(fù)用 SBA 的相關(guān)操作界面,減少前端界面開發(fā)能力的要求。整體結(jié)構(gòu)

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

幾個(gè)關(guān)鍵點(diǎn),使用 JVM 內(nèi)置 Arthas Spring Boot 插件,參考工商銀行的模式建立完善的客戶端下載以及修改腳本實(shí)現(xiàn)遠(yuǎn)程控制。內(nèi)置方案工作開發(fā)量小,只需要集成相關(guān)的開源組件即可實(shí)現(xiàn)相關(guān)的遠(yuǎn)程使用的模式并兼顧安全。工銀的方案大而全適合整體架構(gòu)規(guī)劃后配置專有研發(fā)團(tuán)隊(duì)之城。內(nèi)置方案同時(shí)包含通過(guò) JMX 的啟停操作(基于 3.4.5 的 Spring Boot 插件無(wú)法獲得相關(guān)句柄,暫時(shí)無(wú)法實(shí)現(xiàn)),默認(rèn)不啟動(dòng)。通過(guò)遠(yuǎn)程 JMX 開通后,JVM 新增相關(guān)線程 8 個(gè),新增虛擬機(jī)內(nèi)存 30MB 左右,和本文參考的 SBA1.0 方案相同,需要考慮在線開啟前 JVM 內(nèi)存是否可以支持。

實(shí)現(xiàn)效果

SBA 2.0 最大的方便就是提供了配置化鏈接外部網(wǎng)頁(yè)的能力,同時(shí)如果網(wǎng)頁(yè)實(shí)現(xiàn)在當(dāng)前 JVM 進(jìn)程,可以實(shí)現(xiàn) Spring-Security 的本地權(quán)限管理,在生產(chǎn)環(huán)境下只有在登錄 SBA 后才能使用相關(guān)集成的 arthas 功能。

登錄界面

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

外嵌連接位置

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

JMX 的使用

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

跳轉(zhuǎn) arthas web console

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

改造方案1. 整體工程結(jié)構(gòu)

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

整體工程修改自 SBA 開源項(xiàng)目的 example 工程,具體使用 custom-ui 的工程鏈接為:[spring-boot-admin-sample-custom-ui]_,_紅色框的部分是 arthas web console 的全部靜態(tài)文件,通過(guò) Maven Resource 的指定配置打入指定目錄,實(shí)現(xiàn) SBA 啟動(dòng)時(shí)的自定義加載。maven resource 配置--下:

<resource><directory>static</directory><targetPath>${project.build.directory}/classes/META-INF/spring-boot-admin-server-ui/extensions/arthas</targetPath><filtering>false</filtering> </resource>2. 外部鏈接配置

SBA 2.0 開始已經(jīng)使用 vue 全家桶了,擴(kuò)展集成均比較方便。其中,官方文檔給出了外嵌連接的配置方式:[Linking / Embedding External Pages]。

參考 sba example 工程的 application.yml 配置即可:

# tag::customization-external-views[] spring: boot:admin: ui: external-views: - label: 'Arthas Console'url: http://21.129.49.153:8080/order: 1900 # end::customization-external-views[]3. 對(duì)應(yīng) Spring MVC controller 實(shí)現(xiàn)

參考引用原實(shí)現(xiàn)的 SBA 集成部分,該部分主要修改實(shí)現(xiàn)如下功能:

實(shí)現(xiàn) tunnel server 已經(jīng)加載實(shí)例列表的刷新并展示到前段 AgentID 框供選擇點(diǎn)擊鏈接。 實(shí)現(xiàn)自定義 IP 地址的刷新(解決生產(chǎn)環(huán)境雙生產(chǎn) IP 和運(yùn)維段 IP 不一致的問(wèn)題)。 4. Arthas Spring Boot 插件修改和配置

參考引用原實(shí)現(xiàn)的 SBA 集成中插件修改以及客戶端配置 application.yml。

對(duì)原版 Spring boot 插件修改主要在于原有插件是通過(guò) Spring的@ConditionalOnMissingBean 實(shí)現(xiàn)自動(dòng)加載。

修改主要是通過(guò)修改這部分實(shí)現(xiàn)通過(guò)配置文件默認(rèn)不啟動(dòng),然后使用時(shí)通過(guò)遠(yuǎn)程啟動(dòng)相關(guān) agent 線程。

5. 基于 Spring Actuator 的 JMX 實(shí)現(xiàn)

SBA client 在 maven 引入中會(huì)默認(rèn)引入 jolokia-core.jar,如果沒(méi)有因?yàn)?SBA client 依賴可以自行引入該包,可以實(shí)現(xiàn)通過(guò) actuator 開放基于 http 的 jmx 操作能力和 SBA 控制臺(tái)的相關(guān)功能無(wú)縫配合。

application.yml 中開放 management 相關(guān)配置,根據(jù)自身環(huán)境情況,也可以開在客戶端側(cè)開啟 Spring security 認(rèn)證,SBA 也可以很好的支持通過(guò)服務(wù)發(fā)現(xiàn)實(shí)現(xiàn)密碼保護(hù) actuator 端點(diǎn)的訪問(wèn)。

#放開management management: endpoints:web: exposure: # 這里用* 代表暴露所有端點(diǎn)只是為了觀察效果,實(shí)際中按照需進(jìn)行端點(diǎn)暴露 include: '*' exclude: env endpoint:health: # 詳細(xì)信息顯示給所有用戶。 show-details: ALWAYS health:status: http-mapping: # 自定義健康檢查返回狀態(tài)碼對(duì)應(yīng)的 http 狀態(tài)碼 FATAL: 503

JMX 實(shí)現(xiàn)參考原文中 EnvironmentChangeListener 的實(shí)現(xiàn)思路,基于 Spring 的 JMX 注解實(shí)現(xiàn)即可。

@Component @ManagedResource(objectName = 'com.ArthasAgentManageMbean:name=ArthasMbean', description = 'Arthas遠(yuǎn)程管理Mbean') public class ArthasMbeanImpl { @Autowired private Map<String, String> arthasConfigMap; @Autowired private ArthasProperties arthasProperties; @Autowired private ApplicationContext applicationContext; /*** 初始化** @return*/ private ArthasAgent arthasAgentInit() { arthasConfigMap = StringUtils.removeDashKey(arthasConfigMap); // 給配置全加上前綴 Map<String, String> mapWithPrefix = new HashMap<String, String>(arthasConfigMap.size()); for (Map.Entry<String, String> entry : arthasConfigMap.entrySet()) { mapWithPrefix.put('arthas.' + entry.getKey(), entry.getValue()); } final ArthasAgent arthasAgent = new ArthasAgent(mapWithPrefix, arthasProperties.getHome(), arthasProperties.isSlientInit(), null); arthasAgent.init(); return arthasAgent; } @ManagedOperation(description = '獲取配置Arthas Tunnel Server地址') public String getArthasTunnelServerUrl() { return arthasProperties.getTunnelServer(); } @ManagedOperation(description = '設(shè)置Arthas Tunnel Server地址,重新attach后生效') @ManagedOperationParameter(name = 'tunnelServer', description = 'example:ws://127.0.0.1:7777/ws') public Boolean setArthasTunnelServerUrl(String tunnelServer) { if (tunnelServer == null || tunnelServer.trim().equals('') || tunnelServer.indexOf('ws://') < 0) { return false; } arthasProperties.setTunnelServer(tunnelServer); return true; } @ManagedOperation(description = '獲取AgentID') public String getAgentId() { return arthasProperties.getAgentId(); } @ManagedOperation(description = '獲取應(yīng)用名稱') public String getAppName() { return arthasProperties.getAppName(); } @ManagedOperation(description = '獲取ArthasConfigMap') public HashMap<String, String> getArthasConfigMap() { return (HashMap) arthasConfigMap; } @ManagedOperation(description = '返回是否已經(jīng)加載Arthas agent') public Boolean isArthasAttched() { DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory(); String bean = 'arthasAgent'; if (defaultListableBeanFactory.containsBean(bean)) { return true; } return false; } @ManagedOperation(description = '啟動(dòng)Arthas agent') public Boolean startArthasAgent() { DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory(); String bean = 'arthasAgent'; if (defaultListableBeanFactory.containsBean(bean)) { ((ArthasAgent) defaultListableBeanFactory.getBean(bean)).init(); return true; } defaultListableBeanFactory.registerSingleton(bean, arthasAgentInit()); return true; } @ManagedOperation(description = '關(guān)閉Arthas agent,暫未實(shí)現(xiàn)') public Boolean stopArthasAgent() { // TODO 無(wú)法獲取自定義tmp文件夾加載的classLoader,因此無(wú)法獲取到com.taobao.arthas.core.server.ArthasBootstrap類并調(diào)用destroy方法 DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory(); String bean = 'arthasAgent'; if (defaultListableBeanFactory.containsBean(bean)) { defaultListableBeanFactory.destroySingleton(bean); return true; } else { return false; } } }實(shí)際使用

管理工程投產(chǎn)后,多次在生產(chǎn)環(huán)境用于問(wèn)題排查和代碼熱修復(fù)。性能問(wèn)題主要用于性能流控組件以及灰度發(fā)布相關(guān)配置參數(shù)的在線驗(yàn)證和 debug。

代碼熱加載相關(guān)初期通過(guò) jad+mc 的方式進(jìn)行操作,后續(xù)發(fā)現(xiàn) jad 在部分代碼上因環(huán)境配置以及 jvm 問(wèn)題產(chǎn)生反編譯代碼不一致的情況,后續(xù)通過(guò) maven 打包部署應(yīng)用程序 source 壓縮包的方式解決,直接使用和應(yīng)用 jar 同版本構(gòu)建的 source 進(jìn)行修改更加可靠。整體方案在管理較為嚴(yán)格的生產(chǎn)環(huán)境提供了有效的性能分析以及熱修復(fù)的能力。

遺留問(wèn)題

現(xiàn)有官方提供的 com.taobao.arthas.agent.attach.ArthasAgent 中啟動(dòng) arthas agent 的客戶端使用的 arthasClassLoader 和 bootstrapClass 均為方法內(nèi)的臨時(shí)變量,外部無(wú)法獲取相關(guān)句柄實(shí)現(xiàn)通過(guò) bootstrapClass 關(guān)閉 arthas agent 的功能;臨時(shí)解決方案為通過(guò) JMX 啟動(dòng)后,在 web console 連接使用后,使用 stop 命令實(shí)現(xiàn)目標(biāo)進(jìn)程中 arthas agent 的關(guān)閉。

現(xiàn)有字節(jié)碼加載工具可以很好的實(shí)現(xiàn)內(nèi)部類,私有類的在線熱部署替換,同時(shí)經(jīng)測(cè)試可以兼容 SkyWalk8.x 版本的 javaagent 插件,但是在測(cè)試環(huán)境因?yàn)榕渲糜?jacoco 覆蓋度采集插件與 Arthas 字節(jié)碼產(chǎn)生了不兼容的情況,在部分環(huán)境使用時(shí)需要先關(guān)閉對(duì)應(yīng)的 agent 后才能正常使用 arthas 的相關(guān)功能。

歡迎登陸 start.aliyun.com 知行動(dòng)手實(shí)驗(yàn)室體驗(yàn) Arthas 57 個(gè)動(dòng)手實(shí)驗(yàn):

SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟

以上就是SpringBoot Admin2.0 集成Arthas的實(shí)現(xiàn)步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Admin2.0 集成Arthas的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
中文一区二区完整视频在线观看| 亚洲欧美日韩久久精品| 中文在线免费一区三区高中清不卡| 国产综合色视频| 欧美精品一二三| 精品无人区卡一卡二卡三乱码免费卡| 美日韩在线观看| 亚洲3atv精品一区二区三区| 一区二区三区你懂的| 亚洲日本欧美天堂| 国产一区日韩欧美| 国产欧美日韩在线| 午夜精品视频| 中文字幕欧美日韩一区| 欧美日韩一区二区视频在线观看| 精品成人佐山爱一区二区| jvid福利写真一区二区三区| 精品国产乱子伦一区| 丰满放荡岳乱妇91ww| 日韩一区二区三区免费观看| 国内精品国产成人| 欧美一区二区三区精品| 国产麻豆精品在线| 91精品国产91久久久久久最新毛片| 久久se精品一区二区| 欧美日韩成人在线一区| 国产高清精品网站| 日韩欧美亚洲国产精品字幕久久久| 国产成人av网站| 日韩免费观看高清完整版 | 久久久久久久精| www..com久久爱| 日本一区二区三级电影在线观看| 欧美成人一品| 亚洲视频免费在线观看| 国产欧美三级| 秋霞国产午夜精品免费视频| 欧美夫妻性生活| 成人一二三区视频| 国产片一区二区| 激情一区二区| 亚洲韩国一区二区三区| 欧洲亚洲国产日韩| 成人听书哪个软件好| 精品成人在线观看| 欧美日韩网站| 亚洲另类色综合网站| 久久狠狠婷婷| 精品一区二区三区在线观看| 欧美精品123区| 波多野结衣中文字幕一区| 亚洲国产精品精华液ab| 亚洲开发第一视频在线播放| 图片区日韩欧美亚洲| 欧美日韩第一区日日骚| 国产精品一区一区三区| 久久久久久毛片| 狠狠色噜噜狠狠色综合久| 亚洲动漫第一页| 欧美日韩一级黄| 94-欧美-setu| 亚洲激情图片一区| 91久久久免费一区二区| 成人黄色电影在线| 亚洲女同一区二区| 欧美中文字幕久久| 99视频有精品| 一区二区在线观看不卡| 欧美日韩在线播| 欧美成人有码| 午夜精品久久久久久不卡8050| 在线不卡一区二区| 狠狠色综合网| 美国毛片一区二区三区| 精品处破学生在线二十三| 99国产精品久久久久久久成人热| 久久av资源网| 久久综合久久鬼色中文字| 夜夜夜久久久| 国产毛片精品视频| 亚洲丝袜精品丝袜在线| 欧美综合亚洲图片综合区| 99在线精品视频| 日韩精品1区2区3区| 亚洲精品一区二区三区福利| 国产日韩专区| 成人国产在线观看| 亚洲风情在线资源站| 精品国产乱码久久久久久闺蜜| 国产精品久久久亚洲一区| 国产伦精品一区二区三区免费迷 | 日本vs亚洲vs韩国一区三区| 久久久久国产一区二区三区四区| 亚洲综合另类| av高清久久久| 日韩成人午夜精品| 国产精品网曝门| 欧美二区三区91| 国产精品免费区二区三区观看| 国产91在线|亚洲| 玉米视频成人免费看| 日韩欧美国产精品一区| 老妇喷水一区二区三区| 午夜视频精品| 国产乱码精品一区二区三区五月婷 | 精品一区二区三区在线观看 | 国产一区二区剧情av在线| 亚洲免费av网站| 精品久久久三级丝袜| 欧美网站一区二区| a91a精品视频在线观看| 丰满岳乱妇一区二区三区| 婷婷国产在线综合| 中文字幕不卡一区| 日韩欧美国产一二三区| 91福利国产精品| 日韩天天综合| 欧美黄色免费| 国产精品系列在线播放| 亚洲超碰97人人做人人爱| 久久精品免费在线观看| 777奇米四色成人影色区| 香蕉久久国产| 激情综合激情| 成人a区在线观看| 精品一区二区三区视频在线观看 | 成人午夜短视频| 奇米888四色在线精品| 亚洲精品网站在线观看| 久久精品视频在线免费观看| 精品视频色一区| 免费看的黄色欧美网站| 欧美日韩蜜桃| 成人黄色国产精品网站大全在线免费观看 | 国产一区二区不卡老阿姨| 图片区小说区区亚洲影院| 中文字幕一区二区三区四区不卡| 欧美大度的电影原声| 欧美日韩一区二区三区在线| 美女图片一区二区| 国产欧美另类| 一区在线视频观看| 99精品国产99久久久久久白柏| 激情欧美一区二区三区在线观看| 五月婷婷综合在线| 夜夜嗨av一区二区三区四季av | 国产福利一区在线观看| 五月天婷婷综合| 亚洲综合在线视频| 亚洲日本乱码在线观看| 欧美国产在线观看| 久久久美女毛片| 日韩免费性生活视频播放| 欧美女孩性生活视频| 日本福利一区二区| 色欧美日韩亚洲| 久久国产日韩| 久久久久九九九| 亚洲一区欧美二区| 日韩一区二区免费看| 欧美日本二区| 欧美日韩精品不卡| 欧美成人首页| 欧美日韩三级电影在线| 欧美日韩系列| 黑人中文字幕一区二区三区| 欧美日韩一区二区国产| 欧美色123| 欧美午夜精品| 韩日欧美一区| 亚洲三级网站| 中文精品在线| 午夜在线a亚洲v天堂网2018| 性色一区二区三区| 久久亚洲色图| 91激情五月电影| 欧美日本一区二区| 欧美日韩美少妇| 欧美日本高清视频在线观看| 6080午夜不卡| 欧美高清视频www夜色资源网| 欧美高清一级片在线| 制服丝袜在线91| 日韩亚洲电影在线| 久久久久亚洲蜜桃| 欧美国产一区视频在线观看| 国产精品短视频| 伊人婷婷欧美激情| 午夜精品一区二区三区电影天堂 | 久久电影网站中文字幕 | 成人午夜免费av| 91免费在线视频观看| 欧美日韩久久| 9久re热视频在线精品| 美女尤物久久精品| 欧美性大战久久久久久久| 日韩视频永久免费| 国产性做久久久久久| 18欧美乱大交hd1984| 亚洲一区二区三区激情|