如何利用 Webshell 診斷 EDAS Serverless 應用

雲棲社群v發表於2019-04-03

640?wx_fmt=jpeg


本文主要介紹 Serverless 應用的網路環境以及 Serverless 應用容器內的環境,瞭解背景知識以及基本的運維知識後可以利用 Webshell 完成基本的運維需求。


Webshell 簡介


使用者可以通過阿里雲控制檯直接獲取 ECS 的 Shell,從而完成自己的運維需求。如果 ECS 內開啟了 SSH 服務,且 ECS 存在彈性公網 IP,那麼使用者也可以在本地通過 SSH 服務獲取 ECS 的 Shell 完成運維需求。


由於 EDAS Serverless 特殊的架構以及網路環境,使用者暫時無法直接從本地通過 SSH 服務獲取應用容器的 Shell。在 Serverless 場景中,容器是一個暫態的、供應用執行的環境,一般來說不需要進入運維。為了方便使用者進行線上問題定位排查,EDAS 在控制檯提供了一個簡單的Webshell,供使用者檢視除錯自己的容器。


640?wx_fmt=png


EDAS 預設給出的 Jar War 型別應用的容器基礎映象主要是面向應用執行時,不帶有冗餘的排查工具,因此對運維人員可能不夠友好。對於使用者自身的映象,不需要映象中啟動 SSH 服務,只需要帶有可執行的/bin/bash即可。使用者自己的映象可以帶上必須的運維工具方便排查。目前 Webshell 不支援 Windows 映象。


640?wx_fmt=png


EDAS 應用節點的網路環境


EDAS 應用節點處於使用者自己購買的阿里雲 VPC 內。在 EDAS 中,還額外提供了一層中介軟體服務呼叫隔離的手段:EDAS 名稱空間。EDAS 名稱空間與 VPC 內的 VSWITCH 是繫結關係,一個 EDAS 名稱空間對應一個 VSWITCH,一個 VSWITCH 可以對應多個EDAS名稱空間。VPC 的原理以及基本的產品情況可以在阿里雲VPC官方文件瞭解。簡單來講,VPC 內的 IP 地址為區域網地址,不同 VPC 內的2層以上資料包無法路由到目的地。EDAS 名稱空間主要做中介軟體邏輯隔離,不同名稱空間內的應用在中介軟體層面是隔離的,如服務發現以及配置下發等。


由於 VPC 的產品特性以及當前的 EDAS Serverless 的產品特性,容器無法直接觸達 VPC 外的服務(阿里雲產品除外,如 OSS、映象服務等)。在沒有額外配置的情況下,你的容器執行在網路“孤島”環境。


瞭解了基本的網路情況,現在可以明白為什麼使用者無法直接觸達自己的容器了。


640?wx_fmt=png


容器內需要訪問公網服務,可以通過購買 NAT,並配置 VPC 內 VSWITCH 的SNAT規則即可,詳見阿里雲Serverless文件。SNAT規則可以讓VPC內地址訪問公網地址,從而使用公網暴露的服務,獲取到公網的資源。


EDAS 構建的映象的方案


基於阿里雲容器映象服務,EDAS 整合了為使用者構建以及管理映象的功能。用於構建的基礎映象為centos:7,在此基礎上為使用者配置好了時區、語言與編碼方式、Open JDK 執行環境。容器存在的目的是為了讓應用執行起來,EDAS 不可能以佔用所有使用者執行時資源為代價,整合過多的工具,對於容器內工具有需求的使用者,建議自行構建映象,或者按需從 OSS 拉取。


常見的分析手段


線上容器的運維一般是不必要的。如果你確定需要進入容器進行運維,請務必瞭解你的操作對線上業務的風險:對於單點應用,你的行為可能導致容器 OOM,從而導致分鐘級別的業務中斷,而對於多點部署的業務,上述現象可能造成業務秒級中斷。


診斷 EDAS 應用一般從這幾個方面入手:常規檢查,上傳蒐集的日誌。


常規檢查


常規檢查的方法比較多,以 Java 應用為例,一般是檢查程式、執行緒以及 JVM 的健康狀態。


  • 首先執行命令ps -ef | grep java檢查你的 Java 程式是否還存在。這裡必須特別說明的是,容器內一般需要使用主程式啟動你的應用,這樣一旦你的應用被kill掉,容器也會退出,EDAS 會將退出的容器重新啟動,防止業務中斷。

  • 如果程式不見了,可以執行命令dmesg | grep -i kill檢視OOM相關日誌。如果存在日誌,那麼說明你的應用程式被 kill 掉了,接著檢查工作目錄下hs_err_pid{PID}.log日誌檔案,定位具體的原因。

  • Java 型別應用的線上分析可以使用阿里巴巴開源軟體 Arthas 解決,建議在測試映象中整合Arthas工具進行常規診斷。Arthas可以很方便地實時檢視類載入情況,觀察方法出入參,環境變數等。


640?wx_fmt=png


  • 對於網路層的診斷,在瞭解上述EDAS應用節點網路情況的前提下,一般可以通過curl -v {host/ip} {port}檢查域名解析以及連通性,通過tcpdump抓包觀察分析網路呼叫情況。


日誌上傳解決方案


受限於容器內工具的匱乏,比較推薦的方案是將容器內蒐集到的日誌上傳到雲端,然後下載到本地進行分析。目前,EDAS 暫時沒有提供容器內日誌的下載功能,這裡給出一種基於阿里雲 OSS 服務的解決方案。OSS 打通了阿里雲生態幾乎所有的網路環境,你幾乎可以在任何網路環境下上傳以及下載 OSS 上的檔案。


  • 首先在容器內部安裝OSS命令列工具。


640?wx_fmt=png


  • 然後配置你的 OSS 命令列工具,附上當前 region VPC 內的endpoint(VPC內的上傳不要求打通公網,也不消耗公網頻寬流量,更加經濟),填寫用於接收上傳檔案的賬號的AK/SK,然後檢視已經建立的Bucket,來檢查你的OSS服務是否可用。


640?wx_fmt=png


  • 從 OSS 控制檯或其他工具中找到你的日誌檔案,下載到本地,並使用你熟悉的工具進行分析。


本文作者:

落語:阿里雲智慧中介軟體技術開發工程師,負責分散式應用服務 EDAS 的開發和維護。


更多精彩


640?wx_fmt=jpeg

對話Ruby創始人松本行弘、阿里高階技術專家樸靈!


640?wx_fmt=jpeg

【資料合集】2019阿里雲峰會•北京回顧合集:PDF下載


640?wx_fmt=jpeg

我在阿里雲做前端


640?wx_fmt=other

如果覺得本文還不錯,點選好看一下!

相關文章