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