更新时间:2019-09-29 10:48
调用 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 | 排序 | 否 |
|
SecurityToken | String | setSecurityToken | STS securityToken | 否 | 采用 RAM 用户角色模式时需要设置该字段。详情参见借助 RAM 角色实现跨云账号访问资源。 |
字段名称 | 字段类型 | 设置方法 | 字段含义 | 示例值 |
---|---|---|---|---|
Key | String | setKey | 维度名称 | appId |
Value | String | setValue | 维度值 | 11 |
注意:应用监控所有的 Metric 查询中必须在 filters
中添加 pid
条件和 regionId
条件。
pid
在控制台左侧导航栏中单击应用监控 > 应用列表,然后在应用列表页面单击目标应用名称,进入该应用的总览页面。此时浏览器地址栏中的 URL 即包含应用的 pid,格式为 pid=xxx
。
由于浏览器进行了编码,除 EDAS 应用之外的其他应用需要对 pid
稍作修改。例如,如果 URL 中包含的 pid
为
xxx%4074xxx
则需要将 %40
替换为 @
,即:
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 指标、堆内存/非堆内存详情以及线程数。 |
| gc指标:
|
堆内存/非堆内存详情:
| |||
线程数:
| |||
appstat.host | 主机监控,包括实例数、CPU、物理内存、磁盘、负载、网络流量(Bytes)和网络数据包数量。 |
| 实例数:
|
CPU:
| |||
物理内存:
| |||
磁盘:
| |||
负载:
| |||
网络:
| |||
appstat.database | 数据库调用 |
|
|
appstat.txn | 接口调用 |
|
|
appstat.incall | 应用详情 |
|
|
appstat.exception | 异常 |
|
|
appstat.sql | 慢 sql |
|
|
appstat.mq.send | MQ 发送 | n/a |
|
appstat.mq.receive | MQ 接收 | n/a |
|
使用 QueryMetric 接口查询应用监控 JVM 老年代与 Eden 区的示例代码如下:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.arms.model.v20190808.*;
public class ARMSDemo {
public static void main(String[] args) {
//用户主账号或 RAM 用户的 AK,或者 RAM 用户角色的临时安全令牌的 AK。
String accessKeyId = "xxx";
//用户主账号或 RAM 用户的 SK,或者 RAM 用户角色的临时安全令牌的 SK。
String accessKeySecret = "xxx";
//Region 和 Endpoint 保持一致,具体内容与 ARMS 的 Region 绑定。
String endpoint = "xxx";//例如 cn-hangzhou
String region = "xxx";//例如 cn-hangzhou
//产品名称始终为“ARMS”。
String productName = "ARMS";
//如果是非杭州区域,请替换 cn-hangzhou,例如改为 cn-beijing。
String domain = "arms.cn-hangzhou.aliyuncs.com";
DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessKeySecret);
try {
DefaultProfile.addEndpoint(endpoint, region, productName, domain);
} catch (ClientException e) {
e.printStackTrace();
}
IAcsClient client = new DefaultAcsClient(profile);
QueryMetricRequest request = new QueryMetricRequest();
request.setStartTime(1555482869888L);
request.setEndTime(1555488869888L);
request.setMetric("APPSTAT.JVM");
List<String> measuresList = new ArrayList<String>();
measuresList.add("EDENSPACE");
measuresList.add("OLDGEN");
request.setMeasuress(measuresList);
List<QueryMetricRequest.Filters> filtersList = new ArrayList<QueryMetricRequest.Filters>();
QueryMetricRequest.Filters filters1 = new QueryMetricRequest.Filters();
filters1.setKey("pid");
filters1.setValue("xxx");
filtersList.add(filters1);
QueryMetricRequest.Filters filters2 = new QueryMetricRequest.Filters();
filters2.setKey("regionId");
filters2.setValue("cn-hangzhou");
filtersList.add(filters2);
request.setFilterss(filtersList);
List<String> dimensionsList = new ArrayList<String>();
dimensionsList.add("rootIp");
request.setDimensionss(dimensionsList);
try {
QueryMetricResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}
const Core = require('@alicloud/pop-core');
var client = new Core({
accessKeyId: '<accessKeyId>',
accessKeySecret: '<accessKeySecret>',
endpoint: 'http://arms.cn-hangzhou.aliyuncs.com',
apiVersion: '2019-08-08'
});
var params = {
"Measures.1": "EDENSPACE",
"Measures.2": "OLDGEN",
"Filters.1.Key": "pid",
"Filters.1.Value": "xxx",
"Filters.2.Key": "regionId",
"Filters.2.Value": "cn-hangzhou",
"Metric": "APPSTAT.JVM",
"Dimensions.1": "rootIp",
"StartTime": 1555482869888,
"EndTime": 1555488869888
}
var requestOption = {
method: 'POST'
};
client.request('QueryMetric', params, requestOption).then((result) => {
console.log(result);
}, (ex) => {
console.log(ex);
})
package main
import (
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/arms"
)
func main() {
client, err := arms.NewClientWithAccessKey("cn-hangzhou", "<accessKeyId>", "<accessKeySecret>")
request := arms.CreateQueryMetricRequest()
request.EndTime = "1555488869888"
request.StartTime = "1555482869888"
request.Metric = "APPSTAT.JVM"
request.Measures = &[]string{"EDENSPACE", "OLDGEN"}
request.Filters = &[]arms.QueryMetricFilters{
{
Key: "pid",
Value: "xxx",
},
{
Key: "regionId",
Value: "cn-hangzhou",
},
}
request.Dimensions = &[]string{"rootIp"}
response, err := client.QueryMetric(request)
if err != nil {
fmt.Print(err.Error())
}
fmt.Printf("response is %#v\n", response)
}
<?php
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
// Download:https://github.com/aliyun/openapi-sdk-php-client
// Usage:https://github.com/aliyun/openapi-sdk-php-client/blob/master/README-CN.md
AlibabaCloud::accessKeyClient('<accessKeyId>', '<accessKeySecret>')
->regionId('cn-hangzhou') // replace regionId as you need
->asGlobalClient();
try {
$result = AlibabaCloud::rpcRequest()
->product('ARMS')
// ->scheme('https') // https | http
->version('2019-08-08')
->action('QueryMetric')
->method('POST')
->options([
'query' => [
'Measures.1' => 'EDENSPACE',
'Measures.2' => 'OLDGEN',
'Filters.1.Key' => 'pid',
'Filters.1.Value' => 'xxx',
'Filters.2.Key' => 'regionId',
'Filters.2.Value' => 'cn-hangzhou',
'Dimensions.1' => "rootIp",
'Metric' => 'APPSTAT.JVM',
'StartTime' => '1555482869888',
'EndTime' => '1555488869888',
],
])
->request();
print_r($result->toArray());
} catch (ClientException $e) {
echo $e->getErrorMessage() . PHP_EOL;
} catch (ServerException $e) {
echo $e->getErrorMessage() . PHP_EOL;
}
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkarms.request.v20190808.QueryMetricRequest import QueryMetricRequest
client = AcsClient('<accessKeyId>', '<accessKeySecret>', 'cn-hangzhou')
request = QueryMetricRequest()
request.set_accept_format('json')
request.set_EndTime(1555488869888)
request.set_StartTime(1555482869888)
request.set_Metric("APPSTAT.JVM")
request.set_Measuress(["EDENSPACE","OLDGEN"])
request.set_Filterss([
{
"Key": "pid",
"Value": "xxx"
},
{
"Key": "regionId",
"Value": "cn-hangzhou"
}
])
request.set_Dimensionss(["rootIp"])
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
using System;
using System.Collections.Generic;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.ARMS.Model.V20190808;
namespace ARMSDemo
{
class Program
{
static void Main(string[] args)
{
IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", "<accessKeyId>", "<accessKeySecret>");
DefaultAcsClient client = new DefaultAcsClient(profile);
var request = new QueryMetricRequest();
request.EndTime = 1555488869888;
request.StartTime = 1555482869888;
request.Metric = "APPSTAT.JVM";
var measuresList = new List<String>();
measuresList.Add("EDENSPACE");
measuresList.Add("OLDGEN");
request.Measuress = measuresList;
var filtersList = new List<QueryMetricRequest.Filters>();
var filters1 = new QueryMetricRequest.Filters();
filters1.Key = "pid";
filters1.Value = "xxx";
filtersList.Add(filters1);
var filters2 = new QueryMetricRequest.Filters();
filters2.Key = "regionId";
filters2.Value = "cn-hangzhou";
filtersList.Add(filters2);
request.Filterss = filtersList;
var dimensionsList = new List<String>();
dimensionsList.Add("rootIp");
request.Dimensionss = dimensionsList;
try {
var response = client.GetAcsResponse(request);
Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
}
catch (ServerException e)
{
Console.WriteLine(e);
}
catch (ClientException e)
{
Console.WriteLine(e);
}
}
}
}
# gem install aliyunsdkcore
require 'aliyunsdkcore'
client = RPCClient.new(
access_key_id: '<accessKeyId>',
access_key_secret: '<accessKeySecret>',
endpoint: 'https://arms.aliyuncs.com',
api_version: '2019-08-08'
)
response = client.request(
action: 'QueryMetric',
params: {
"Measures.1": "EDENSPACE",
"Measures.2": "OLDGEN",
"Filters.1.Key": "pid",
"Filters.1.Value": "xxx",
"Filters.2.Key": "regionId",
"Filters.2.Value": "cn-hangzhou",
"Dimensions.1": "rootIp",
"Metric": "APPSTAT.JVM",
"StartTime": 1555482869888,
"EndTime": 1555488869888
},
opts: {
method: 'POST'
}
)
print JSON.parse(response.body)
在文档使用中是否遇到以下问题
更多建议
匿名提交