全部产品
云市场

QueryMetric

更新时间:2019-09-10 10:31:21

调用 QueryMetric 接口查询应用监控的相关监控指标。

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

调试

描述

QueryMetric 接口可用于查询应用监控和前端监控的相关监控指标。本文以查询应用监控的相关指标为例。

API 名称 Request Response
QueryMetric QueryMetricRequest QueryMetricResponse

请求参数

请求参数包含公共参数和业务参数。

公共参数

公共请求参数参见公共参数

业务参数

阿里云将用户的所有请求参数封装在一个 Request 中,返回一个 Response。

字段名称 字段类型 设置方法 字段含义 是否必选 备注
StartTime Long setStartTime 查询数据的起始时间 N/A
EndTime Long setEndTime 查询数据的截止时间 N/A
Metric String setMetric 指标 N/A
Measures List[String] setMesures 指标的测量数据 N/A
Dimensions List[String] setDimensionss 维度 N/A
Filters List[Filter] setFilters 过滤条件 N/A
IntervalInSec Integer setIntervalInSec 数据片的时间间隔(ms) N/A
OrderBy String setOrderBy 排序依据 N/A
Limit Integer setLimit 返回结果的个数限制 N/A
Order String setOrder 排序
  • ASC:升序
  • DESC:降序
SecurityToken String setSecurityToken STS securityToken 采用 RAM 用户角色模式时需要设置该字段。详情参见借助 RAM 角色实现跨云账号访问资源

Filter 复合字段说明

字段名称 字段类型 设置方法 字段含义 示例值
Key String setKey 维度名称 appId
Value String setValue 维度值 11

注意:应用监控所有的 Metric 查询中必须在 filters 中添加 pid 条件和 regionId 条件。

如何获取应用 pid

在控制台左侧导航栏中单击应用监控 > 应用列表,然后在应用列表页面单击目标应用名称,进入该应用的总览页面。此时浏览器地址栏中的 URL 即包含应用的 pid,格式为 pid=xxx

由于浏览器进行了编码,除 EDAS 应用之外的其他应用需要对 pid 稍作修改。例如,如果 URL 中包含的 pid

  1. xxx%4074xxx

则需要将 %40 替换为 @,即:

  1. xxx@74xxx

返回参数

返回值为 JSON 串形式,可通过 QueryMetricResponse.getdata() 获取。

字段名称 字段含义 备注
data 数据点 N/A

可查询的应用监控指标

您可以使用 QueryMetric 接口查询应用监控的以下指标。

说明: 已知具体的查询条件时,应将值传入 filters 参数中,用于限定查询结果的范围。如果不知道具体的查询条件,可以将下表中的维度传入 dimensions 参数,从而获得该维度所有可能值的列表。例如,已知一个国家的 ip_country_id,但不知道该国家各个地区的 ip_region_id,则可以将 ip_country_id 传入 filters 参数,并将 ip_region_id 传入 dimensions 参数,即可获得该国家下所有地区的 ip_region_id,您可以进而使用具体的 ip_region_id 进行更精确的查询。

指标集(Metric) 描述 维度(Dimensions) 测量数据
appstat.vm 通用指标,对应应用详情下的 JVM 监控图表,包括 GC 指标、堆内存/非堆内存详情以及线程数。
  • pid
  • rootIp
gc指标:
  • youngGcCount // JVM 监控 Young GC 次数
  • oldGcCount // JVM 监控 Full GC 次数
  • youngGcTime // JVM 监控 Young GC 耗时
  • oldGcTime // JVM 监控 Full GC 耗时
  • youngGcCountInstant //JVM 监控 Young GC 次数瞬时值
  • oldGcCountInstant //JVM 监控 Full GC 次数瞬时值
  • youngGcTimeInstant //JVM 监控 Young GC 耗时瞬时值
  • oldGcTimeInstant //JVM 监控 Full GC 耗时瞬时值
堆内存/非堆内存详情:
  • edenSpace //年轻代-eden 区
  • oldGen //老年代
  • survivorSpace //年轻代-survivor 区
  • metaSpace
  • nonHeapCommitted //非堆内存
  • nonHeapInit //非堆内存初始值
  • nonHeapMax //非堆内存最大值
  • nonHeapUsed //非堆内存使用量
  • directUsed //直接缓冲区
  • directCapacity //直接缓冲区
