本文介紹如何通過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();
}
}
}