本文介绍如何通过云监控的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("2024-07-19 08:00:00");
request.setEndTime("2027-07-19 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 |
RegionServerErrors | |
RegionClientErrors | |
RegionFunctionErrors | |
RegionThrottles | |
RegionResourceThrottles | |
RegionConcurrencyLimit | |
RegionConcurrentCount | |
RegionProvisionedCurrentInstance | |
服务 | ServiceTotalInvocations |
ServiceServerErrors | |
ServiceClientErrors | |
ServiceFunctionErrors | |
ServiceThrottles | |
ServiceResourceThrottles | |
ServiceProvisionedCurrentInstance | |
函数 | 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("2024-07-19 16:20:00");
request.setEndTime("2024-07-19 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();
}
}
}