数据上报接口

最近更新时间:2019-05-13 18:48:48

1. 接口描述

上报数据

  1. 本接口仅支持 HTTP 协议,且域名端口为8080
  2. 本接口仅支持主账号上报。
  3. 目前只支持在腾讯云服务器内部访问该域名receiver.monitor.tencentyun.com
  4. 本接口中的 Region 字段需要为云服务器所在的地域。

域名:receiver.monitor.tencentyun.com:8080
接口名:PutMonitorData

2. 输入参数

以下请求参数列表仅列出了接口请求参数,正式调用时需要加上公共请求参数,见 公共请求参数 页面。其中,此接口的 Action 字段为 PutMonitorData。

参数名称 必选 类型 描述
Namespace String 命名空间,调用 查询命名空间(DescribeNamespace) 接口查询
Data Array 上报的数据需要封装成 json 格式

其中data的数据内容:

参数名称 必选 类型 描述
dimensions Array 维度 key 和 value 的组合,维度的 key 需要和您调用 创建指标 的接口中的维度名称相同,维度的 value 组合可自定义
metricName String 指标名,调用 查询指标(DescribeMetric) 接口查询
value Float 具体数据

3. 输出参数

参数名称 类型 描述
code Int 错误码,0:成功,失败错误码见第7小节返回码
message String 错误信息

4. 示例

说明:

如果使用 GET 方式请求,需要对参数进行 UrlEncode 处理,此处不展示 UrlEncode 处理后代码。

输入

http://receiver.monitor.tencentyun.com:8080/v2/index.php?Action=PutMonitorData
&SecretId=xxxxxxx
&Region=gz
&Timestamp=1402992826
&Nonce=345122
&Signature=mysignature
&Namespace=cvm
&Data=[{"dimensions":{"diskname":"disk1","ip":"172.31.58.160"},"metricName":"diskusage","value":30}]

输出

{
    "code":0,
    "message":"OK"
}

5. 本接口 Signature 签名字段生成的方法

本接口的签名方法和其它接口的签名方法不同,不同之处如下:
签名方法 的步骤2生成签名串中,有如下两点不同。

5.1 对参数排序中的入参不同

签名方法 的步骤2.1对参数排序中,此接口的入参只有如下几个字段:

参数名称 中文 参数值
Action 方法名 PutMonitorData
SecretId 密钥 ID AKDuXhrYW5ilcFO11bakwWxxxxxxxxxxxxx
Timestamp 当前时间戳 1408704141
Nonce 随机正整数 345122
Region 实例所在区域 gz

按字典序排序的结果如下:

{
    "Action": "PutMonitorData",
    "Nonce": 345122,
    "Region": "gz",
    "SecretId": "AKDuXhrYW5ilcFO11bakwWxxxxxxxxxxxxx",
    "Timestamp": 1408704141
}

5.2 拼接签名原文字符串中的请求主机不同

签名方法 的步骤2.3拼接签名原文字符串中
本接口中请求主机:receiver.monitor.tencentyun.com
拼接结果为:

GETreceiver.monitor.tencentyun.com/v2/index.php?Action=PutMonitorData&Nonce=345122&Region=gz&SecretId=AKDuXhrYW5ilcFO11bakwWxxxxxxxxxxxxx&Timestamp=1408704141

其它步骤和 签名方法 的步骤相同。

6. 数据上报接口示例(Python)

注意:

在您实际测试时,请使用腾讯云主账号的 SecretId 和 SecretKey 进行测试,不支持子账号。

POST 方式

{
    "Action": "PutMonitorData",
    "SecretId": "xxxxxxx",
    "Region": "sh",
    "Timestamp": 1402992826,
    "Nonce": 345122,
    "Signature": "mysignature",
    "Namespace": "pc",
    "Data": [{"dimensions":{"diskname":"sda","ip":"172.31.58.160"},"metricName":"diskusage","value": 0.3}]
}
#! /usr/bin/env python
# -*- coding:utf-8 -*-

import urllib2
import time
import json
import random
import hmac
import hashlib

class NwsSender:
        def init(self):
                self.url='http://receiver.monitor.tencentyun.com:8080/v2/index.php'
                self.timeout=10
        def send_data(self,json_data):
                try:
                        req=urllib2.Request(self.url)
                        req.add_header('Content-Type','application/json')
                        timeout=self.timeout
                        data=json.dumps(json_data)
                        http_ret=urllib2.urlopen(req,data,timeout)
                        response=http_ret.read()
                        try:
                                json_resp=json.loads(response)
                                retcode=int(json_resp["code"])
                                if retcode!=0:
                                        print "send error,retcode:%d,msg:%s,data:%s" % (retcode,json_resp['message'],data)
                                else:
                                        print "send succ,data:%s" % response
                        except ValueError,e:
                                print 'value error:%s' % response
                except urllib2.URLError,e:
                        print "send error"+str(e)+data
