This topic describes how to query monitoring data of Function Compute by using the CloudMonitor API. You can call API operations and configure related request parameters, such as Project, StartTime, EndTime, Dimensions, Period, and Metric, to obtain the monitoring data of Function Compute.
For more information about API operations, see List of operations by function.
Project
All Function Compute metrics are available for querying under the acs_fc project.
The following sample code provides an example for Java SDK:
QueryMetricRequest request = new QueryMetricRequest();
request.setProject("acs_fc");
StartTime and EndTime
In CloudMonitor, a time range is defined by the StartTime and EndTime parameters in the (StartTime, EndTime] form. The time range is exclusive with respect to StartTime and inclusive with respect to EndTime.
CloudMonitor retains data for 31 days. For this reason, the time range between StartTime and EndTime cannot exceed 31 days, and data earlier than 31 days ago cannot be queried.
For more information about other time parameters, see List of operations by function.
The following sample code provides an example for Java SDK:
request.setStartTime("2024-07-19 08:00:00");
request.setEndTime("2027-07-19 09:00:00");
Dimensions
The monitoring metrics of Function Compute is categorized into the region, service, and function dimensions based on the resource structure and usage scenarios of Function Compute. You can specify a dimension by using the Dimensions parameter.
The following code snippet shows the format of Dimensions in the region dimension:
{"region": "${your_region}"}
The following code snippet shows the format of Dimensions in the service dimension:
{"region": "${your_region}", "serviceName": "${your_serviceName}"}
The following code snippet shows the format of Dimensions in the function dimension:
{"region": "${your_region}", "serviceName": "${your_serviceName}", "functionName": "${your_functionName}"}
The value of Dimensions is a JSON string. Only one key-value pair is contained in Dimensions for Function Compute monitoring metrics. The following sample code provides an example for Java SDK:
request.setDimensions("{\"region\":\"your_region\"}");
Period
The granularity of the aggregation period for Function Compute metrics is 60 seconds.
The following sample code provides an example for Java SDK:
request.setPeriod("60");
Metric
The following sample code provides an example for Java SDK:
request.setMetric("your_metric");
The following table lists the metrics that are described in Function Compute documentation.
Dimension | Metric |
Region | RegionTotalInvocations |
RegionServerErrors | |
RegionClientErrors | |
RegionFunctionErrors | |
RegionThrottles | |
RegionResourceThrottles | |
RegionConcurrencyLimit | |
RegionConcurrentCount | |
RegionProvisionedCurrentInstance | |
Service | ServiceTotalInvocations |
ServiceServerErrors | |
ServiceClientErrors | |
ServiceFunctionErrors | |
ServiceThrottles | |
ServiceResourceThrottles | |
ServiceProvisionedCurrentInstance | |
Function | 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 |
Example:
The following sample code shows an example pom.xml file:
...
<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>
...
Sample code:
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) {
/*
The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in Function Compute is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
We recommend that you do not save AccesKey pairs (AccessKey IDs and AccessKey secrets) in your project code. Otherwise, the AccessKey pairs may be leaked and the security of all resources in your account may be compromised.
In this example, the AccessKey pair is saved in environment variables for authentication.
Configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables in your on-premises environment before you run sample code.
In Function Compute runtimes, the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are automatically configured after you configure the execution permissions.
*/
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("2024-07-19 16:20:00");
request.setEndTime("2024-07-19 16:30:00");
request.setAcceptFormat(FormatType.JSON);
try {
// Region dimension. JSONObject dim = new JSONObject();
request.setMetric("RegionTotalInvocations"); // Specify the metric.
dim.put("region", "<your_region>"); //Example: 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());
// Service dimension. dim = new JSONObject();
request.setMetric("ServiceTotalInvocations"); // Specify the metric.
dim.put("region", "<your_region>");
dim.put("serviceName", "<your_service_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());
// Function dimension. dim = new JSONObject();
request.setMetric("FunctionTotalInvocations"); // Specify the metric.
dim.put("region", "<your_region>");
dim.put("serviceName", "<your_service_name>");
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();
}
}
}