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

调试

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

描述

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

API名称 Request Response
QueryMetric QueryMetricRequest QueryMetricResponse

请求参数

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

公共参数

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

业务参数

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

字段名称 字段类型 设置方法 字段含义 是否必选 备注
StartTime Long setStartTime 查询数据的起始时间 取值为13位时间戳
EndTime Long setEndTime 查询数据的截止时间 取值为13位时间戳
Metric String setMetric 指标 需查询的指标不可自定义输入,请参见可查询的应用监控指标
Measures List[String] setMesures 指标的测量数据 对应metric的测量数据,请参见可查询的应用监控指标
Dimensions List[String] setDimensionss 维度 对应metric的维度,请参见可查询的应用监控指标
Filters List[Filter] setFilters 过滤条件 必选字段,必须添加pidregionId条件,pid获取方式请参见如何获取应用pid
IntervalInSec Integer setIntervalInSec 数据片的时间间隔(ms)
  • 单位:ms
  • 取值范围:≥60000
OrderBy String setOrderBy 排序依据
Limit Integer setLimit 返回结果的个数限制
Order String setOrder 排序 取值范围:
  • ASC:升序
  • DESC:降序
SecurityToken String setSecurityToken STS securityToken 采用RAM用户角色模式时需要设置该字段。详情参见借助RAM角色实现跨云账号访问资源

Filter复合字段说明

字段名称 字段类型 设置方法 字段含义 示例值
key String setKey 维度名称 pid
value String setValue 维度值 xxx@74xxx
注意 应用监控所有的Metric查询中必须在filters中添加pid条件和regionId条件。

如何获取应用pid

ARMS控制台左侧导航栏中单击应用监控 > 应用列表,然后在应用列表页面单击目标应用名称,进入该应用的总览页面。

此时浏览器地址栏中的URL即包含应用的pid,格式为pid=xxx。由于浏览器进行了编码,除EDAS应用之外的其他应用需要对pid稍作修改。例如,如果URL中包含的pid为xxx%4074xxx,则需要将%40替换为@,即:xxx@74xxx

返回参数

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

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

可查询的应用监控指标

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

说明 已知具体的查询条件时,应将值传入filters参数中,用于限定查询结果的范围。如果不知道具体的查询条件,可以将下表中的维度传入dimensions参数,从而获得该维度所有可能值的列表。
指标集(Metric) 描述(Description) 维度(Dimensions) 测量数据(Measures)
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.incall 应用详情。
  • pid
  • rpcType
  • rootIp
  • rpc
  • ppid
  • rt
  • count
  • error
appstat.exception 异常。
  • pid
  • rpc
  • endpoint
  • excepType
  • excepInfo
  • rt
  • count
appstat.sql 慢SQL。
  • pid
  • rpc
  • endpoint
  • sqlId
  • rt
  • count
  • error
  • slow
说明 slow=true时,limit条件不生效。
appstat.mq.send MQ发送。
  • rt
  • count
  • error
appstat.mq.receive MQ接收。
  • 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)