掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在日常系統(tǒng)運(yùn)行過程中,故障總是不期而遇。一旦出現(xiàn)故障通常是查監(jiān)控,翻各種日志,從大量的日志中尋找蛛絲馬跡。如果問題現(xiàn)場的日志記錄缺失,會嘗試在本地重現(xiàn)問題并調(diào)試解決,本地難以重現(xiàn)的,只能再加日志,再部署,再重現(xiàn),然后再查日志,效率較低。對于復(fù)雜一些的比如程序性能問題,如何定位性能瓶頸,一不小心又要回到加日志、部署、查日志、再加日志的老路,不僅效率不高,也破壞了問題現(xiàn)場。

創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、察哈爾右翼后網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為察哈爾右翼后等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
所以針對以上問題,我們的目標(biāo)是建立一個(gè)Java應(yīng)用在線診斷平臺,讓開發(fā)人員無需登錄機(jī)器或修改系統(tǒng),就可以從日志、內(nèi)存、線程、類信息、調(diào)試、機(jī)器和系統(tǒng)屬性等各個(gè)方面對應(yīng)用進(jìn)行診斷,提升開發(fā)人員診斷問題的效率和能力。
我們期望有一套架構(gòu),讓開發(fā)人員以Web UI的方式使用各類在線診斷能力。
架構(gòu)概覽
瀏覽器是開發(fā)人員進(jìn)行在線診斷的入口,tunnel server通過Web UI的方式提供在線診斷能力,支持復(fù)雜的交互場景。
提供兩個(gè)方面的功能,分別是:
瀏覽器通過http與tunnel server的12201端口進(jìn)行交互;
連接指定IP的arthas agent機(jī)器、斷開指定IP的arthas agent機(jī)器、查看指定IP的arthas agent生成的文件。
瀏覽器通過websocket與tunnel server的12202端口進(jìn)行交互;
支持各種arthas診斷指令:dashboard、heapdump、thread、vmtool等。
arthas agent作為websocket客戶端與tunnel server的12202端口進(jìn)行交互;
arthas agent通過attach應(yīng)用進(jìn)程實(shí)現(xiàn)對應(yīng)用進(jìn)程的診斷。
核心流程
流程說明:
1.1 tunnel server 監(jiān)聽12201端口,該端口用于展示W(wǎng)eb UI
1.2 tunnel server監(jiān)聽12202端口,該端口用于與瀏覽器進(jìn)行websocket交互,也用于與arthas agent進(jìn)行websocket交互
1.3 應(yīng)用程序通過引入arthas pom依賴,在應(yīng)用部署的時(shí)候?qū)rthas安裝包安裝到服務(wù)器上
2.1 通過在瀏覽器上訪問:
http://tunner_server_ip:12201,打開Web UI
2.2 在Web UI上輸入要診斷的服務(wù)器IP,點(diǎn)擊Connect,建立與tunner server 12202端口的websocket連接,發(fā)送請求為:
ws://tunner_server_ip:12202/ws?method=connectArthas&id=服務(wù)器IP
2.3 tunner server根據(jù)服務(wù)器IP獲取與arthas agent的control connection
2.4 如果control connection沒有建立,則通過訪問
http://arthas_agent_IP:12230?tunnerserver=ws://tunner_server_ip:12202/ws,觸發(fā)arthas agent初始化、attach應(yīng)用進(jìn)程。
2.5 arthas agent創(chuàng)建與tunner server的websocket連接:
此時(shí)創(chuàng)建的websocket連接稱為:control connection。
2.6 control connection已創(chuàng)建成功,則向arthas agent tunnel client發(fā)送:response:/?method=startTunnel&id=服務(wù)器IP&clientCnotallow=connectionIDxxx,請求建立連接;
arthas agent tunnel client收到startTunnel請求后,新建與tunnel server的連接,并發(fā)送:ws://tunner_server_ip:12202/ws/?method=openTunnel&clientCnotallow=connectionIDxxx&id=服務(wù)器IP
此時(shí)創(chuàng)建的websocket連接稱為:tunnel connection;
同時(shí)創(chuàng)建與arthas agent的本地連接:ws://127.0.0.1:3658/ws,此時(shí)創(chuàng)建的連接稱為:local connection
3.13.2 執(zhí)行診斷命令鏈路如下:
交互邏輯
arthas本身提供了tunner server功能,我們主要需要解決的有兩個(gè)問題:
將arthas打包進(jìn)操作系統(tǒng)鏡像中,保證新初始化的ECS實(shí)例中含有最新版本的arthas;對于已經(jīng)存在的ECS實(shí)例則需要想辦法進(jìn)行arthas版本更新。
第2.2步驟當(dāng)對指定服務(wù)器進(jìn)行診斷的時(shí)候,在tunnel server或其他旁路系統(tǒng)通過ssh方式將arthas安裝包拷貝的指定服務(wù)器。
在應(yīng)用進(jìn)程初始化的時(shí)候,加載自定義的javaagent,該javaagent實(shí)現(xiàn)下載、解壓arthas的功能。
第2.2步驟當(dāng)對指定服務(wù)器進(jìn)行診斷的時(shí)候,tunnel server或其他旁路系統(tǒng)通過與指定服務(wù)器javaagent通訊,通過javaagent完成arthas下載、解壓。
應(yīng)用通過引入arthas pom,將arthas打包進(jìn)應(yīng)用部署包中。
com.taobao.arthas
arthas-agent-attach
3.6.7
com.taobao.arthas
arthas-packaging
3.6.7
在應(yīng)用工程中新建一個(gè)Controller,該Controller實(shí)現(xiàn)arthas agent初始化功能。
tunnel server通過現(xiàn)有的Web Server訪問Controller接口觸發(fā)arthas agent初始化。
注意:
創(chuàng)建獨(dú)立的HTTP Server,主要是為了使得tunnel server能夠訪問新監(jiān)聽的端口,解決【復(fù)用Web Server】端口面臨的兩個(gè)問題。
注意:
根據(jù)應(yīng)用使用的RPC框架,新建對應(yīng)的RPC Provider,tunnel server直接調(diào)用指定IP的RPC Provider完成arthas agent的初始化。該方式的好處是不用新開放監(jiān)聽端口。
注意:
tunnel server作為MQ Producer發(fā)送報(bào)文(報(bào)文中包含指定服務(wù)器的IP)到MQ Broker,應(yīng)用中新建MQ Consumer消費(fèi)tunnel server的報(bào)文,如果報(bào)文中IP與本機(jī)一致則處理,不一致則丟棄。
思路與【通過MQ】一致,按照apollo等配置中心相關(guān)API進(jìn)行實(shí)現(xiàn)。
思路與【通過MQ】一致,按照Redis相關(guān)通訊機(jī)制進(jìn)行實(shí)現(xiàn)。
tunner server或旁路系統(tǒng)有權(quán)限直接ssh指定服務(wù)器,通過腳本方式觸發(fā)arthas agent初始化。
在AgentId的文本框里輸入要診斷的服務(wù)器IP,稍等一會就可以進(jìn)行診斷了。
web console
dashboard
thread示例
thread
monitor示例
monitor
JVM options示例
jvm options
console
terminal與tunner server UI基本一致,不同的是該terminal是直接訪問的目標(biāo)服務(wù)器。
以上方案只是簡單的應(yīng)用,期望以后可以不斷的迭代優(yōu)化。

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流