本文介绍如何通过云监控的API调取函数计算的监控数据。如果您需要调取函数计算的监控数据,您可以通过API接口的相关请求参数调取,例如Project、StartTime、EndTime、Dimensions、Period、Metric。

关于API接口说明,详情请参见API概览

Project

函数计算监控服务指标项的数据都使用相同的Project名称:acs_fc。

使用Java SDK设置代码示例如下:

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

StartTime和EndTime

云监控的时间参数取值范围使用左开右闭的形式,即(StartTime, EndTime],处于边界StartTime的数据不会被获取,而处于边界EndTime的数据会被查询到。

说明 云监控数据保留时间为31天,设置的StartTime和EndTime的时间间距不能大于31天,31天前的数据是查询不到的。

其他时间参数信息,详情请参见API概览

使用Java SDK设置代码示例如下:

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

Dimensions

函数计算监控服务根据函数计算资源结构和使用场景,将监控指标分为地域维度、服务维度和函数维度。不同的维度使用的Dimensions参数不同。

  • 地域维度数据的Dimensions设置如下:
    {"region": "${your_region}"}    
  • 服务维度数据的Dimensions设置如下:
    {"region": "${your_region}", "serviceName": "${your_serviceName}"}            
  • 函数维度数据的Dimensions设置如下:
    {"region": "${your_region}", "serviceName": "${your_serviceName}", "functionName": "${your_functionName}"}
说明 Dimenisons是一个JSON字符串,函数计算监控指标的Dimensions只有一对Key-Value。使用Java SDK设置代码示例如下:
request.setDimensions("{\"region\":\"your_region\"}");

Period

函数计算监控指标的聚合粒度均为60s。

使用Java SDK设置代码示例如下:

request.setPeriod("60");

Metric

使用Java SDK设置代码示例如下:

request.setMetric("your_metric");

函数计算监控指标参考手册中详细介绍的各项指标项,对应的Metric名称如下表:

指标维度 Metric 指标项对应名称
地域 RegionTotalInvocations TotalInvocations
RegionBillableInvocations BillableInvocations
RegionThrottles Throttles
RegionClientErrors ClientErrors
RegionServerErrors ServerErrors
RegionBillableInvocationsRate BillableInvocations占比
RegionThrottlesRate Throttles占比
RegionClientErrorsRate ClientErrors占比
RegionServerErrorsRate ServerErrors占比
服务 ServiceTotalInvocations TotalInvocations
ServiceBillableInvocations BillableInvocations
ServiceThrottles Throttles
ServiceClientErrors ClientErrors
ServiceServerErrors ServerErrors
ServiceBillableInvocationsRate BillableInvocations占比
ServiceThrottlesRate Throttles占比
ServiceClientErrorsRate ClientErrors占比
ServiceServerErrorsRate ServerErrors占比
函数 FunctionTotalInvocations TotalInvocations
FunctionBillableInvocations BillableInvocations
FunctionThrottles Throttles
FunctionFunctionErrors FunctionErrors
FunctionClientErrors ClientErrors
FunctionServerErrors ServerErrors
FunctionBillableInvocationsRate BillableInvocations占比
FunctionThrottlesRate Throttles占比
FunctionFunctionErrorsRate FunctionErrors占比
FunctionClientErrorsRate ClientErrors占比
FunctionServerErrorsRate ServerErrors占比
FunctionAvgDuration 平均Duration
FunctionMaxMemoryUsage 最大内存使用

使用示例

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) {
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<your_access_key_id>", "<your_access_key_secret>");
        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维度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());

            // Service维度dim = new JSONObject();
            request.setMetric("ServiceTotalInvocations");  // 选择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维度dim = new JSONObject();
            request.setMetric("FunctionTotalInvocations");  // 选择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();
        }
    }
}