Function Compute內建的Java8運行時支援接入ARMS(Application Real-Time Monitoring Service)應用監控。自訂運行時中的Java 8、Java 11和Java 17也支援接入ARMS應用監控。本文介紹如何使用自訂運行時接入ARMS應用監控。
背景資訊
Function Compute無縫對接ARMS應用監控平台後,您可以通過ARMS應用監控平台對目標函數進行監控追蹤,擷取相關資訊,例如執行個體層級的可觀測性、鏈路追蹤資訊、Java虛擬機器指標、代碼層級的剖析(Profiling)資訊和應用安全資訊等。更多資訊,請參見什麼是應用即時監控服務ARMS?。
功能 | 描述 |
執行個體層級的可觀測性 | 以函數執行個體為維度,彙總豐富的主機監控指標,例如CPU、記憶體及請求等。 |
鏈路追蹤 | ARMS探針自動擷取函數與上下遊組件的拓撲關係及相關指標,您可以在ARMS監控平台查看相關資訊,例如資料庫、Redis及MQ等。 |
Java虛擬機器指標 | ARMS探針自動擷取Java虛擬機器應用,您可以在ARMS監控平台中查看Java虛擬機器應用的相關監控資料,例如GC次數、堆資訊及線程棧資訊等。 |
代碼層級的剖析 | 您可以查看函數執行過程中代碼層級的剖析(Profiling)資訊,例如每個方法的耗時、異常等。 |
基於RASP(Runtime Application Self-Protection)技術,應用安全可以為應用在運行時提供強大的安全防護能力,並抵禦絕大部分未知漏洞所利用的攻擊手法。 |
自訂運行時接入ARMS
ARMS應用監控是一種內部擴充。自訂運行時接入ARMS應用監控時,主要包括以下三部分。
使用公用層擷取ARMS Agent程式
Function Compute平台以公用層的形式,提供了支援Java 8、Java 11和Java 17三種Java版本的ARMS Agent。
Java版本 | 相容運行時 | 公用層ARN |
Java 11/Java 8 | 自訂運行時 | acs:fc:{region}:official:layers/ArmsAgent273x/versions/2 |
Java 17 | 自訂運行時 | acs:fc:{region}:official:layers/ArmsAgent273x_JDK17/versions/1 |
使用Bootstrap指令碼作為啟動命令
使用ARMS需要添加3個啟動參數,考慮到啟動命令比較複雜,建議通過指令碼來啟動。可以在函數字碼頁面使用WebIDE建立檔案bootstrap,並設定檔案許可權為可執行許可權(終端視窗執行命令chmod +x bootstrap
)。範例程式碼如下所示。
#!/bin/bash
set -eo pipefail
# 1. 設定ARMS應用程式名稱
appName="FC:Custom_Java_Arms_Demo"
if [ -n "${FC_SERVICE_NAME}" ] || [ -n "${FC_FUNCTION_NAME}" ]; then
appName="FC:${FC_SERVICE_NAME}.${FC_FUNCTION_NAME}"
fi
echo "appName: ${appName}"
params=" "
# 2. 添加ARMS參數
if [[ -n "${FC_EXTENSIONS_ARMS_LICENSE_KEY}" ]]; then
echo "FC_EXTENSIONS_ARMS_LICENSE_KEY: ${FC_EXTENSIONS_ARMS_LICENSE_KEY}"
params+="-Dfc.instanceId=$HOSTNAME@`hostname -i` "
# 使用公用層的ARMS程式路徑
params+="-javaagent:/opt/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar "
params+="-Darms.licenseKey=${FC_EXTENSIONS_ARMS_LICENSE_KEY} "
params+="-Darms.appName=${appName} "
else
echo "The environment FC_EXTENSIONS_ARMS_LICENSE_KEY does not exist, please set the FC_EXTENSIONS_ARMS_LICENSE_KEY environment!"
exit 1
fi
# 3. 啟動應用程式
echo "params: ${params}"
exec java $params \
-Dserver.port=9000 \
-jar /code/target/demo-0.0.1-SNAPSHOT.jar
範例程式碼解析如下。
設定ARMS應用程式名稱。預設為
FC:{ServiceName}.{FunctionName}
。添加ARMS參數。
javaagent
:ARMS程式路徑。如果使用ARMS Agent的公用層,該路徑為/opt/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar
。Darms.licenseKey
:License key資訊。本文樣本展示從環境變數中擷取License key。更多關於擷取License Key的資訊,請參見擷取License Key。Darms.appName
:ARMS應用程式名稱。按照實際情況填寫。
設定環境變數
設定環境變數
FC_EXTENSIONS_ARMS_LICENSE_KEY=xxxx
,值為License Key。擷取License Key資訊的具體步驟,請參見擷取License Key。設定環境變數
FC_EXTENSION_ARMS=true
。添加該環境變數後,在一次函數調用結束時,不會立刻凍結函數執行個體,會等待10s再凍結函數執行個體,以確保ARMS Agent擴充成功上報日誌。
重要該方式會有額外的收費,收費策略與執行個體的Prefreeze回調相同。具體資訊,請參見計費說明。
前提條件
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
- 在函數管理頁面,單擊目標函數操作列的配置。
在函數配置頁面的層地區,通過添加官方公用層添加與所選Java語言相容的ArmsAgent層。
在函數配置頁面的環境變數地區,添加環境變數
FC_EXTENSION_ARMS=true
和FC_EXTENSIONS_ARMS_LICENSE_KEY=xxxx
。具體操作,請參見設定環境變數。
在函數字碼頁面的WebIDE中,建立Bootstrap檔案,然後單擊部署代碼。
具體操作,請參見使用Bootstrap指令碼作為啟動命令。
成功更新配置並部署代碼後,您的函數將被添加到ARMS應用監控進行高效能管理。同時,ARMS監控將對您的服務進行計費。更多資訊,請參見計費概述。
當您的函數成功接入ARMS監控平台後,如果您需要查看對應監控資訊,請確保ARMS監控平台和函數所屬地區相同。
為了函數能夠正常執行,請確保您的函數配置中,記憶體規格大於512 MB(ARMS大概佔用300 MB記憶體)。
結果驗證
當您成功將函數接入ARMS應用監控平台後,您可以在ARMS控制台查看接入的函數。