全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
云监控

上报监控数据

更新时间:2018-02-12 21:26:33

自定义监控功能为您提供上报监控数据的接口,方便您将自己采集的时序数据上报到云监控,并配置报警规则来接收报警通知。

云监控为您提供 OpenAPI、Java SDK 和阿里云命令行工具(CLI) 三种方式上报数据。

使用限制

  • 单云账号QPS限制为100。
  • 单次最多上报100条数据,body最大为256KB。
  • 监控项数量上限为20个。
  • 单个监控项支持的时间序列上限为50个。
  • “metricName”字段只支持字母、数字、下划线。需要以字母开头,非字母开头会替换为大写“A”,非法字符替换为“_”。
  • “dimensions”字段不支持“=”、“&”、“,” ,非法字符会被替换为“_”。
  • metricName 和dimensions的Key-value 最大均为64字节,超过64字节会被截断。

OpenAPI上报数据

服务地址

https://metrichub-cms-cn-hangzhou.aliyuncs.com

请求语法

  1. POST /metric/custom/upload HTTP/1.1
  2. Authorization:<AuthorizationString>
  3. Content-Length:<Content Length>
  4. Content-MD5:<Content MD5>
  5. Content-Type:application/json
  6. Date:<GMT Date>
  7. Host: metrichub-cms-cn-hangzhou.aliyuncs.com
  8. x-cms-signature:hmac-sha1
  9. x-cms-api-version:1.0
  10. x-cms-ip:30.27.84.196
  11. User-Agent:cms-java-sdk-v-1.0
  12. [{"groupId":101,"metricName":"","dimensions":{"sampleName1":"value1","sampleName2":"value2"},"time":"","type":0,"period":60,"values":{"value":10.5,"Sum":100}}]

请求参数

名称 类型 必选 描述
groupId long 应用分组的id
metricName string 监控项名称,支持字母、数字、连接符“_-./\”,其他为非法字符,最大长度为64字节,超过64字节时截取前64字节
dimensions object 维度map,key-value都为字符串, 支持字母、数字、连接符“_-./\”,键值对数量最大为10,key长度最大64字节,value长度最大64字节,超过64字节时截取前64字节
time string 指标发生时间,支持“yyyyMMdd’T’HHmmss.SSSZ”和long型时间戳2种方式,例如 “20171012T132456.888+0800”或“1508136760000”
type int 上报数值的类型,0为原始值,目前只支持原始数据上报
period string 聚合周期,单位为秒。如果 type=1则需要传此字段,取值为15、 60、300
values object 指标值集合,当type=0时,key只能为”value”,上报的是原始值,云监控会按周期将原始值聚合为多个值,比如最大、计数、求和等

通过接口上报原始数据后,云监控会按以下统计方式计算1分钟、5分钟的统计结果:

  • Average:平均值
  • Maximum:最大值
  • Minimum:最小值
  • Sum:求和
  • SampleCount:计数
  • SumPerSecond:求和/对应周期的秒数,也可以使用滑动平均计算
  • CountPerSecond:计数/对应周期的秒数,也可以使用滑动平均计算
  • LastValue:本周期最后一个采样值,类似gauge
  • P10:percentile 0.1,大于10%本周期所有采样数据
  • P20:percentile 0.2,大于20%本周期所有采样数据
  • P30:percentile 0.3,大于30%本周期所有采样数据
  • P40:percentile 0.4,大于40%本周期所有采样数据
  • P50:percentile 0.5,大于50%本周期所有采样数据,中位数
  • P60:percentile 0.6,大于60%本周期所有采样数据
  • P70:percentile 0.7,大于70%本周期所有采样数据
  • P75:percentile 0.75,大于75%本周期所有采样数据
  • P80:percentile 0.8,大于80%本周期所有采样数据
  • P90:percentile 0.9,大于90%本周期所有采样数据
  • P95:percentile 0.95,大于95%本周期所有采样数据
  • P98:percentile 0.98,大于98%本周期所有采样数据
  • P99:percentile 0.99,大于99%本周期所有采样数据

关于API的请求头,请参考请求头定义

关于签名算法,请参考签名算法

响应元素

HTTP 状态码返回 200。

示例

请求示例

  1. POST /metric/custom/upload HTTP/1.1
  2. Host: metrichub-cms-cn-hangzhou.aliyuncs.com
  3. x-cms-api-version:1.0
  4. Authorization:YourAccKey:YourSecretKey
  5. Host:metrichub-cms-cn-hangzhou.aliyuncs.com"
  6. Date:Mon, 23 Oct 2017 06:51:11 GMT
  7. Content-Length:180
  8. x-cms-signature:hmac-sha1
  9. Content-MD5:E9EF574D1AEAAA370860FE37856995CD
  10. x-cms-ip:30.27.84.196
  11. User-Agent:cms-java-sdk-v-1.0
  12. Content-Type:application/json
  13. [{"groupId":101,"metricName":"","dimensions":{"sampleName1":"value1","sampleName2":"value2"},"time":"","type":0,"period":60,"values":{"value":10.5,"Sum":100}}]

