すべてのプロダクト
Search
ドキュメントセンター

CloudMonitor:モニタリングデータをリアルタイムでエクスポート

最終更新日:May 14, 2024

CloudMonitorは、クラウドでのモニタリングデータのエクスポートに役立つクラウドモニタリングエクスポーター機能を提供します。

前提条件

ハイブリッドクラウドモニタリングが有効になりました。 詳細については、「Hybrid Cloud Monitoringの有効化」をご参照ください。

背景情報

Hybrid Cloud Monitoringの有効化には課金されません。 実際のリソース使用量に基づいて課金されます。 クラウドモニタリングエクスポータ機能の課金については、「クラウドモニタリングエクスポータ機能の課金」をご参照ください。

手順

  1. DescribeMetricMetaList操作を呼び出して、各Alibaba Cloudサービスのメトリクスを取得します。

    DescribeMetricMetaList操作のパラメーターを設定する方法については、「DescribeMetricMetaList」をご参照ください。

    説明

    各Alibaba Cloudサービスのメトリクスの [名前空間][MetricName][ディメンション][期間] 、および [統計] パラメーターの詳細については、「付録1: メトリクス」をご参照ください。

    1. Mavenを使用してCloudMonitor SDKをインポートします。

      <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>cms20190101</artifactId>
        <version><SDKパッケージの最新バージョン></version>
      </dependency> 
    2. DescribeMetricMetaList操作を呼び出して、各Alibaba Cloudサービスのメトリクスを取得します。

      次のコードは、サンプルSDKリクエストを示しています。

      プライベート静的クライアントgetClient() が例外をスローする {
          Config config = new Config()
          config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        	config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
          config.endpoint = "metrics.cn-hangzhou.aliyuncs.com";
          新しいクライアント (config) を返します。}
      public static void main(String[] args) throws Exception {
          Client client = getClient();
          DescribeMetricMetaListRequest describeMetricMetaListRequest = new DescribeMetricMetaListRequest();
          describeMetricMetaListRequest.setNamespace("acs_ecs_dashboard");
          DescribeMetricMetaListResponse describeMetricMetaListResponse = client.de scribeMetricMetaList(describeMetricMetaListRequest);
          文字列json = JSON.toJSONString(describeMetricMetaListResponse.getBody());
          System.out.println(json);
      } 
  2. メトリックを取得します。

    1. POMを使用して、モニタリングデータの取得に使用するCloudMonitor SDKをインポートします。

      <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>cms20190101</artifactId>
          <version><SDKパッケージの最新バージョン></version>
      </dependency> 
    2. カーソル操作を呼び出して、エクスポートするモニタリングデータの時間範囲を指定します。 操作はCursorパラメーターの値を返します。 この値は、BatchExport操作を初めて呼び出すときに必要です。

      カーソル操作のパラメーターを設定する方法については、「カーソル」をご参照ください。

      CursorとBatchExportはすべてのリージョンでサポートされています。 詳細については、「エンドポイント」をご参照ください。

      次のコードは、サンプルSDKリクエストを示しています。

      private static Config config = null;
      private static Config getConfig(Config config){
        config = new Config();
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        config.setEndpoint("metrics.cn-hangzhou.aliyuncs.com");
        戻り設定;
      }
      プライベート静的文字列getCursor() が例外をスロー {
          Client client = new Client(getConfig(config));
          CursorRequest cursorRequest=新しいCursorRequest();
          cursorRequest.setNamespace("acs_ecs_dashboard");
          cursorRequest.setMetric("CPUUtilization");
          cursorRequest.setPeriod(60);
          cursorRequest.setStartTime(System.currentTimeMillis() - 60*60*1000);
          cursorRequest.setEndTime(Long.MAX_VALUE);
        	List<Matcher> matchers = new ArrayList<>();
        	Matcher matcher = new Matcher();
        	matcher.setLabel("userId");
          matcher.setValue("173651113438 ****");
        	matcher.setOperator("EQUALS");
        	matchers.add(matcher);
          cursorRequest.setMatchers(matchers);
          CursorResponse cursorResponse = client.cursor(cursorRequest);
          if (cursorResponse == null | | cursorResponse.getBody() == null | | cursorResponse.getBody().getCursor() == null) {
            return null;
          }
          cursorResponse.getBody().getCursor(); を返します。} 

      次のコードに似たSDKレスポンスが返されます。

      eyJidWNrZXRzIjo0LCJlbmRUaW1lIjo5MjIzMzcyMDM2ODU0Nzc1ODA3LCJleHBvcnRFbmRUaW1lIjo5MjIzMzcyMDM2ODU0Nzc1ODA3LCJleHByZXNzUmFuZ2UiOmZhbHNlLCJoYXNOZXh0Ijp0cnVlLCJsaW1pdCI6NTAwMCwibG9nVGltZU1vZGUiOnRydWUsIm1hdGNoZXJzIjp7ImNoYWluIjpbeyJsYWJlbCI6InVzZXJJZCIsIm9wZXJhdG9yIjoiRVFVQUxTIiwidmFsdWUiOiIxNzM2NTExMTM0Mzg5MTEwIn0seyJsYWJlbCI6InRhc2tJZCIsIm9wZXJhdG9yIjoiRVFVQUxTIiwidmFsdWUiOiIqIn1dfSwibWV0cmljIjoiQXZhaWxhYmlsaXR5X29yaWdpbmFsIiwibWV0cmljVHlwZSI6Ik1FVFJJQyIsIm5hbWVzcGFjZSI6ImFjc19uZXR3b3JrbW9uaXRvciIsIm5leHRQa0FkYXB0ZXIiOnt9LCJvZmZzZXQiOjAsInN0YXJ0VGltZSI6MTYzODQwNTA1MDcxNywic3RlcCI6LTEsInRpbWVvdXQiOjEyMCwid2luZG93Ijo2 ****
    3. Cursor操作で定義されているモニタリングデータをエクスポートするには、BatchExport操作を呼び出します。

      BatchExport操作のパラメーターを設定する方法については、「BatchExport」をご参照ください。

      次のコードは、サンプルSDKリクエストを示しています。

      プライベート静的文字列BatchExport (文字列カーソル) が例外 {
          Client client = new Client(getConfig(config));
          BatchExportRequest request = new BatchExportRequest();
          request.setNamespace("acs_ecs_dashboard");
          request.setMetric("CPUUtilization");
          request.setCursor (カーソル);
          request.setLength(1000);
          BatchExportResponseレスポンス=client.batchExport (リクエスト);
          if (response == null | | response.getBody() == null) {
            return null;
          } else{
            String json = JSON.toJSONString(response.getBody());
            jsonを返します。
          }
      }

      次のコードに似たSDKレスポンスが返されます。

      {
          "アンカー":"168801465 ****" 、
          "code":200,
          "cursor":"eyJidWNrZXdWNrZXRCeXRlcyI6IndBPT0iLCJidWNrZXRzIjo0LCJjdXJyZW50QnVja2V0IjotNjQsImN1cnJlbnRUYXJnZXRUaW1lU2xvdCI6MTY4Nzk5NjgwMCwiZW5kVGltZSI6MTY4ODAxNDgwMDAwMCwiZXhwb3J0RW5kVGltZSI6MTY4ODAxODMxNTU0NywiZXhwb3J0U3RhcnRUaW1lIjoxNjg4MDE0NjU1NTQ3LCJleHByZXNzUmFuZ2UiOmZhbHNlLCJoYXNOZXh0Ijp0cnVlLCJpbmRleCI6MCwibGF0ZXN0TG9nVGltZSI6MCwibWF0Y2hlcnMiOnsiY2hhaW4iOlt7ImxhYmVsIjoidXNlcklkIiwib3BlcmF0b3IiOiJFUVVBTFMiLCJ2YWx1ZSI6IjE3MzY1MTExMzQzODkxMTAifV0sImxvY2tlZCI6dHJ1ZX0sIm1ldHJpYyI6IlNwbGl0cndQcm94eU1heFJlc3BvbnNlU2l6ZSIsIm1ldHJpY1R5cGUiOiJNRVRSSUMiLCJuYW1lc3BhY2UiOiJhY3Nfa3ZzdG9yZV9leCIsIm5leHRQa0FkYXB0ZXIiOnt9LCJvY2MiOlstNjU2MDE3MDUyMjc3MzE4NjY0LDE2ODgwMTgyNTk4MTNdLCJvZmZzZXQiOjEsIm9mZnNldERpZ2l0Ijo1NjgyMjY5NDU3MTc0NTM5ODk1LCJzdGFydFRpbWUiOjE2ODgwMTQ2NTU1NDcsInN0ZXAiOi0xLCJ0YWdNYXRjaGVycyI6eyJjaGFpbiI6W10sImxvY2tlZCI6dHJ1ZX0sInRhcmdldFRpbWVTbG90cyI6WzE2ODc5MTA0MDAsMTY4Nzk5NjgwMF0sInV1aWQiOiJjYjQzNjBjNS00NjY4LTQxZDQtYmRjYi0zMGNhY2M2NDBhNmQiLCJ2Y2MiOlsxMDc3NTkwNTEzMzk4NzczMzk3LDE2ODgwMTgyNTMz ****" 、
          "dataResults":[ 
              {
                  "associated":{
      
                  },
                  "dimensions":[
                      {
                          "label":"userId" 、
                          "value":"173651113438 ****"
                      },
                      {
                          "label":"instanceId" 、
                          "値":"r-bp12meeb25mb7d ****"
                      },
                      {
                          "label":"nodeId" 、
                          "value":"r-bp12meeb25mb7d ****-proxy-3"
                      }
                  ],
                  "measurements":{
                      "最大":565.916、
                      "平均":565.916
                  },
                  "metric":"SplitrwProxyMaxResponseSize" 、
                  "namespace":"acs_kvstore" 、
                  "period":60、
                  "timestamp":1688014560000
              }
          ],
          "hasNext":true、
          "length":1, 
          "message":"success",  
          "requestId":"8D26C6ED-991C-533E-B601-B020EDF7 ****" 、
          "success":true
      } 

  • 例1: サイトモニタリングのacs_networkmonitor名前空間の可用性メトリックのモニタリングデータを定期的にエクスポートします。

    1. Cursorパラメーターの値を取得します。

      public class GetDataUtil {
          private static Config config = null;
      private static Config getConfig(Config config){
        	config = new Config();
        	config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        	config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        	config.setEndpoint("metrics.cn-hangzhou.aliyuncs.com");
        	戻り設定;
      }
      プライベート静的文字列getCursor() が例外をスロー {
      Client client = new Client(getConfig(config));
       	  CursorRequest cursorRequest=新しいCursorRequest();
       	  cursorRequest.setNamespace("acs_ecs_dashboard");
          cursorRequest.setMetric("CPUUtilization");
          cursorRequest.setPeriod(60);
          cursorRequest.setStartTime(System.currentTimeMillis() - 60*60*1000);
          cursorRequest.setEndTime(Long.MAX_VALUE);
        	List<Matcher> matchers = new ArrayList<>();
        	Matcher matcher = new Matcher();
        	matcher.setLabel("userId");
          matcher.setValue("173651113438 ****");
        	matcher.setOperator("EQUALS");
        	matchers.add(matcher);
          cursorRequest.setMatchers(matchers);
          CursorResponse cursorResponse = client.cursor(cursorRequest);
          if (cursorResponse == null | | cursorResponse.getBody() == null | | cursorResponse.getBody().getCursor() == null) {
            return null;
          }
          cursorResponse.getBody().getCursor(); を返します。}
      
          // ...
      }
    2. モニタリングデータのエクスポート

      public class GetDataUtil {
          // ...
      
          private static String BatchExport (文字列カーソル) throws Exception {
          	Client client = new Client(getConfig(config));
          	BatchExportRequest request = new BatchExportRequest();
          	request.setNamespace("acs_ecs_dashboard");
          	request.setMetric("CPUUtilization");
          	request.setCursor (カーソル);
          	request.setLength(1000);
          	BatchExportResponseレスポンス=client.batchExport (リクエスト);
          	if (response == null | | response.getBody() == null) {
            	return null;
          	} else{
            	String json = JSON.toJSONString(response.getBody());
            	jsonを返します。
          	}
      	}
      }
    3. 可用性メトリックのモニタリングデータを定期的にエクスポートします。

      たとえば、間隔を3秒に設定した場合、モニタリングデータは3秒ごとにエクスポートされます。

      パブリッククラスDemo1 {
          プライベート文字列カーソル;
          @ Scheduled(cron = "*/3 * * * * ?")
          public void getCpuData() が例外をスロー {
              System.out.println("データの取得を開始する");
              if(cursor == null){
                  Matcher matcher = new Matcher();
                  matcher.setLabel("userId").setOperator("EQUALS").setValue("173651113438 ****");
                  List<Matcher> chain = new ArrayList<>();
                  chain.add (マッチャー);
                  カーソル=GetDataUtil.getCursor("acs_networkmonitor","Availability",60,System.currentTimeMillis() - 60*60*1000,Long.MAX_VALUE,chain);
              }
              String sth = GetDataUtil.BatchExport (カーソル、"acs_networkmonitor" 、"Availability" 、10);
              JSONObject jsonObject = JSONObject.parseObject(sth);
              if(!StringUtils.isEmpty(jsonObject.getString("カーソル"))){
                  cursor = jsonObject.getString("cursor");
              }
              System.out.println("データの取得を停止する");
          }
      }
  • 例2: サイトモニタリングでacs_networkmonitor名前空間のAvailabilityおよびAvailability_newメトリックのモニタリングデータを定期的にエクスポートします。

    1. Cursorパラメーターの値を取得します。

      public class GetDataUtil {
          private static Config config = null;
      private static Config getConfig(Config config){
        	config = new Config();
        	config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        	config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        	config.setEndpoint("metrics.cn-hangzhou.aliyuncs.com");
        	戻り設定;
      }
      プライベート静的文字列getCursor() が例外をスロー {
      Client client = new Client(getConfig(config));
       	  CursorRequest cursorRequest=新しいCursorRequest();
       	  cursorRequest.setNamespace("acs_ecs_dashboard");
          cursorRequest.setMetric("CPUUtilization");
          cursorRequest.setPeriod(60);
          cursorRequest.setStartTime(System.currentTimeMillis() - 60*60*1000);
          cursorRequest.setEndTime(Long.MAX_VALUE);
        	List<Matcher> matchers = new ArrayList<>();
        	Matcher matcher = new Matcher();
        	matcher.setLabel("userId");
          matcher.setValue("173651113438 ****");
        	matcher.setOperator("EQUALS");
        	matchers.add(matcher);
          cursorRequest.setMatchers(matchers);
          CursorResponse cursorResponse = client.cursor(cursorRequest);
          if (cursorResponse == null | | cursorResponse.getBody() == null | | cursorResponse.getBody().getCursor() == null) {
            return null;
          }
          cursorResponse.getBody().getCursor(); を返します。}
      
          // ...
      }
    2. モニタリングデータのエクスポート

      public class GetDataUtil {
          // ...
      
          private static String BatchExport (文字列カーソル) throws Exception {
          	Client client = new Client(getConfig(config));
          	BatchExportRequest request = new BatchExportRequest();
          	request.setNamespace("acs_ecs_dashboard");
          	request.setMetric("CPUUtilization");
          	request.setCursor (カーソル);
          	request.setLength(1000);
          	BatchExportResponseレスポンス=client.batchExport (リクエスト);
          	if (response == null | | response.getBody() == null) {
            	return null;
          	} else{
            	String json = JSON.toJSONString(response.getBody());
            	jsonを返します。
          	}
      	}
      }

    3. AvailabilityおよびAvailability_newメトリックのモニタリングメトリックを定期的にエクスポートします。

      たとえば、間隔を3秒に設定した場合、モニタリングデータは3秒ごとにエクスポートされます。

      パブリッククラスDemo2 {
          プライベート文字列availabilityCursor;
          プライベート文字列availability_newCursor;
          @ Scheduled(cron = "*/3 * * * * ?")
          public void getCpuData() が例外をスロー {
              System.out.println("データの取得を開始する");
              if(availabilityCursor == null){
                  Matcher matcher = new Matcher();
                  matcher.setLabel("userId").setOperator("EQUALS").setValue("173651113438 ****");
                  List<Matcher> chain = new ArrayList<>();
                  chain.add (マッチャー);
                  availabilityCursor = GetDataUtil.getCursor("acs_networkmonitor","Availability",60,System.currentTimeMillis() - 60*60*1000,Long.MAX_VALUE,chain);
              }
              if(availability_newCursor == null){
                  Matcher matcher = new Matcher();
      matcher.setLabel("userId").setOperator("EQUALS").setValue("173651113438 ****");
                  List<Matcher> chain = new ArrayList<>();
                  chain.add (マッチャー);
                  availability_newCursor = GetDataUtil.getCursor("acs_networkmonitor","Availability_new",60,System.currentTimeMillis() - 60*60*1000,Long.MAX_VALUE,chain);
              }
              String sth1 = GetDataUtil.BatchExport(availabilityCursor、"acs_networkmonitor" 、"Availability" 、10);
              String sth2 = GetDataUtil.BatchExport(availability_newCursor,"acs_networkmonitor","Availability_new",10);
              JSONObject jsonObject1 = JSONObject.parseObject(sth1);
              if(!StringUtils.isEmpty(jsonObject1.getString("cursor"))){
                  availabilityCursor = jsonObject1.getString("cursor");
              }
              System.out.println("可用性");
              System.out.println(sth1);
              JSONObject jsonObject2 = JSONObject.parseObject(sth2);
              if(!StringUtils.isEmpty(jsonObject2.getString("cursor"))){
                  availability_newCursor = jsonObject2.getString("cursor");
              }
              System.out.println("availability_new");
              System.out.println(sth2);
              System.out.println("データの取得を停止する");
          }
      }