监控数据
本文介绍如何通过云监控的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}"}
Dimensions是一个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) {
/*
阿里云账号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("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();
}
}
}