线程数:
  • threadCount
  • threadNewCount
  • threadDeadlockCount
  • threadRunnableCount
  • threadTerminatedCount
  • threadTimedWaitCount
  • threadWaitCount
  • threadBlockedCount
appstat.host 主机监控,包括实例数、CPU、物理内存、磁盘、负载、网络流量(Bytes)和网络数据包数量。
  • pid
  • rootIp
实例数:
  • instanceCount
CPU:
  • systemCpuIdle //页面未展示 - CPU 空等待
  • systemCpuSystem
  • systemCpuUser
  • systemCpuIoWait
物理内存:
  • systemMemFree
  • systemMemUsed
  • systemMemTotal //页面未展示 - 系统内存总计
  • systemMemBuffers
  • systemMemCached //页面缓存
磁盘:
  • systemDiskFree
  • systemDiskUsed
  • systemDiskTotal // 公共云控制台页面未展示
负载:
  • systemLoad
网络:
  • systemNetInPackets
  • systemNetOutPackets
  • systemNetInErrs
  • systemNetOutErrs
  • systemNetInBytes
  • systemNetOutBytes
appstat.database 数据库调用
  • pid
  • rpcType //调用类型
  • endpoint // 数据库地址:localhost: 3306
  • destId // 库名:arms
  • rt // 响应时间
  • count // 请求数
  • error // 错误数
appstat.txn 接口调用
  • pid
  • rpcType
  • rpc// 接口:/demo/oracleTwo
  • rt
  • count
  • error
  • errRate // 错误率
appstat.detail 应用详情
  • pid
  • rpcType
  • rootIp
  • rt
  • count
  • error
  • errRate
appstat.exception 异常
  • pid
  • rpc
  • endpoint
  • excepType
  • excepInfo
  • rt
  • count
  • error
appstat.sql 慢 sql
  • pid
  • rpc
  • endpoint
  • sqlId
  • rt
  • count
  • error
  • slow
appstat.mq.send MQ 发送 n/a
  • rt
  • count
  • error
appstat.mq.receive MQ 接收 n/a
  • rt
  • count
  • error

示例代码

