全部產品
Search
文件中心

Function Compute:監控資料

更新時間:Aug 20, 2024

本文介紹如何通過CloudMonitor的API調取Function Compute的監控資料。如果您需要調取Function Compute的監控資料,您可以通過API介面的相關請求參數調取,例如Project、StartTime、EndTime、Dimensions、Period、Metric。

關於API介面說明,請參見API概覽

Project

Function Compute監控服務指標項的資料都使用相同的Project名稱:acs_fc。

使用Java SDK設定程式碼範例如下:

QueryMetricRequest request = new QueryMetricRequest();
request.setProject("acs_fc");

StartTime和EndTime

CloudMonitor的時間參數取值範圍使用左開右閉的形式,即(StartTime, EndTime],處於邊界StartTime的資料不會被擷取,而處於邊界EndTime的資料會被查詢到。

說明

CloudMonitor資料保留時間為31天,設定的StartTime和EndTime的時間間距不能大於31天,31天前的資料是查詢不到的。

關於其他時間參數資訊,請參見API概覽

使用Java SDK設定程式碼範例如下:

request.setStartTime("2024-07-19 08:00:00");
request.setEndTime("2024-07-19 09:00:00");        

Dimensions

Function Compute監控服務根據Function Compute資源結構和使用情境,將監控指標分為地區維度、服務維度和函數維度。不同的維度使用的Dimensions參數不同。

  • 地區維度資料的Dimensions設定如下:

    {"region": "${your_region}"}    
  • 函數維度資料的Dimensions設定如下:

    {"region": "${your_region}", "functionName": "${your_functionName}"}
說明

Dimenisons是一個JSON字串,Function Compute監控指標的Dimensions只有一對Key-Value。使用Java SDK設定程式碼範例如下:

request.setDimensions("{\"region\":\"your_region\"}");

Period

Function Compute監控指標的彙總粒度均為60s。

使用Java SDK設定程式碼範例如下:

request.setPeriod("60");

Metric

使用Java SDK設定程式碼範例如下:

request.setMetric("your_metric");

Function Compute監控指標參考手冊中詳細介紹的各項指標項,對應的Metric名稱如下表:

指標維度

Metric

地區

RegionTotalInvocations

RegionServerErrors

RegionClientErrors

RegionFunctionErrors

RegionThrottles

RegionResourceThrottles

RegionConcurrencyLimit

RegionConcurrentCount

RegionProvisionedCurrentInstance

函數

FunctionTotalInvocations

FunctionProvisionInvocations

FunctionHTTPStatus2xx

FunctionHTTPStatus3xx

FunctionHTTPStatus4xx

FunctionHTTPStatus5xx

FunctionServerErrors

FunctionClientErrors

FunctionFunctionErrors

FunctionConcurrencyThrottles

FunctionResourceThrottles

FunctionAvgDuration

FunctionP90Duration

FunctionP99Duration

FunctionMaxDuration

FunctionLatencyAvg

FunctionMemoryLimitMB

FunctionMaxMemoryUsage

FunctionOndemandInstanceQuota

FunctionOndemandActiveInstance

FunctionProvisionedCurrentInstance

FunctionEnqueueCount

FunctionDequeueCount

FunctionAsyncMessageLatencyAvg

FunctionAsyncMessageLatencyMax

FunctionAsyncEventExpiredDropped

FunctionDestinationErrors

FunctionDestinationSucceed

FunctionAsyncMessagesBacklog

FunctionAsyncMessagesInProcess

FunctionMaxConcurrentRequests

FunctionAvgConcurrentRequests

FunctionvCPUQuotaCores

FunctionMaxvCPUCores

FunctionAvgvCPUCores

FunctionMaxvCPUUtilization

FunctionAvgvCPUUtilization

FunctionRXBytesPerSec

FunctionTXBytesPerSec

FunctionMemoryLimitMB

FunctionMaxMemoryUsageMB

FunctionAvgMemoryUsageMB

FunctionMaxMemoryUtilization

FunctionAvgMemoryUtilization

FunctionGPUMemoryLimitMB

FunctionGPUMaxMemoryUsage

FunctionGPUMemoryUsagePercent

FunctionGPUSMPercent

FunctionGPUEncoderPercent

FunctionGPUDecoderPercent

使用樣本

pom.xml樣本如下:

...
    <dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-cms</artifactId>
            <version>5.0.1</version>
        </dependency>
    </dependencies>
...
            

程式碼範例如下:

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.cms.model.v20170301.QueryMetricListRequest;
import com.aliyuncs.cms.model.v20170301.QueryMetricListResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

public class MonitorService {
    public static void main(String[] args) {
        /*
        阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
        建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
        本樣本以將AccessKey和AccessSecretKey儲存在環境變數中實現身分識別驗證為例。
        運行本樣本前請先在本地環境中設定環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        在FC Runtime運行環境下,配置執行許可權後,ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET環境變數會被自動化佈建。
        */
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessSecretKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKey, accessSecretKey);
        IAcsClient client = new DefaultAcsClient(profile);


        QueryMetricListRequest request = new QueryMetricListRequest();
        request.setProject("acs_fc");
        request.setPeriod("60");
        request.setStartTime("2023-08-26 16:20:00");
        request.setEndTime("2023-08-26 16:30:00");
        request.setAcceptFormat(FormatType.JSON);

        try {
            // Region維度JSONObject dim = new JSONObject();
            request.setMetric("RegionTotalInvocations");  // 選擇metric。
            dim.put("region", "<your_region>");  // 如: cn-shanghai
            request.setDimensions(dim.toJSONString());
            QueryMetricListResponse response = client.getAcsResponse(request);
            System.out.println(response.getCode());
            System.out.println(response.getMessage());
            System.out.println(response.getRequestId());
            System.out.println(response.getDatapoints());

            // Function維度dim = new JSONObject();
            request.setMetric("FunctionTotalInvocations");  // 選擇metric。
            dim.put("region", "<your_region>");
            dim.put("serviceName", ""); //FC2.0 建立的函數名:{serviceName}${functionName},獲得指標時需要dim.put("serviceName",{serviceName}), FC3.0 建立的函數 {functionName},擷取指標時需要dim.put("serviceName","")。
            dim.put("functionName", "<your_function_name>");
            request.setDimensions(dim.toJSONString());
            response = client.getAcsResponse(request);
            System.out.println(response.getCode());
            System.out.println(response.getMessage());
            System.out.println(response.getRequestId());
            System.out.println(response.getDatapoints());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}