本文主要介紹 Serverless 應用的網絡環境以及 Serverless 應用容器內的環境,瞭解背景知識以及基本的運維知識後能夠利用 Webshell 完成基本的運維需求。html
用戶能夠經過阿里雲控制檯直接獲取 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 應用節點處於用戶本身購買的阿里雲 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 集成了爲用戶構建以及管理鏡像的功能。用於構建的基礎鏡像爲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
日誌文件,定位具體的緣由。# 接入arthas,需求打通公網 wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar
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服務的帳號都可)已開通 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"中查看}
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。