def main():
        secretId="AKDuXhrYW5ilcFO11bakwWxxxxxxxxxxxxx"
        secretKey="tsPHxrAB8fhffaGNmHZDjxxxxxxxxxx"
        region='sh'
        data={
                "SecretId":secretId,
                "Namespace":"pc",
                "Region":region,
                "Data":[
                        {"dimensions":{"diskname":"sda","ip":"172.31.58.160"},
                         "metricName":"diskusage",
                         "value":0.3
                        }
                        ]
                }
        sender=NwsSender()
        sender.init()
        while True:
                ts=int(time.time())
                nonce=random.randint(10000,100000)
                text="POSTreceiver.monitor.tencentyun.com/v2/index.php?Action=PutMonitorData&Nonce=%d&Region=%s&SecretId=%s&Timestamp=%d" % (nonce,region,secretId,ts)
                data['Timestamp']=ts
                data['Nonce']=nonce
                data['Signature']=hmac.new(secretKey,text,hashlib.sha1).digest().encode("base64").rstrip('\n')
                sender.send_data(data)
                time.sleep(3)
if __name__=='__main__':
        main()

GET 方式(最后需对参数进行 UrlEncode)

http://receiver.monitor.tencentyun.com:8080/v2/index.php?Action=PutMonitorData&SecretId=xxxxxxx&Region=sh&Timestamp=1402992826&Nonce=345122&Signature=mysignature
&Namespace=name1
&Data=[{"dimensions":{"diskname":"sda","ip":"172.31.58.160"},"metricName":"diskusage","value":0.3}]
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import urllib
import urllib2
import time
import json
import random
import hmac
import hashlib

class NwsSender:
        def init(self):
                self.url='http://receiver.monitor.tencentyun.com:8080/v2/index.php'
                self.timeout=10
        def send_data(self,data):
                try:
                        req=urllib2.Request(url=self.url+ "?" + data)
                        timeout=self.timeout
                        http_ret=urllib2.urlopen(req, timeout = timeout)
                        response=http_ret.read()
                        try:
                                json_resp=json.loads(response)
                                retcode=int(json_resp["code"])
                                if retcode!=0:
                                        print "send error,retcode:%d,msg:%s,data:%s" % (retcode,json_resp['message'],data)
                                else:
                                        print "send succ,data:%s" % response
                        except ValueError,e:
                                print 'value error:%s' % response
                except urllib2.URLError,e:
                        print "send error"+str(e)+data


def main():
        secretId="AKDuXhrYW5ilcFO11bakwWxxxxxxxxxxxxx"
        secretKey="tsPHxrAB8fhffaGNmHZDjxxxxxxxxxx"
        region='sh'
        data={
                "SecretId":secretId,
                "Namespace":"name1",
                "Region":region,
                }
        Data=[
                {"dimensions":{"diskname":"sda","ip":"172.31.58.160"},
                 "metricName":"diskusage",
                 "value":0.3
                }
                ]

        data["Data"]=json.dumps(Data)
        sender=NwsSender()
        sender.init()
        while True:
                ts=int(time.time())
                nonce=random.randint(10000,100000)
                text="GETreceiver.monitor.tencentyun.com/v2/index.php?Action=PutMonitorData&Nonce=%d&Region=%s&SecretId=%s&Timestamp=%d" % (nonce,region,secretId,ts)
                data['Timestamp']=ts
                data['Nonce']=nonce
                data['Signature']=hmac.new(secretKey,text,hashlib.sha1).digest().encode("base64").rstrip('\n')
                xx = urllib.urlencode(data)  
                sender.send_data(xx)
                time.sleep(3)
if __name__=='__main__':
        main()

数据上报成功输出:

{
    "code": 0,
    "message": "OK"
}

7. 返回码

返回值 说明
0 服务器接收数据 OK
1000 HTTP 方法不支持,即非 post 或 get 的方法请求
1001 错误的 CGI 请求,该请求的 CGI 不支持
1002 服务未就绪,稍后重试
1003 服务器内部逻辑失败
1004 请求内容不存在
1005 请求内容不是 json 格式
1006 时段内该 SecretId 请求过多,服务器保护机制限频
1007 服务器限频功能异常
1008 客户端被服务器屏蔽
1009 参数缺失
1010 参数类型错误
1011 客户端身份非法(鉴权失败)
1012 调用接口不符合 API 规范
1013 参数无效
1014 路由信息缺失导致数据丢弃
1015 数据长度超过上限
1016 Namespace 非法
1017 dimension 验证失败
1018 时段内发送的指标数量超过上限
1019 未上报有效指标数据
1020 dimension 或 metric 名字超长
1021 时间戳非法