如何利用 Webshell 診斷 EDAS Serverless 應用

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

Webshell 簡介

用戶能夠經過阿里雲控制檯直接獲取 ECS 的 Shell,從而完成本身的運維需求。若是 ECS 內開啓了 SSH 服務,且 ECS 存在彈性公網 IP,那麼用戶也能夠在本地經過 SSH 服務獲取 ECS 的 Shell 完成運維需求。java

因爲 EDAS Serverless 特殊的架構以及網絡環境,用戶暫時沒法直接從本地經過 SSH 服務獲取應用容器的 Shell。在 Serverless 場景中,容器是一個暫態的、供應用運行的環境,通常來講不須要進入運維。爲了方便用戶進行線上問題定位排查,EDAS 在控制檯提供了一個簡單的Webshell,供用戶查看調試本身的容器。git

EDAS 默認給出的 Jar War 類型應用的容器基礎鏡像主要是面向應用運行時,不帶有冗餘的排查工具,所以對運維人員可能不夠友好。對於用戶自身的鏡像,不須要鏡像中啓動 SSH 服務,只須要帶有可執行的/bin/bash便可。用戶本身的鏡像能夠帶上必須的運維工具方便排查。目前 Webshell 不支持 Windows 鏡像。github

EDAS 應用節點的網絡環境

EDAS 應用節點處於用戶本身購買的阿里雲 VPC 內。在 EDAS 中,還額外提供了一層中間件服務調用隔離的手段:EDAS 命名空間。EDAS 命名空間與 VPC 內的 VSWITCH 是綁定關係,一個 EDAS 命名空間對應一個 VSWITCH,一個 VSWITCH 能夠對應多個EDAS命名空間。VPC 的原理以及基本的產品狀況能夠在阿里雲VPC官方文檔瞭解。簡單來說,VPC 內的 IP 地址爲局域網地址,不一樣 VPC 內的2層以上數據包沒法路由到目的地。EDAS 命名空間主要作中間件邏輯隔離,不一樣命名空間內的應用在中間件層面是隔離的,如服務發現以及配置下發等。shell

因爲 VPC 的產品特性以及當前的 EDAS Serverless 的產品特性,容器沒法直接觸達 VPC 外的服務(阿里雲產品除外,如 OSS、鏡像服務等)。在沒有額外配置的狀況下,你的容器運行在網絡「孤島」環境。centos

瞭解了基本的網絡狀況,如今能夠明白爲何用戶沒法直接觸達本身的容器了。bash

容器內須要訪問公網服務,能夠經過購買 NAT,並配置 VPC 內 VSWITCH 的SNAT規則便可,詳見阿里雲Serverless文檔。SNAT規則可讓VPC內地址訪問公網地址,從而使用公網暴露的服務,獲取到公網的資源。網絡

EDAS 構建的鏡像的方案

基於阿里雲容器鏡像服務,EDAS 集成了爲用戶構建以及管理鏡像的功能。用於構建的基礎鏡像爲centos:7,在此基礎上爲用戶配置好了時區、語言與編碼方式、Open JDK 運行環境。容器存在的目的是爲了讓應用運行起來,EDAS 不可能以佔用全部用戶運行時資源爲代價,集成過多的工具,對於容器內工具備需求的用戶,建議自行構建鏡像,或者按需從 OSS 拉取。架構

常見的分析手段

線上容器的運維通常是沒必要要的。若是你肯定須要進入容器進行運維,請務必瞭解你的操做對線上業務的風險:對於單點應用,你的行爲可能致使容器 OOM,從而致使分鐘級別的業務中斷,而對於多點部署的業務,上述現象可能形成業務秒級中斷。app

診斷 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能夠很方便地實時查看類加載狀況,觀察方法出入參,環境變量等。
# 接入arthas,需求打通公網
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
  • 對於網絡層的診斷,在瞭解上述EDAS應用節點網絡狀況的前提下,通常能夠經過curl -v {host/ip} {port}檢查域名解析以及連通性,經過tcpdump抓包觀察分析網絡調用狀況。

日誌上傳解決方案

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

## 以64位centos系統,root下
## 沒有打通公網的狀況下能夠選擇在本地下載,而後將這個文件上傳到oss,而後取oss的vpc內地址進行下載
wget http://gosspublic.alicdn.com/ossutil/1.5.0/ossutil64
chmod 755 ossutil64
  • 而後配置你的 OSS 命令行工具,附上當前 region VPC 內的endpoint(VPC內的上傳不要求打通公網,也不消耗公網帶寬流量,更加經濟),填寫用於接收上傳文件的帳號的AK/SK,而後查看已經建立的Bucket,來檢查你的OSS服務是否可用。
## 請先確保帳號(沒必要是當前帳號,任意開通阿里雲oss服務的帳號都可)已開通 OSS 服務
## 按照提示配置你的 AK SK endpoint信息,ststoken 不須要填寫
./ossutil64 config
## 檢查帳號是否可用,若是報錯則配置錯誤,若是沒有bucket,則建議前往oss控制檯建立,命令行工具也支持建立
./ossutil64 ls
## 這裏建立一個模擬的日誌文件,用於上傳
echo "Hello" > edas-app.log
./ossutil64 cp edas-app.log {bucket-address,例如:oss://test-bucket,能夠從上述命令"./ossutil64 ls"中查看}
  • 從 OSS 控制檯或其餘工具中找到你的日誌文件,下載到本地,並使用你熟悉的工具進行分析。

原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索