如何利用 Webshell 診斷 EDAS Serverless 應用
本文主要介紹 Serverless 應用的網路環境以及 Serverless 應用容器內的環境,瞭解背景知識以及基本的運維知識後可以利用 Webshell 完成基本的運維需求。
Webshell 簡介
使用者可以通過阿里雲控制檯直接獲取 ECS 的 Shell,從而完成自己的運維需求。如果 ECS 內開啟了 SSH 服務,且 ECS 存在彈性公網 IP,那麼使用者也可以在本地通過 SSH 服務獲取 ECS 的 Shell 完成運維需求。
由於 EDAS Serverless 特殊的架構以及網路環境,使用者暫時無法直接從本地通過 SSH 服務獲取應用容器的 Shell。在 Serverless 場景中,容器是一個暫態的、供應用執行的環境,一般來說不需要進入運維。為了方便使用者進行線上問題定位排查,EDAS 在控制檯提供了一個簡單的Webshell,供使用者檢視除錯自己的容器。
EDAS 預設給出的 Jar War 型別應用的容器基礎映象主要是面向應用執行時,不帶有冗餘的排查工具,因此對運維人員可能不夠友好。對於使用者自身的映象,不需要映象中啟動 SSH 服務,只需要帶有可執行的/bin/bash即可。使用者自己的映象可以帶上必須的運維工具方便排查。目前 Webshell 不支援 Windows 映象。
EDAS 應用節點的網路環境
EDAS 應用節點處於使用者自己購買的阿里雲 VPC 內。在 EDAS 中,還額外提供了一層中介軟體服務呼叫隔離的手段:EDAS 名稱空間。EDAS 名稱空間與 VPC 內的 VSWITCH 是繫結關係,一個 EDAS 名稱空間對應一個 VSWITCH,一個 VSWITCH 可以對應多個EDAS名稱空間。VPC 的原理以及基本的產品情況可以在阿里雲VPC官方文件瞭解。簡單來講,VPC 內的 IP 地址為區域網地址,不同 VPC 內的2層以上資料包無法路由到目的地。EDAS 名稱空間主要做中介軟體邏輯隔離,不同名稱空間內的應用在中介軟體層面是隔離的,如服務發現以及配置下發等。
由於 VPC 的產品特性以及當前的 EDAS Serverless 的產品特性,容器無法直接觸達 VPC 外的服務(阿里雲產品除外,如 OSS、映象服務等)。在沒有額外配置的情況下,你的容器執行在網路“孤島”環境。
瞭解了基本的網路情況,現在可以明白為什麼使用者無法直接觸達自己的容器了。
容器內需要訪問公網服務,可以通過購買 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可以很方便地實時檢視類載入情況,觀察方法出入參,環境變數等。
對於網路層的診斷,在瞭解上述EDAS應用節點網路情況的前提下,一般可以通過curl -v {host/ip} {port}檢查域名解析以及連通性,通過tcpdump抓包觀察分析網路呼叫情況。
日誌上傳解決方案
受限於容器內工具的匱乏,比較推薦的方案是將容器內蒐集到的日誌上傳到雲端,然後下載到本地進行分析。目前,EDAS 暫時沒有提供容器內日誌的下載功能,這裡給出一種基於阿里雲 OSS 服務的解決方案。OSS 打通了阿里雲生態幾乎所有的網路環境,你幾乎可以在任何網路環境下上傳以及下載 OSS 上的檔案。
首先在容器內部安裝OSS命令列工具。
然後配置你的 OSS 命令列工具,附上當前 region VPC 內的endpoint(VPC內的上傳不要求打通公網,也不消耗公網頻寬流量,更加經濟),填寫用於接收上傳檔案的賬號的AK/SK,然後檢視已經建立的Bucket,來檢查你的OSS服務是否可用。
從 OSS 控制檯或其他工具中找到你的日誌檔案,下載到本地,並使用你熟悉的工具進行分析。
本文作者:
落語:阿里雲智慧中介軟體技術開發工程師,負責分散式應用服務 EDAS 的開發和維護。
更多精彩
相關文章
- [JVM] 應用診斷工具之Fastthread(線上診斷)JVMASTthread
- 線上診斷神器-arthas基本應用
- ThreadDump和Java應用診斷(轉)threadJava
- Thread Dump 和Java應用診斷threadJava
- 如何使用 dotTrace 來診斷 netcore 應用的效能問題NetCore
- 利用 Java dump 進行 JVM 故障診斷JavaJVM
- 利用資源限制效能診斷resource limitMIT
- ORACLE 如何診斷高水位爭用(enq: HW – contention)OracleENQ
- 如何選擇java診斷工具Java
- 利用hanganalyz/systemstate dump診斷資料庫hang資料庫
- 用 Docker 建立 serverless 應用DockerServer
- 深度學習 | 如何開發、部署 Serverless 應用?深度學習Server
- 從零入門 Serverless | Serverless 應用如何管理日誌 & 持久化資料Server持久化
- 應用崩潰了?Android vitals 幫您精確診斷應用崩潰Android
- 用google/gops診斷Golang程式Golang
- 如何診斷RAC系統中的
- 利用errorstack事件進行錯誤跟蹤和診斷Error事件
- 即學即會 Serverless | 如何解決 Serverless 應用開發部署的難題?Server
- 診斷和解決CPU利用率高的問題(zt)
- 如何診斷等待事件 enq: HW - contention事件ENQ
- 重磅釋出 | Serverless 應用中心:Serverless 應用全生命週期管理平臺Server
- 如何使用Akka Serverless製作電子商務應用?Server
- webshell應急排查方案Webshell
- 應急響應-webshell查殺Webshell
- SysAK 應用抖動診斷篇—— eBPF又立功了! | 龍蜥技術eBPF
- ORACLE診斷案例Oracle
- Oracle故障診斷Oracle
- ORACLE診斷事件Oracle事件
- 診斷事件(1)事件
- 利用京東雲Serverless服務快速構建5G時代的IoT應用Server
- 從零入門 Serverless | 線上應用的 Serverless 實踐Server
- 如何利用 Google AdMob從應用獲利?Go
- 用 Arthas 神器來診斷 HBase 異常程式
- 實用的Google安全瀏覽診斷工具Go
- 如何診斷和解決db2問題DB2
- win10系統如何禁用診斷工具Win10
- 如何診斷伺服器關閉的原因伺服器
- Win10系統下網路診斷在哪_win10系統如何使用網路診斷Win10