本文介绍如何通过云监控的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 | 函数HTTP状态码2xx请求数 | |
FunctionHTTPStatus3xx | 函数HTTP状态码3xx请求数 | |
FunctionHTTPStatus4xx | 函数HTTP状态码4xx请求数 | |
FunctionHTTPStatus5xx | 函数HTTP状态码5xx请求数 | |
FunctionServerErrors | 服务端错误次数 | |
FunctionClientErrors | 客户端错误次数 | |
FunctionFunctionErrors | 函数错误次数 | |
FunctionConcurrencyThrottles | 流控错误的并发实例超上限 | |
FunctionResourceThrottles | 流控错误的实例总数超上限 | |
FunctionAvgDuration | 函数执行平均时间 | |
FunctionP90Duration | 函数P90执行时间 | |
FunctionP99Duration | 函数P99执行时间 | |
FunctionMaxDuration | 函数最大执行时间 | |
FunctionLatencyAvg | 端到端平均延时 | |
FunctionMemoryLimitMB | 内存配额 | |
FunctionMaxMemoryUsage | 已使用内存 | |
FunctionOndemandInstanceQuota | 函数按量实例数上限 | |
FunctionOndemandActiveInstance | 函数已使用按量实例数 | |
FunctionProvisionedCurrentInstance | 函数预留实例数 | |
FunctionEnqueueCount | 异步请求入队 | |
FunctionDequeueCount | 异步请求处理完成 | |
FunctionAsyncMessageLatencyAvg | 异步消息处理延时平均时间 | |
FunctionAsyncMessageLatencyMax | 异步消息处理延时最大时间 | |
FunctionAsyncEventExpiredDropped | 异步调用触发事件超时丢弃 | |
FunctionDestinationErrors | 异步调用触发事件目标触发失败 | |
FunctionDestinationSucceed | 异步调用触发事件目标触发成功 | |
FunctionAsyncMessagesBacklog | 异步请求积压数 | |
FunctionAsyncMessagesInProcess | 处理中的异步请求数 | |
FunctionMaxConcurrentRequests | 单实例多请求最大并发请求数(实例级别指标) | |
FunctionAvgConcurrentRequests | 单实例多请求平均并发请求数(实例级别指标) | |
FunctionvCPUQuotaCores | vCPU配额(实例级别指标) | |
FunctionMaxvCPUCores | 最大vCPU(实例级别指标) | |
FunctionAvgvCPUCores | 平均vCPU(实例级别指标) | |
FunctionMaxvCPUUtilization | vCPU最大利用率(实例级别指标) | |
FunctionAvgvCPUUtilization | vCPU平均利用率(实例级别指标) | |
FunctionRXBytesPerSec | 入网流量(实例级别指标) | |
FunctionTXBytesPerSec | 出网流量(实例级别指标) | |
FunctionMemoryLimitMB | 内存配额(实例级别指标) | |
FunctionMaxMemoryUsageMB | 最大使用内存(实例级别指标) | |
FunctionAvgMemoryUsageMB | 平均使用内存(实例级别指标) | |
FunctionMaxMemoryUtilization | 内存最大使用率(实例级别指标) | |
FunctionAvgMemoryUtilization | 内存平均使用率(实例级别指标) | |
FunctionGPUMemoryLimitMB | GPU显存配额(实例级别指标) | |
FunctionGPUMaxMemoryUsage | GPU已使用显存(实例级别指标) | |
FunctionGPUMemoryUsagePercent | GPU显存使用率(实例级别指标) | |
FunctionGPUSMPercent | GPU SM利用率(实例级别指标) | |
FunctionGPUEncoderPercent | GPU硬件编码器利用率(实例级别指标) | |
FunctionGPUDecoderPercent | GPU硬件解码器利用率(实例级别指标) |
使用示例
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();
}
}
}