使用 QueryMetric 接口查询应用监控 JVM 老年代与 Eden 区的示例代码如下:

  1. import com.aliyuncs.DefaultAcsClient;
  2. import com.aliyuncs.IAcsClient;
  3. import com.aliyuncs.exceptions.ClientException;
  4. import com.aliyuncs.exceptions.ServerException;
  5. import com.aliyuncs.profile.DefaultProfile;
  6. import com.google.gson.Gson;
  7. import java.util.*;
  8. import com.aliyuncs.arms.model.v20190808.*;
  9. public class ARMSDemo {
  10. public static void main(String[] args) {
  11. //用户主账号或 RAM 用户的 AK,或者 RAM 用户角色的临时安全令牌的 AK。
  12. String accessKeyId = "xxx";
  13. //用户主账号或 RAM 用户的 SK,或者 RAM 用户角色的临时安全令牌的 SK。
  14. String accessKeySecret = "xxx";
  15. //Region 和 Endpoint 保持一致,具体内容与 ARMS 的 Region 绑定。
  16. String endpoint = "xxx";//例如 cn-hangzhou
  17. String region = "xxx";//例如 cn-hangzhou
  18. //产品名称始终为“ARMS”。
  19. String productName = "ARMS";
  20. //如果是非杭州区域,请替换 cn-hangzhou,例如改为 cn-beijing。
  21. String domain = "arms.cn-hangzhou.aliyuncs.com";
  22. DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessKeySecret);
  23. try {
  24. DefaultProfile.addEndpoint(endpoint, region, productName, domain);
  25. } catch (ClientException e) {
  26. e.printStackTrace();
  27. }
  28. IAcsClient client = new DefaultAcsClient(profile);
  29. QueryMetricRequest request = new QueryMetricRequest();
  30. request.setStartTime(1555482869888L);
  31. request.setEndTime(1555488869888L);
  32. request.setMetric("APPSTAT.JVM");
  33. List<String> measuresList = new ArrayList<String>();
  34. measuresList.add("EDENSPACE");
  35. measuresList.add("OLDGEN");
  36. request.setMeasuress(measuresList);
  37. List<QueryMetricRequest.Filters> filtersList = new ArrayList<QueryMetricRequest.Filters>();
  38. QueryMetricRequest.Filters filters1 = new QueryMetricRequest.Filters();
  39. filters1.setKey("pid");
  40. filters1.setValue("xxx");
  41. filtersList.add(filters1);
  42. QueryMetricRequest.Filters filters2 = new QueryMetricRequest.Filters();
  43. filters2.setKey("regionId");
  44. filters2.setValue("cn-hangzhou");
  45. filtersList.add(filters2);
  46. request.setFilterss(filtersList);
  47. List<String> dimensionsList = new ArrayList<String>();
  48. dimensionsList.add("rootIp");
  49. request.setDimensionss(dimensionsList);
  50. try {
  51. QueryMetricResponse response = client.getAcsResponse(request);
  52. System.out.println(new Gson().toJson(response));
  53. } catch (ServerException e) {
  54. e.printStackTrace();
  55. } catch (ClientException e) {
  56. System.out.println("ErrCode:" + e.getErrCode());
  57. System.out.println("ErrMsg:" + e.getErrMsg());
  58. System.out.println("RequestId:" + e.getRequestId());
  59. }
  60. }
  61. }
  1. const Core = require('@alicloud/pop-core');
  2. var client = new Core({
  3. accessKeyId: '<accessKeyId>',
  4. accessKeySecret: '<accessKeySecret>',
  5. endpoint: 'http://arms.cn-hangzhou.aliyuncs.com',
  6. apiVersion: '2019-08-08'
  7. });
  8. var params = {
  9. "Measures.1": "EDENSPACE",
  10. "Measures.2": "OLDGEN",
  11. "Filters.1.Key": "pid",
  12. "Filters.1.Value": "xxx",
  13. "Filters.2.Key": "regionId",
  14. "Filters.2.Value": "cn-hangzhou",
  15. "Metric": "APPSTAT.JVM",
  16. "Dimensions.1": "rootIp",
  17. "StartTime": 1555482869888,
  18. "EndTime": 1555488869888
  19. }
  20. var requestOption = {
  21. method: 'POST'
  22. };
  23. client.request('QueryMetric', params, requestOption).then((result) => {
  24. console.log(result);
  25. }, (ex) => {
  26. console.log(ex);
  27. })
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/aliyun/alibaba-cloud-sdk-go/services/arms"
  5. )
  6. func main() {
  7. client, err := arms.NewClientWithAccessKey("cn-hangzhou", "<accessKeyId>", "<accessKeySecret>")
  8. request := arms.CreateQueryMetricRequest()
  9. request.EndTime = "1555488869888"
  10. request.StartTime = "1555482869888"
  11. request.Metric = "APPSTAT.JVM"
  12. request.Measures = &[]string{"EDENSPACE", "OLDGEN"}
  13. request.Filters = &[]arms.QueryMetricFilters{
  14. {
  15. Key: "pid",
  16. Value: "xxx",
  17. },
  18. {
  19. Key: "regionId",
  20. Value: "cn-hangzhou",
  21. },
  22. }
  23. request.Dimensions = &[]string{"rootIp"}
  24. response, err := client.QueryMetric(request)
  25. if err != nil {
  26. fmt.Print(err.Error())
  27. }
  28. fmt.Printf("response is %#v\n", response)
  29. }
  1. <?php
  2. use AlibabaCloud\Client\AlibabaCloud;
  3. use AlibabaCloud\Client\Exception\ClientException;
  4. use AlibabaCloud\Client\Exception\ServerException;
  5. // Download:https://github.com/aliyun/openapi-sdk-php-client
  6. // Usage:https://github.com/aliyun/openapi-sdk-php-client/blob/master/README-CN.md
  7. AlibabaCloud::accessKeyClient('<accessKeyId>', '<accessKeySecret>')
  8. ->regionId('cn-hangzhou') // replace regionId as you need
  9. ->asGlobalClient();
  10. try {
  11. $result = AlibabaCloud::rpcRequest()
  12. ->product('ARMS')
  13. // ->scheme('https') // https | http
  14. ->version('2019-08-08')
  15. ->action('QueryMetric')
  16. ->method('POST')
  17. ->options([
  18. 'query' => [
  19. 'Measures.1' => 'EDENSPACE',
  20. 'Measures.2' => 'OLDGEN',
  21. 'Filters.1.Key' => 'pid',
  22. 'Filters.1.Value' => 'xxx',
  23. 'Filters.2.Key' => 'regionId',
  24. 'Filters.2.Value' => 'cn-hangzhou',
  25. 'Dimensions.1' => "rootIp",
  26. 'Metric' => 'APPSTAT.JVM',
  27. 'StartTime' => '1555482869888',
  28. 'EndTime' => '1555488869888',
  29. ],
  30. ])
  31. ->request();
  32. print_r($result->toArray());
  33. } catch (ClientException $e) {
  34. echo $e->getErrorMessage() . PHP_EOL;
  35. } catch (ServerException $e) {
  36. echo $e->getErrorMessage() . PHP_EOL;
  37. }
  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. from aliyunsdkcore.client import AcsClient
  4. from aliyunsdkcore.acs_exception.exceptions import ClientException
  5. from aliyunsdkcore.acs_exception.exceptions import ServerException
  6. from aliyunsdkarms.request.v20190808.QueryMetricRequest import QueryMetricRequest
  7. client = AcsClient('<accessKeyId>', '<accessKeySecret>', 'cn-hangzhou')
  8. request = QueryMetricRequest()
  9. request.set_accept_format('json')
  10. request.set_EndTime(1555488869888)
  11. request.set_StartTime(1555482869888)
  12. request.set_Metric("APPSTAT.JVM")
  13. request.set_Measuress(["EDENSPACE","OLDGEN"])
  14. request.set_Filterss([
  15. {
  16. "Key": "pid",
  17. "Value": "xxx"
  18. },
  19. {
  20. "Key": "regionId",
  21. "Value": "cn-hangzhou"
  22. }
  23. ])
  24. request.set_Dimensionss(["rootIp"])
  25. response = client.do_action_with_exception(request)
  26. # python2: print(response)
  27. print(str(response, encoding='utf-8'))
  1. using System;
  2. using System.Collections.Generic;
  3. using Aliyun.Acs.Core;
  4. using Aliyun.Acs.Core.Exceptions;
  5. using Aliyun.Acs.Core.Profile;
  6. using Aliyun.Acs.ARMS.Model.V20190808;
  7. namespace ARMSDemo
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", "<accessKeyId>", "<accessKeySecret>");
  14. DefaultAcsClient client = new DefaultAcsClient(profile);
  15. var request = new QueryMetricRequest();
  16. request.EndTime = 1555488869888;
  17. request.StartTime = 1555482869888;
  18. request.Metric = "APPSTAT.JVM";
  19. var measuresList = new List<String>();
  20. measuresList.Add("EDENSPACE");
  21. measuresList.Add("OLDGEN");
  22. request.Measuress = measuresList;
  23. var filtersList = new List<QueryMetricRequest.Filters>();
  24. var filters1 = new QueryMetricRequest.Filters();
  25. filters1.Key = "pid";
  26. filters1.Value = "xxx";
  27. filtersList.Add(filters1);
  28. var filters2 = new QueryMetricRequest.Filters();
  29. filters2.Key = "regionId";
  30. filters2.Value = "cn-hangzhou";
  31. filtersList.Add(filters2);
  32. request.Filterss = filtersList;
  33. var dimensionsList = new List<String>();
  34. dimensionsList.Add("rootIp");
  35. request.Dimensionss = dimensionsList;
  36. try {
  37. var response = client.GetAcsResponse(request);
  38. Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
  39. }
  40. catch (ServerException e)
  41. {
  42. Console.WriteLine(e);
  43. }
  44. catch (ClientException e)
  45. {
  46. Console.WriteLine(e);
  47. }
  48. }
  49. }
  50. }
  1. # gem install aliyunsdkcore
  2. require 'aliyunsdkcore'
  3. client = RPCClient.new(
  4. access_key_id: '<accessKeyId>',
  5. access_key_secret: '<accessKeySecret>',
  6. endpoint: 'https://arms.aliyuncs.com',
  7. api_version: '2019-08-08'
  8. )
  9. response = client.request(
  10. action: 'QueryMetric',
  11. params: {
  12. "Measures.1": "EDENSPACE",
  13. "Measures.2": "OLDGEN",
  14. "Filters.1.Key": "pid",
  15. "Filters.1.Value": "xxx",
  16. "Filters.2.Key": "regionId",
  17. "Filters.2.Value": "cn-hangzhou",
  18. "Dimensions.1": "rootIp",
  19. "Metric": "APPSTAT.JVM",
  20. "StartTime": 1555482869888,
  21. "EndTime": 1555488869888
  22. },
  23. opts: {
  24. method: 'POST'
  25. }
  26. )
  27. print JSON.parse(response.body)