全部產品
Search
文件中心

Function Compute:Custom Runtime支援ARMS應用監控擴充

更新時間:Jul 06, 2024

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

範例程式碼解析如下。

  1. 設定ARMS應用程式名稱。預設為FC:{ServiceName}.{FunctionName}

  2. 添加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回調相同。具體資訊,請參見計費說明

前提條件

  • 已建立自訂運行時函數,具體運行環境為Java 8、Java 11或Java 17。具體操作,請參見建立函數

  • 已開通ARMS服務。具體操作,請參見開通ARMS

操作步驟

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數
  2. 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
  3. 函數管理頁面,單擊目標函數操作列的配置
  4. 在函數配置頁面的地區,通過添加官方公用層添加與所選Java語言相容的ArmsAgent層。

  5. 在函數配置頁面的環境變數地區,添加環境變數FC_EXTENSION_ARMS=trueFC_EXTENSIONS_ARMS_LICENSE_KEY=xxxx

    具體操作,請參見設定環境變數

  6. 在函數字碼頁面的WebIDE中,建立Bootstrap檔案,然後單擊部署代碼

    成功更新配置並部署代碼後,您的函數將被添加到ARMS應用監控進行高效能管理。同時,ARMS監控將對您的服務進行計費。更多資訊,請參見計費概述

重要
  • 當您的函數成功接入ARMS監控平台後,如果您需要查看對應監控資訊,請確保ARMS監控平台和函數所屬地區相同。

  • 為了函數能夠正常執行,請確保您的函數配置中,記憶體規格大於512 MB(ARMS大概佔用300 MB記憶體)。

結果驗證

當您成功將函數接入ARMS應用監控平台後,您可以在ARMS控制台查看接入的函數。

您也可以登入ARMS控制台,在左側導覽列,選擇應用監控 > 應用列表,然後單擊目標應用程式名稱,查看詳細監控資訊。更多資訊,請參見應用總覽

說明

目標應用的名稱為Bootstrap指令碼中的appName,預設值為FC:{ServiceName}.{FunctionName}