返回示例

  1. {
  2. "code":"200",
  3. "msg":""//正常上报时返回msg为空
  4. }

Java SDK上报数据

SDK支持上报原始值和聚合值2种方式。

maven依赖

  1. <dependency>
  2. <groupId>com.aliyun.openservices</groupId>
  3. <artifactId>aliyun-cms</artifactId>
  4. <version> 0.2.2 </version>
  5. </dependency>

示例代码

上报原始数据

  1. CMSClientInit.groupId = 101L;//设置公共的应用组id
  2. CMSClient cmsClient = new CMSClient(endpoint, accKey, secret);//初始化client
  3. CustomMetricUploadRequest request = CustomMetricUploadRequest.builder()
  4. .append(CustomMetric.builder()
  5. .setMetricName("testMetric")//指标名
  6. .setGroupId(102L)//设置定制的分组id
  7. .setTime(new Date())
  8. .setType(CustomMetric.TYPE_VALUE)//类型为原始值,
  9. .appendValue(MetricAttribute.VALUE, 1f)//原始值,key只能为这个
  10. .appendDimension("key", "value")//添加维度
  11. .appendDimension("ip", "127.0.0.1")//添加维度
  12. .build())
  13. .build();
  14. CustomMetricUploadResponse response = cmsClient.putCustomMetric(request);//上报
  15. System.out.println(JSONObject.toJSONString(response));

自动完成多周期聚合上报

SDK支持在本地做聚合后再上报数据的功能,聚合周期为1分钟、5分钟。

数据类型 描述 聚合的值 内存消耗不含名称、维度,单时间序列,单聚合周期)
value 一般值类型 除了LastValue外的所有属性 约4K
gauge 采样值 LastValue 4字节
meter 求和及速率 Sum,SumPerSecond 50字节
counter 计数 SampleCount 10字节
timer 计算时间 SampleCount、CountPerSecond、 Average、Maximum、Minimum、PXX(P10-P99) 约4K
histogram 分布 SampleCount、Average、Maximum、Minimum、PXX(P10-P99) 约4K
  1. //初始化
  2. CMSClientInit.groupId = 0L;
  3. CMSClient cmsClient = new CMSClient(accKey, secret, endpoint);//创建client
  4. CMSMetricRegistryBuilder builder = new CMSMetricRegistryBuilder();
  5. builder.setCmsClient(cmsClient);
  6. final MetricRegistry registry = builder.build();//创建registry 包含2个聚合周期
  7. //或者 final MetricRegistry registry = builder.build(RecordLevel._60S);//只创建1分钟聚合周期的
  8. //使用value
  9. int ValueWrapper value = registry.value(MetricName.build("value"));
  10. value.update(6.5);
  11. //使用meter
  12. MeterWrapper meter = registry.meter(MetricName.build("meter"));
  13. meter.update(7.2);
  14. //使用counter
  15. CounterWrapper counter = registry.counter(MetricName.build("counter"));
  16. counter.inc(20);
  17. counter.dec(5);
  18. //使用timer
  19. TimerWrapper timer = registry.timer(MetricName.build("timer"));
  20. timer.update(30, TimeUnit.MILLISECONDS);
  21. //使用histogram
  22. HistogramWrapper histogram = registry.histogram(MetricName.build("histogram"));
  23. histogram.update(20);
  24. //使用gauge
  25. final List list = new ArrayList();
  26. registry.gauge(MetricName.build("gauge"), new Gauge() {
  27. @Override
  28. public Number getValue() {
  29. return list.size();
  30. }
  31. });

阿里云命令行(CLI)方式上报数据

第一步: 安装阿里云CLI,查看安装文档

第二步:安装CmsSDK。

Windows安装方式

在命令行窗口输入如下命令:

  1. cd C:\Python27\Scripts
  2. pip install aliyun-python-sdk-cms

如果需要更新SDK,则使用如下命令:

  1. pip install --upgrade aliyun-python-sdk-cms

Linux 安装方式

在命令行窗口输入如下命令:

  1. sudo pip install aliyun-python-sdk-cms

如果需要升级SDK,则使用如下命令:

  1. sudo pip install upgrade aliyun-python-sdk-cms

第三步:上报监控数据。

Linux 上报示例:

  1. aliyuncli cms PutCustomMetric --MetricList '
  2. [{"groupId": 101,"metricName": "metric-test","dimensions": {"ip": "127.0.0.1","source": "user"},"type": 0,"values": {"value": 10.5}}]'

上报成功后,返回200状态码:

  1. {
  2. "Code":"200"
  3. }

错误编码

错误代码 含义
200 正常
400 客户端请求中的语法错误
403 校验失败、限速、没有授权
500 服务器内部错误

子账号授权说明

使用子账号的AK上报事件数据时,需要对相应子账号授权云监控管理权限。如果子账号未授权云监控管理权限,上报数据时会提示“cannot upload, please use ram to auth”。

授权步骤如下:

  1. 登录访问控制RAM控制台。
  2. 进入用户管理 菜单。
  3. 选择需要上报数据的子账号,在操作中点击授权授权

  4. 在授权页面中选择管理云监控的权限,并点击确定保存授权。 授权

本文导读目录