CloudMonitorは、クラウドでのモニタリングデータのエクスポートに役立つクラウドモニタリングエクスポーター機能を提供します。
前提条件
ハイブリッドクラウドモニタリングが有効になりました。 詳細については、「Hybrid Cloud Monitoringの有効化」をご参照ください。
背景情報
Hybrid Cloud Monitoringの有効化には課金されません。 実際のリソース使用量に基づいて課金されます。 クラウドモニタリングエクスポータ機能の課金については、「クラウドモニタリングエクスポータ機能の課金」をご参照ください。
手順
DescribeMetricMetaList操作を呼び出して、各Alibaba Cloudサービスのメトリクスを取得します。
DescribeMetricMetaList操作のパラメーターを設定する方法については、「DescribeMetricMetaList」をご参照ください。
説明各Alibaba Cloudサービスのメトリクスの
[名前空間]
、[MetricName]
、[ディメンション]
、[期間]
、および[統計]
パラメーターの詳細については、「付録1: メトリクス」をご参照ください。Mavenを使用してCloudMonitor SDKをインポートします。
<dependency> <groupId>com.aliyun</groupId> <artifactId>cms20190101</artifactId> <version><SDKパッケージの最新バージョン></version> </dependency>
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); }
メトリックを取得します。
POMを使用して、モニタリングデータの取得に使用するCloudMonitor SDKをインポートします。
<dependency> <groupId>com.aliyun</groupId> <artifactId>cms20190101</artifactId> <version><SDKパッケージの最新バージョン></version> </dependency>
カーソル操作を呼び出して、エクスポートするモニタリングデータの時間範囲を指定します。 操作は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 ****
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
名前空間の可用性
メトリックのモニタリングデータを定期的にエクスポートします。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(); を返します。} // ... }
モニタリングデータのエクスポート
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秒ごとにエクスポートされます。
パブリッククラス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
メトリックのモニタリングデータを定期的にエクスポートします。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(); を返します。} // ... }
モニタリングデータのエクスポート
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を返します。 } } }
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("データの取得を停止する"); } }