Exporte suas métricas de monitoramento cloud em tempo real usando as operações de API Cursor e BatchExport.
Pré-requisitos
O Hybrid Cloud Monitoring está ativado. Activate Hybrid Cloud Monitoring.
Informações básicas
A ativação do Hybrid Cloud Monitoring é gratuita. O faturamento é baseado no uso. Real-time data export.
Procedimento
-
Chame a operação DescribeMetricMetaList para obter a lista de métricas de cada service da Alibaba Cloud.
Para obter detalhes sobre os parâmetros, consulte DescribeMetricMetaList.
NotaOs valores de
Namespace,MetricName,Dimensions,PeriodeStatisticspara cada service estão listados em Alibaba Cloud service metrics.-
Adicione a dependência do SDK do Cloud Monitor via Maven.
<dependency> <groupId>com.aliyun</groupId> <artifactId>cms20190101</artifactId> <version><LATEST_SDK_VERSION></version> </dependency> -
Chame a operação DescribeMetricMetaList para obter a lista de métricas de cada service da Alibaba Cloud.
Exemplo de solicitação do SDK:
private static Client getClient() throws Exception { 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"; return new Client(config); } public static void main(String[] args) throws Exception { Client client = getClient(); DescribeMetricMetaListRequest describeMetricMetaListRequest = new DescribeMetricMetaListRequest(); describeMetricMetaListRequest.setNamespace("acs_ecs_dashboard"); DescribeMetricMetaListResponse describeMetricMetaListResponse = client.describeMetricMetaList(describeMetricMetaListRequest); String json = JSON.toJSONString(describeMetricMetaListResponse.getBody()); System.out.println(json); }
-
-
Obtenha as métricas.
-
Adicione a dependência do SDK ao arquivo pom.xml.
<dependency> <groupId>com.aliyun</groupId> <artifactId>cms20190101</artifactId> <version><LATEST_SDK_VERSION></version> </dependency> -
Chame a operação Cursor para definir o escopo de exportação de dados. Essa operação retorna um cursor necessário para a chamada inicial do BatchExport.
Para obter detalhes sobre os parâmetros, consulte Cursor.
As operações Cursor e BatchExport estão disponíveis em todas as regiões. Endpoints.
Exemplo de solicitação do 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"); return config; } private static String getCursor() throws Exception { Client client = new Client(getConfig(config)); CursorRequest cursorRequest = new 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; } return cursorResponse.getBody().getCursor(); }Exemplo de resposta do SDK:
eyJidWNrZXRzIjo0LCJlbmRUaW1lIjo5MjIzMzcyMDM2ODU0Nzc1ODA3LCJleHBvcnRFbmRUaW1lIjo5MjIzMzcyMDM2ODU0Nzc1ODA3LCJleHByZXNzUmFuZ2UiOmZhbHNlLCJoYXNOZXh0Ijp0cnVlLCJsaW1pdCI6NTAwMCwibG9nVGltZU1vZGUiOnRydWUsIm1hdGNoZXJzIjp7ImNoYWluIjpbeyJsYWJlbCI6InVzZXJJZCIsIm9wZXJhdG9yIjoiRVFVQUxTIiwidmFsdWUiOiIxNzM2NTExMTM0Mzg5MTEwIn0seyJsYWJlbCI6InRhc2tJZCIsIm9wZXJhdG9yIjoiRVFVQUxTIiwidmFsdWUiOiIqIn1dfSwibWV0cmljIjoiQXZhaWxhYmlsaXR5X29yaWdpbmFsIiwibWV0cmljVHlwZSI6Ik1FVFJJQyIsIm5hbWVzcGFjZSI6ImFjc19uZXR3b3JrbW9uaXRvciIsIm5leHRQa0FkYXB0ZXIiOnt9LCJvZmZzZXQiOjAsInN0YXJ0VGltZSI6MTYzODQwNTA1MDcxNywic3RlcCI6LTEsInRpbWVvdXQiOjEyMCwid2luZG93Ijo2**** -
Chame a operação BatchExport para exportar os dados de monitoramento definidos pela operação Cursor.
Para obter detalhes sobre os parâmetros, consulte BatchExport.
Exemplo de solicitação do SDK:
private static String BatchExport(String cursor) throws Exception { Client client = new Client(getConfig(config)); BatchExportRequest request = new BatchExportRequest(); request.setNamespace("acs_ecs_dashboard"); request.setMetric("CPUUtilization"); request.setCursor(cursor); request.setLength(1000); BatchExportResponse response = client.batchExport(request); if (response == null || response.getBody() == null) { return null; }else { String json = JSON.toJSONString(response.getBody()); return json; } }Exemplo de resposta do SDK:
{ "anchor":"168801465****", "code":200, "cursor":"eyJidWNrZXdWNrZXRCeXRlcyI6IndBPT0iLCJidWNrZXRzIjo0LCJjdXJyZW50QnVja2V0IjotNjQsImN1cnJlbnRUYXJnZXRUaW1lU2xvdCI6MTY4Nzk5NjgwMCwiZW5kVGltZSI6MTY4ODAxNDgwMDAwMCwiZXhwb3J0RW5kVGltZSI6MTY4ODAxODMxNTU0NywiZXhwb3J0U3RhcnRUaW1lIjoxNjg4MDE0NjU1NTQ3LCJleHByZXNzUmFuZ2UiOmZhbHNlLCJoYXNOZXh0Ijp0cnVlLCJpbmRleCI6MCwibGF0ZXN0TG9nVGltZSI6MCwibWF0Y2hlcnMiOnsiY2hhaW4iOlt7ImxhYmVsIjoidXNlcklkIiwib3BlcmF0b3IiOiJFUVVBTFMiLCJ2YWx1ZSI6IjE3MzY1MTExMzQzODkxMTAifV0sImxvY2tlZCI6dHJ1ZX0sIm1ldHJpYyI6IlNwbGl0cndQcm94eU1heFJlc3BvbnNlU2l6ZSIsIm1ldHJpY1R5cGUiOiJNRVRSSUMiLCJuYW1lc3BhY2UiOiJhY3Nfa3ZzdG9yZV9leCIsIm5leHRQa0FkYXB0ZXIiOnt9LCJvY2MiOlstNjU2MDE3MDUyMjc3MzE4NjY0LDE2ODgwMTgyNTk4MTNdLCJvZmZzZXQiOjEsIm9mZnNldERpZ2l0Ijo1NjgyMjY5NDU3MTc0NTM5ODk1LCJzdGFydFRpbWUiOjE2ODgwMTQ2NTU1NDcsInN0ZXAiOi0xLCJ0YWdNYXRjaGVycyI6eyJjaGFpbiI6W10sImxvY2tlZCI6dHJ1ZX0sInRhcmdldFRpbWVTbG90cyI6WzE2ODc5MTA0MDAsMTY4Nzk5NjgwMF0sInV1aWQiOiJjYjQzNjBjNS00NjY4LTQxZDQtYmRjYi0zMGNhY2M2NDBhNmQiLCJ2Y2MiOlsxMDc3NTkwNTEzMzk4NzczMzk3LDE2ODgwMTgyNTMz****", "dataResults":[ { "associated":{ }, "dimensions":[ { "label":"userId", "value":"173651113438****" }, { "label":"instanceId", "value":"r-bp12meeb25mb7d****" }, { "label":"nodeId", "value":"r-bp12meeb25mb7d****-proxy-3" } ], "measurements":{ "Maximum":565.916, "Average":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 }
-
Exemplos
-
Exemplo 1: Exportar continuamente dados de monitoramento da métrica
Availabilityno namespaceacs_networkmonitordo site monitoring.-
Obtenha um 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"); return config; } private static String getCursor(String namespace, String metric, int period, long startTime, long endTime, List<Matcher> matchers) throws Exception { Client client = new Client(getConfig(config)); CursorRequest cursorRequest = new CursorRequest(); cursorRequest.setNamespace(namespace); cursorRequest.setMetric(metric); cursorRequest.setPeriod(period); cursorRequest.setStartTime(startTime); cursorRequest.setEndTime(endTime); cursorRequest.setMatchers(matchers); CursorResponse cursorResponse = client.cursor(cursorRequest); if (cursorResponse == null || cursorResponse.getBody() == null || cursorResponse.getBody().getCursor() == null) { return null; } return cursorResponse.getBody().getCursor(); } // ... } -
Exporte os dados de monitoramento.
public class GetDataUtil { // ... private static String BatchExport(String cursor, String namespace, String metric, int length) throws Exception { Client client = new Client(getConfig(config)); BatchExportRequest request = new BatchExportRequest(); request.setNamespace(namespace); request.setMetric(metric); request.setCursor(cursor); request.setLength(length); BatchExportResponse response = client.batchExport(request); if (response == null || response.getBody() == null) { return null; }else { String json = JSON.toJSONString(response.getBody()); return json; } } } -
Exporte continuamente os dados de monitoramento da métrica
Availability.O exemplo a seguir usa um temporizador de 3 segundos:
public class Demo1 { private String cursor; @Scheduled(cron = "*/3 * * * * ?") public void getCpuData() throws Exception { System.out.println("Start retrieving data."); if(cursor == null){ Matcher matcher = new Matcher(); matcher.setLabel("userId").setOperator("EQUALS").setValue("173651113438****"); List<Matcher> chain = new ArrayList<>(); chain.add(matcher); cursor = GetDataUtil.getCursor("acs_networkmonitor","Availability",60,System.currentTimeMillis() - 60 * 60 * 1000,Long.MAX_VALUE,chain); } String sth = GetDataUtil.BatchExport(cursor,"acs_networkmonitor","Availability",10); JSONObject jsonObject = JSONObject.parseObject(sth); if(!StringUtils.isEmpty(jsonObject.getString("cursor"))){ cursor = jsonObject.getString("cursor"); } System.out.println("Finished retrieving data."); } }
-
-
Exemplo 2: Exportar continuamente dados de monitoramento das métricas
AvailabilityeAvailability_newno namespaceacs_networkmonitordo site monitoring.-
Obtenha um 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"); return config; } private static String getCursor(String namespace, String metric, int period, long startTime, long endTime, List<Matcher> matchers) throws Exception { Client client = new Client(getConfig(config)); CursorRequest cursorRequest = new CursorRequest(); cursorRequest.setNamespace(namespace); cursorRequest.setMetric(metric); cursorRequest.setPeriod(period); cursorRequest.setStartTime(startTime); cursorRequest.setEndTime(endTime); cursorRequest.setMatchers(matchers); CursorResponse cursorResponse = client.cursor(cursorRequest); if (cursorResponse == null || cursorResponse.getBody() == null || cursorResponse.getBody().getCursor() == null) { return null; } return cursorResponse.getBody().getCursor(); } // ... } -
Exporte os dados de monitoramento.
public class GetDataUtil { // ... private static String BatchExport(String cursor, String namespace, String metric, int length) throws Exception { Client client = new Client(getConfig(config)); BatchExportRequest request = new BatchExportRequest(); request.setNamespace(namespace); request.setMetric(metric); request.setCursor(cursor); request.setLength(length); BatchExportResponse response = client.batchExport(request); if (response == null || response.getBody() == null) { return null; }else { String json = JSON.toJSONString(response.getBody()); return json; } } } -
Exporte continuamente os dados de monitoramento das métricas
AvailabilityeAvailability_new.O exemplo a seguir usa um temporizador de 3 segundos:
public class Demo2 { private String availabilityCursor; private String availability_newCursor; @Scheduled(cron = "*/3 * * * * ?") public void getCpuData() throws Exception { System.out.println("Start retrieving data."); if(availabilityCursor == null){ Matcher matcher = new Matcher(); matcher.setLabel("userId").setOperator("EQUALS").setValue("173651113438****"); List<Matcher> chain = new ArrayList<>(); chain.add(matcher); 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(matcher); 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("availability"); 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("Finished retrieving data."); } }
-