使用Webshell診斷應(yīng)用
SAE容器提供了臨時(shí)的應(yīng)用運(yùn)行環(huán)境,通常無(wú)需運(yùn)維。為了方便定位和排查線上問(wèn)題,您可以使用SAE控制臺(tái)提供的簡(jiǎn)易版Webshell,查看并調(diào)試容器。SAE容器的基礎(chǔ)鏡像是面向應(yīng)用運(yùn)行時(shí)的且暫時(shí)狀態(tài)的,因此您無(wú)需在鏡像中啟動(dòng)SSH服務(wù),僅需帶有可執(zhí)行的/bin/bash
,同時(shí)建議您帶上所需的運(yùn)維工具以便排查。
使用限制
Webshell不支持Windows鏡像。
應(yīng)用的網(wǎng)絡(luò)環(huán)境
SAE應(yīng)用置于自建的VPC網(wǎng)絡(luò),并提供了命名空間功能,可以將中間件層面的服務(wù)調(diào)用進(jìn)行邏輯隔離。命名空間與VPC內(nèi)的vSwitch為綁定關(guān)系,一個(gè)命名空間僅能對(duì)應(yīng)一個(gè)vSwitch,一個(gè)vSwitch可以對(duì)應(yīng)多個(gè)命名空間,即VPC內(nèi)的IP地址為局域網(wǎng)地址,不同VPC內(nèi)的應(yīng)用無(wú)法互相訪問(wèn)。命名空間主要用于中間件邏輯隔離,不同命名空間內(nèi)的應(yīng)用在中間件層面是隔離的,如服務(wù)發(fā)現(xiàn)和配置下發(fā)等。
關(guān)于VPC的原理和產(chǎn)品介紹,請(qǐng)參見(jiàn)產(chǎn)品架構(gòu)。
鑒于VPC的產(chǎn)品特性和當(dāng)前SAE的產(chǎn)品特性,容器無(wú)法直接觸達(dá)VPC外的服務(wù)(OSS、鏡像服務(wù)等阿里云產(chǎn)品除外)。在沒(méi)有額外配置的情況下,您的容器單獨(dú)運(yùn)行在網(wǎng)絡(luò)環(huán)境,因此您無(wú)法直接接觸SAE應(yīng)用容器。
容器無(wú)法觸達(dá)公網(wǎng)的代碼示例如下。
容器內(nèi)如果需要訪問(wèn)公網(wǎng)服務(wù),須購(gòu)買(mǎi)NAT,并在VPC內(nèi)配置vSwitch的SNAT規(guī)則。具體操作,請(qǐng)參見(jiàn)配置NAT網(wǎng)關(guān)使SAE應(yīng)用能訪問(wèn)公網(wǎng)。
SNAT規(guī)則通過(guò)配置SNAT條目,可以實(shí)現(xiàn)VPC內(nèi)無(wú)公網(wǎng)IP的實(shí)例通過(guò)NAT網(wǎng)關(guān)綁定的EIP來(lái)訪問(wèn)公網(wǎng),從而能夠調(diào)用公網(wǎng)類(lèi)產(chǎn)品,獲取公網(wǎng)資源。更多信息,請(qǐng)參見(jiàn)公網(wǎng)類(lèi)產(chǎn)品。
構(gòu)建鏡像的方法
基于阿里云容器鏡像服務(wù),SAE集成了構(gòu)建鏡像和管理鏡像的功能。用于構(gòu)建的基礎(chǔ)鏡像為centos:7
,并為您配置了語(yǔ)言與編碼方式、時(shí)區(qū)和OpenJDK等運(yùn)行環(huán)境。
容器存在的目的是為了讓?xiě)?yīng)用運(yùn)行起來(lái),SAE不可能以占用所有用戶(hù)的運(yùn)行資源為代價(jià),集成過(guò)多的工具。因此,若您對(duì)容器內(nèi)工具有更多需求,請(qǐng)自行構(gòu)建鏡像或者按需從OSS獲取。更多信息,請(qǐng)參見(jiàn)制作Java鏡像。
查看Webshell
使用Webshell完成基本運(yùn)維的操作步驟如下:
登錄SAE控制臺(tái)。
在左側(cè)導(dǎo)航欄,選擇 ,在頂部菜單欄選擇地域,然后單擊具體應(yīng)用名稱(chēng)。
在應(yīng)用基本信息頁(yè)面,單擊實(shí)例部署信息頁(yè)簽。
在實(shí)例部署信息頁(yè)簽的默認(rèn)分組區(qū)域,單擊目標(biāo)實(shí)例操作列的Webshell。
可選:打開(kāi)Webshell后,您可以單擊窗口右上角的圖標(biāo),全屏顯示窗口。
按需在Webshell窗口執(zhí)行命令,查看并調(diào)試您的容器。
更多信息,請(qǐng)參見(jiàn)獲取實(shí)例內(nèi)部元數(shù)據(jù)和診斷應(yīng)用。
獲取實(shí)例內(nèi)部元數(shù)據(jù)
您通過(guò)SAE成功部署應(yīng)用后,即可獲取實(shí)例的基本元數(shù)據(jù),包括安全組ID、VPC ID和vSwitch ID。
實(shí)例元數(shù)據(jù)項(xiàng) | 說(shuō)明 |
/etc/podinfo/sgId | 安全組ID元數(shù)據(jù)所在的路徑。 |
/etc/podinfo/vpcId | VPC ID元數(shù)據(jù)所在的路徑。 |
/etc/podinfo/vswitchId | vSwitch ID元數(shù)據(jù)所在的路徑。 說(shuō)明 如果有多個(gè)vSwitch,將以半角逗號(hào)(,)分隔開(kāi)多個(gè)vSwitch ID。 |
您可以登錄SAE控制臺(tái),在Webshell窗口執(zhí)行以下命令,驗(yàn)證安全組ID、VPC ID和vSwitch ID的元數(shù)據(jù)信息。
執(zhí)行以下命令,進(jìn)入
podinfo
目錄內(nèi)。cd /etc/podinfo/
說(shuō)明如果執(zhí)行該命令時(shí)顯示
can't cd to /etc/podinfo/
報(bào)錯(cuò),您可以選擇重啟實(shí)例或重新部署應(yīng)用解決該問(wèn)題。執(zhí)行以下命令,查看實(shí)例元數(shù)據(jù)信息的所有文件。
ls
預(yù)期輸出。
sgId vpcId vswitchId
按需執(zhí)行以下命令,驗(yàn)證實(shí)例內(nèi)部相應(yīng)的元數(shù)據(jù)信息。
獲取安全組ID。
cat sgId
預(yù)期輸出。
sg-2ze4ddm2rqgenvcx****sh-4.2#
獲取VPC ID。
cat vpcId
預(yù)期輸出。
vpc-2zeqku2oevokwm66b****sh-4.2#
獲取vSwitch ID。
cat vswitchId
預(yù)期輸出。
vsw-2zewmy4ynhljytzhu****sh-4.2#
一鍵復(fù)制安裝命令
您可以登錄SAE控制臺(tái),在Webshell窗口按照以下步驟按需安裝命令。
在Webshell中安裝的命令,會(huì)在下次容器重建后消失。對(duì)于常用的命令,建議您在制作鏡像時(shí)提前安裝。
單擊Webshell窗口右上角的圖標(biāo)。
在彈出的一鍵復(fù)制安裝命令對(duì)話框內(nèi),按需選擇以下安裝組件,預(yù)覽命令并單擊復(fù)制。
安裝openssh:OpenSSH是SSH(Secure Shell)協(xié)議的免費(fèi)開(kāi)源實(shí)現(xiàn),OpenSSH提供了服務(wù)端后臺(tái)程序和客戶(hù)端工具,用來(lái)加密遠(yuǎn)程控制和文件傳輸過(guò)程中的數(shù)據(jù)。您可以通過(guò)安裝OpenSSH,借助遠(yuǎn)程調(diào)試的能力實(shí)現(xiàn)SSH遠(yuǎn)程登錄以及SFTP、SCP上傳下載文件的功能,進(jìn)而方便您臨時(shí)調(diào)試SAE的某個(gè)應(yīng)用實(shí)例。
安裝net-tools(netstat):netstat命令用于監(jiān)控網(wǎng)絡(luò)狀態(tài),可以顯示路由表、實(shí)際的網(wǎng)絡(luò)連接以及每一個(gè)網(wǎng)絡(luò)接口設(shè)備的狀態(tài)信息。
安裝iproute(ss):Socket Statistics(ss)命令用于獲取Socket統(tǒng)計(jì)信息,雖然與netstat命令獲取的內(nèi)容類(lèi)似,但是ss命令能夠快速顯示更詳細(xì)的有關(guān)TCP和連接狀態(tài)的信息。
在Webshell窗口粘貼已復(fù)制的命令并回車(chē)執(zhí)行。
診斷應(yīng)用
通過(guò)常規(guī)檢查診斷應(yīng)用
診斷SAE應(yīng)用包括常規(guī)檢查和上傳下載搜集的日志兩種方式。其中,常規(guī)檢查方法眾多。以Java應(yīng)用為例,有進(jìn)程檢查、線程以及JVM的健康狀態(tài)檢查。操作示例如下。
執(zhí)行以下命令,檢查應(yīng)用的Java進(jìn)程是否存在。
ps -ef | grep java
說(shuō)明容器內(nèi)通常使用主進(jìn)程啟動(dòng)應(yīng)用,如果應(yīng)用被停止,則容器也會(huì)退出,SAE自動(dòng)將退出的容器重新啟動(dòng),防止業(yè)務(wù)中斷。
如果進(jìn)程不存在,請(qǐng)執(zhí)行
dmesg | grep -i kill
命令檢查OOM日志。如果日志存在,表示應(yīng)用的進(jìn)程被停止,需要檢查工作目錄下
hs_err_pid{PID}.log
日志文件,并定位具體原因。
Java類(lèi)型應(yīng)用在線分析還可以使用阿里巴巴開(kāi)源軟件Arthas,建議在測(cè)試鏡像中集成Arthas工具進(jìn)行常規(guī)診斷。Arthas能夠?qū)崟r(shí)查看Java類(lèi)加載情況,方便觀察方法出參、入?yún)⒑铜h(huán)境變量等。
連接公網(wǎng)。
具體操作,請(qǐng)參見(jiàn)配置NAT網(wǎng)關(guān)使SAE應(yīng)用能訪問(wèn)公網(wǎng)。
執(zhí)行以下命令,下載Arthas。
sudo wget https://alibaba.github.io/arthas/arthas-boot.jar
執(zhí)行以下命令,運(yùn)行Arthas。
sudo java -jar arthas-boot.jar
通過(guò)日志上傳下載診斷應(yīng)用
如果常規(guī)檢查不能滿(mǎn)足您的需求,推薦您將容器內(nèi)收集到的日志上傳到云端,并下載到本地進(jìn)行分析。
文件不超過(guò)10 MB:您可以直接使用Webshell內(nèi)置的功能。具體操作,請(qǐng)參見(jiàn)使用Webshell實(shí)現(xiàn)文件上傳下載。
文件超過(guò)10 MB:您可以使用阿里云OSS服務(wù)。OSS服務(wù)連通阿里云下所有網(wǎng)絡(luò)環(huán)境,因此您可以使用該服務(wù)進(jìn)行日志上傳下載,具體操作步驟如下。
在容器內(nèi)部安裝OSS命令行工具。具體操作,請(qǐng)參見(jiàn)安裝OSS命令行工具。
本文中以64位CentOS系統(tǒng)的用戶(hù)為例,在沒(méi)有打通公網(wǎng)的情況下您可以選擇在本地下載,然后將這個(gè)文件上傳到OSS,然后獲取OSS的VPC內(nèi)網(wǎng)地址并下載文件。
執(zhí)行以下命令,下載ossutil。
sudo wget http://gosspublic.alicdn.com/ossutil/1.5.0/ossutil64
執(zhí)行以下命令,修改文件執(zhí)行權(quán)限。
sudo chmod 755 ossutil64
配置所需的OSS命令行工具,并附上當(dāng)前地域VPC內(nèi)的Endpoint,填寫(xiě)用于接收上傳文件的賬號(hào)的AccessKey,查看已經(jīng)創(chuàng)建的Bucket,檢查您的OSS服務(wù)是否可用。
說(shuō)明請(qǐng)確保您的阿里云賬號(hào)(不必是當(dāng)前賬號(hào),任意開(kāi)通阿里云OSS服務(wù)的賬號(hào)均可)已開(kāi)通OSS服務(wù)。
創(chuàng)建Bucket。具體操作,請(qǐng)參見(jiàn)控制臺(tái)創(chuàng)建存儲(chǔ)空間。
執(zhí)行以下命令,創(chuàng)建配置文件,用于存儲(chǔ)OSS訪問(wèn)信息。
按照提示配置您的AccessKey、Endpoint信息,無(wú)需填寫(xiě)STS Token。
./ossutil64 config
執(zhí)行以下命令,列舉所有Bucket。
檢查賬號(hào)是否可用,如果報(bào)錯(cuò)則配置錯(cuò)誤。
./ossutil64 ls
輸出示例如下:
CreationTime Region StorageClass BucketName 2021-12-08 18:53:46 +0800 CST oss-cn-hangzhou Standard oss://test-bucket
執(zhí)行以下命令,創(chuàng)建一個(gè)用于上傳的模擬日志文件sae-app.log。
echo "Hello" > sae-app.log
執(zhí)行以下命令,上傳日志文件至指定的Bucket。
./ossutil64 cp sae-app.log {bucket-address}
示例代碼如下:
./ossutil64 cp sae-app.log oss://test-bucket
結(jié)果驗(yàn)證。
方式一:執(zhí)行以下命令,查看已上傳的示例文件。
./ossutil64 ls oss://test-bucket
輸出示例如下:
LastModifiedTime Size(B) StorageClass ETAG ObjectName 2021-12-08 19:26:18 +0800 CST 6 Standard 09F7E02F1290BE211DA707A266F1**** oss://cri-55md3gmii09m****-chart/sae-app.log Object Number is: 1 0.047758(s) elapsed
方式二:從OSS管理控制臺(tái)或其他工具中找到您的日志文件,下載到本地,并使用您熟悉的工具進(jìn)行分析。