This topic describes how to query Function Compute metrics by using the Cloud Monitor API. You can call API operations and use different request parameters to obtain the data that you need. These parameters include Project, StartTime, EndTime, Dimensions, Period, and Metric.

For more information about the 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 shows how to configure the project by using the Java SDK:

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

StartTime and EndTime

In Cloud Monitor, a time range is defined by the StartTime and EndTime parameters. The time range is exclusive with respect to StartTime and inclusive with respect to EndTime.

Note Cloud Monitor 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 cannot be queried.

For information about other time parameters, see List of operations by function.

The following sample code shows how to set a time range by using the Java SDK:

request.setStartTime("2017-04-26 08:00:00");
request.setEndTime("2017-04-26 09:00:00");        

Dimensions

The monitoring service of Function Compute divides Function Compute metrics from the region, service, and function dimensions. Each dimension uses a different format for the value of the Dimensions parameter.

  • The Dimensions parameter for regional metrics is in the following format:
    {"region": "${your_region}"}    
  • The Dimensions parameter for service metrics is in the following format:
    {"region": "${your_region}", "serviceName": "${your_serviceName}"}            
  • The Dimensions parameter for function metrics is in the following format:
    {"region": "${your_region}", "serviceName": "${your_serviceName}", "functionName": "${your_functionName}"}
Note The value of the Dimensions parameter for all Function Compute metrics is a JSON string that contains a single key-value pair. The following sample code shows how to set the Dimensions parameter by using the Java SDK:
request.setDimensions("{\"region\":\"your_region\"}");

Period

The granularity of the aggregation period for Function Compute metrics must be 60 seconds.

The following sample code shows how to set an aggregation period by using the Java SDK:

request.setPeriod("60");

Metric

The following sample code shows how to specify a metric by using the Java SDK:

request.setMetric("your_metric");

The following table lists the metrics that are described in the Function Compute documentation.

DimensionMetricDescription
RegionRegionTotalInvocationsTotalInvocations
RegionBillableInvocationsBillableInvocations
RegionThrottlesThrottles
RegionClientErrorsClientErrors
RegionServerErrorsServerErrors
RegionBillableInvocationsRateThe percentage of billable successful function invocation requests in the region.
RegionThrottlesRateThe percentage of throttled function invocation requests in the region.
RegionClientErrorsRateThe percentage of the region-specific function invocation requests for which client errors were returned.
RegionServerErrorsRateThe percentage of the region-specific function invocation requests for which server errors are returned.
ServiceServiceTotalInvocationsTotalInvocations
ServiceBillableInvocationsBillableInvocations
ServiceThrottlesThrottles
ServiceClientErrorsClientErrors
ServiceServerErrorsServerErrors
ServiceBillableInvocationsRateThe percentage of billable successful function invocation requests in the service.
ServiceThrottlesRateThe percentage of throttled function invocation requests in the service.
ServiceClientErrorsRateThe percentage of the service-specific function invocation requests for which client errors were returned.
ServiceServerErrorsRateThe percentage of the service-specific function invocation requests for which server errors were returned.
FunctionFunctionTotalInvocationsTotalInvocations
FunctionBillableInvocationsBillableInvocations
FunctionThrottlesThrottles
FunctionFunctionErrorsFunctionErrors
FunctionClientErrorsClientErrors
FunctionServerErrorsServerErrors
FunctionBillableInvocationsRateThe percentage of billable invocation requests for the function.
FunctionThrottlesRateThe percentage of throttled invocation requests for the function.
FunctionFunctionErrorsRateThe percentage of the function invocation requests during which errors occurred in function execution.
FunctionClientErrorsRateThe percentage of the function invocation requests for which client errors were returned.
FunctionServerErrorsRateThe percentage of the function invocation requests for which server errors were returned.
FunctionAvgDurationThe average duration for all requests in 60 seconds.
FunctionMaxMemoryUsageThe maximum memory used for function invocations in the aggregation period.

Example

The following text shows a sample 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>
...
            

The following code requests metrics from the Cloud Monitor API:

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 the AccessKey pair to perform operations 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 the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources under your account may be compromised. 
        In this example, the AccessKey pair is saved to the environment variables for authentication. 
        Configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables in your local environment before you run the sample code. 
        In the runtime environments of Function Compute, 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("2017-04-26 16:20:00");
        request.setEndTime("2017-04-26 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();
        }
    }
}