このトピックでは、Cloud Monitor APIを使用してFunction Computeメトリクスをクエリする方法について説明します。 関連するAPI操作を呼び出し、さまざまなリクエストパラメーターを使用して、必要なデータを取得できます。 これらのパラメータには、Project、StartTime、EndTime、Dimensions、Period、およびMetricが含まれます。

プロジェクト

すべてのFunction Computeメトリクスは、acs_fcプロジェクトでクエリに使用できます。

次のサンプルコードは、Java SDKを使用してプロジェクトを設定する方法を示しています。

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

Time range

Cloud Monitorでは、StartTimeパラメーターとEndTimeパラメーターによって時間範囲が定義されます。 時間範囲は、StartTimeに関して排他的であり、EndTimeに関して包括的である。

Cloud Monitorは31日間データを保持します。 このため、StartTimeとEndTimeの間の時間範囲は31日を超えることはできず、31日より前のデータを照会することはできません。

時間パラメーターの詳細については、「t14254.html#doc_14254」をご参照ください。

次のサンプルコードは、Java SDKを使用して時間範囲を設定する方法を示しています。

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

ディメンション

Function Computeのモニタリングサービスは、Function Computeメトリクスをリージョン、サービス、および関数ディメンションから分割します。 各ディメンションは、ディメンションパラメーターの値に異なる形式を使用します。

  • リージョナルメトリックのディメンションパラメーターは、次の形式です。
    {"region": "$ {your_region}"}    
  • サービスメトリックのDimensionsパラメーターの形式は次のとおりです。
    {"region": "$ {your_region}"、"serviceName": "$ {your_serviceName}"}            
  • 関数メトリックのDimensionsパラメーターは、次の形式です。
    {"region": "$ {your_region}"、"serviceName": "$ {your_serviceName}"、"functionName": "$ {your_functionName}"}
すべてのFunction Computeメトリクスのディメンションパラメーターの値は、単一のキーと値のペアを含むJSON文字列です。 次のサンプルコードは、Java SDKを使用してDimensionsパラメーターを設定する方法を示しています。
request.setDimensions("{\" region\":\" your_region\"}");

期間

Function Computeメトリクスの集計期間の粒度は60秒である必要があります。

次のサンプルコードは、Java SDKを使用して集計期間を設定する方法を示しています。

リクエスト .setPeriod( "60");

メトリック

次のサンプルコードは、Java SDKを使用してメトリックを指定する方法を示しています。

リクエスト .setMetric( "your_metric");

次の表に、Function Computeのドキュメントで説明されているメトリックを示します。

ディメンション メトリック 説明
リージョン RegionTotalInvocations リージョン内の関数呼び出し要求の総数。
RegionBillableInvocations リージョン内の課金可能な関数呼び出し要求の数。
RegionThrottles リージョン内のスロットルされた関数呼び出し要求の数。
RegionClientErrors クライアントエラーが返されたリージョン固有の関数呼び出し要求の数。
RegionServerErrors サーバーエラーが返されたリージョン固有の関数呼び出し要求の数。
RegionBillableInvocationsRate リージョン内の課金可能な関数呼び出し要求の割合。
RegionThrottlesRate リージョン内のスロットルされた関数呼び出し要求の割合。
RegionClientErrorsRate クライアントのエラーが返されたリージョン固有の関数呼び出し要求の割合。
RegionServerErrorsRate サーバーエラーが返されるリージョン固有の関数呼び出し要求の割合。
サービス ServiceTotalInvocations サービス内の関数呼び出し要求の総数。
ServiceBillableInvocations サービス内の課金可能な関数呼び出し要求の数。
ServiceThrottles サービス内のスロットル関数呼び出し要求の数。
ServiceClientErrors クライアントエラーが返されたサービス固有の関数呼び出し要求の数。
ServiceServerErrors サーバーエラーが返されたサービス固有の関数呼び出し要求の数。
ServiceBillableInvocationsRate サービス内の関数呼び出しリクエストの課金成功率。
ServiceThrottlesRate サービス内のスロットルされた関数呼び出し要求の割合。
ServiceClientErrorsRate クライアントエラーが返されたサービス固有の関数呼び出し要求の割合。
ServiceServerErrorsRate サーバーエラーが返されたサービス固有の関数呼び出し要求の割合。
機能 FunctionTotalInvocations 関数の呼び出し要求の総数。
FunctionBillableInvocations 関数に対する請求可能な呼び出し要求の数。
FunctionThrottles 関数のスロットリングされた呼び出し要求の数。
FunctionErrors 関数の実行中に発生したエラーの数。
FunctionClientErrors クライアントエラーが返された関数呼び出し要求の数。
FunctionServerErrors サーバーエラーが返された関数呼び出し要求の数。
FunctionBillableInvocationsRate 関数の請求可能な呼び出し要求の割合。
FunctionThrottlesRate 関数のスロットル呼び出し要求の割合。
FunctionErrorsRate 関数の実行でエラーが発生した関数呼び出し要求の割合。
FunctionClientErrorsRate クライアントエラーが返された関数呼び出し要求の割合。
FunctionServerErrorsRate サーバーエラーが返された関数呼び出し要求の割合。
FunctionAvgDuration 60秒間のすべてのリクエストの平均時間。
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>
...
            

次のコードは、Cloud Monitor APIからメトリックを要求します。

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");  // Specifies a metric.
            dim.put("region", "<your_region>");  // For example, 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");  // Specifies a 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");  // Specifies a 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();
        }
    }
}