如何利用 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 控制臺或其他工具中找到你的日志文件,下載到本地,并使用你熟悉的工具進行分析。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的如何利用 Webshell 诊断 EDAS Serverless 应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019阿里云开年Hi购季满返活动火热报
- 下一篇: 新手也能看懂,消息队列其实很简单