このトピックでは、CloudMonitor API を使用して Function Compute のモニタリングデータをクエリする方法について説明します。API オペレーションを呼び出し、Project、StartTime、EndTime、Dimensions、Period、Metric などの関連 リクエストパラメーター を設定することで、Function Compute のモニタリングデータを取得できます。
API オペレーションの詳細については、「関数別の操作リスト」をご参照ください。
Project
すべての Function Compute メトリックは、acs_fc プロジェクトでクエリできます。
次のサンプルコードは、Java SDK の例を示しています。
QueryMetricRequest request = new QueryMetricRequest();
request.setProject("acs_fc"); // プロジェクトを設定します。
StartTime and EndTime
CloudMonitor では、時間範囲は (StartTime, EndTime] 形式の StartTime パラメーターと EndTime パラメーターによって定義されます。時間範囲は StartTime を除き、EndTime を含みます。
CloudMonitor は 31 日間データを保持します。このため、StartTime と EndTime の間の時間範囲は 31 日を超えることはできず、31 日より前のデータはクエリできません。
その他の時間パラメーターの詳細については、「関数別の操作リスト」をご参照ください。
次のサンプルコードは、Java SDK の例を示しています。
request.setStartTime("2024-07-19 08:00:00"); // 開始時間を設定します。
request.setEndTime("2024-08-19 08:00:00"); // 終了時間を設定します。
Dimensions
Function Compute のモニタリングメトリックは、Function Compute のリソース構造と使用シナリオに基づいて、リージョン、サービス、および関数のディメンションに分類されます。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 には 1 つ以上のキーと値のペアが含まれています。次のサンプルコードは、Java SDK の例を示しています。
request.setDimensions("{\"region\":\"your_region\"}"); // ディメンションを設定します。
Period
Function Compute メトリックの集計期間の粒度は 60 秒です。
次のサンプルコードは、Java SDK の例を示しています。
request.setPeriod("60"); // 期間を設定します。
Metric
次のサンプルコードは、Java SDK の例を示しています。
request.setMetric("your_metric"); // メトリックを設定します。
次の表に、Function Compute ドキュメントに記載されているメトリックを示します。
Dimension | Metric |
Region | RegionTotalInvocations |
RegionServerErrors | |
RegionClientErrors | |
RegionFunctionErrors | |
RegionThrottles | |
RegionResourceThrottles | |
RegionConcurrencyLimit | |
RegionConcurrentCount | |
RegionProvisionedCurrentInstance | |
Service | ServiceTotalInvocations |
ServiceServerErrors | |
ServiceClientErrors | |
ServiceFunctionErrors | |
ServiceThrottles | |
ServiceResourceThrottles | |
ServiceProvisionedCurrentInstance | |
Function | 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) {
/*
Alibaba Cloud アカウントの AccessKey ペアは、すべての API オペレーションに対する権限を持っています。これらの認証情報を使用して Function Compute で操作を実行することは、リスクの高い操作です。 API オペレーションの呼び出しや日常の O&M の実行には、RAM ユーザーを使用することをお勧めします。
プロジェクトコードに AccesKey ペア (AccessKey ID と AccessKey シークレット) を保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
この例では、認証のために AccessKey ペアが環境変数に保存されています。
サンプルコードを実行する前に、オンプレミス環境で ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。
Function Compute ランタイムでは、実行権限を設定した後、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 {
// リージョンディメンション。JSONObject dim = new JSONObject();
request.setMetric("RegionTotalInvocations"); // メトリックを指定します。
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());
// サービスディメンション。dim = new JSONObject();
request.setMetric("ServiceTotalInvocations"); // メトリックを指定します。
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());
// 関数ディメンション。dim = new JSONObject();
request.setMetric("FunctionTotalInvocations"); // メトリックを指定します。
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();
}
}
}