阿里巴巴Arthas診斷工具平臺化改造

Arthas是一款開源且非常棒的在線診斷工具,阿里巴巴在16年就出品了,經過幾年的功能迭代以及代碼重構又出了不少新的診斷命令

在Github上面搜索Arthas即可下載源碼,原生的Arthas實現了TunnelClient和TunnelServer的交互,但是總的來說還是單機版本的,在大企業中使用的時候避免不了需要封裝改造下,不可能每次監控都去手動輸入一個registerId,下面就介紹我們對他的改造過程,讓他變成一個平臺化的診斷工具

我們這邊的設計思路是這樣的:

  • 先改造arthas-client通過容器的環境變量等參數註冊自身應用信息到arthas-server
  • arthas-client 植入到基礎鏡像中,然後通過agent方式運行arthas-client
  • 改造arthas-server源碼,植入公司權限系統以及可視化應用-節點選擇自動鏈接診斷

arthas-agent方式啓動的話,需要幾個入參,原先client-server交互是通過netty的socket來實現的,原先完整發送的socket-url是:ws://xxx/ws,註冊ID是server端隨機生成的,我們改造後變成ws://xx/ws/project/appname/ip,參數解析:項目名,應用名,應用ip,這些參數主要是爲了server端的web頁面可以下拉選可視化操作使用的

我們在這裏分析agent源碼後發現,源碼中的premain是需要找到arthas-core.jar的,我們處理時一起放到基礎鏡像中,然後在premain中指定core的路徑

arthas-client的改造只需要到這裏就可以了,剩下的是server端的改造,主要思路是:server端接收到client註冊請求後,將項目名、應用名、節點ip、arthas註冊id存儲到數據庫中,供前端web頁面可以下拉選

我們也對server端代碼進行了部分重構,原先代碼結構還是比較混亂的,簡單介紹下核心需要關注的server源碼類

主要需要關注這三個類,RegisterHandler是client進行socket連接時使用到的,ConnectionHandler是web-socket鏈接server時的第一步操作,成功之後會使用OpenTunnel

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章