一、背景原由 由于腾讯云监控无法满足特定需求,故需自定义监控

二、操作步骤 1、创建自定义监控配置项目 a、登录腾讯云控制台,选择【云监控】-【自定义监控】,点击展开【监控配置】选项卡。在页面顶部点击【新增配置项】按钮,进入创建自定义命名空间、纬度和指标页面。 b、选择地域,输入自定义的命名空间、纬度、监控指标、指标中文名和单位,点击【确定】按钮即可完成自定义监控配置项的创建:

2、创建自定义监控统计方式 a、点击展开【监控配置】选项卡。在监控配置列表页,点击创建好的指标后【管理】按钮,进入指标配置详情页:

3、用户数据上报 用户需要自行登录云主机并配置数据上报方式。数据上报需要将腾讯云机器上的指标按照规范报给腾讯云平台。 4、监控数据查看 点击展开【监控视图】选项卡。选择想要查看的地域、命名空间、维度就能查看实时数据列表:

如下是代码中配置的,需和上面创建的监控的命名空间、维度、指标等相同。

API接口:https://monitor.api.qcloud.com/v2/index.php?Action=CreateNamespace 如下是相关代码:

#! /usr/bin/env python
# -*- coding:utf-8 -*-

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

statvfs = os.statvfs('/')

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="AKxxxxxxxt"
        secretKey="PxxxxxxxR"
        region='sh'
	
	total_disk_space = statvfs.f_frsize * statvfs.f_blocks
	free_disk_space = statvfs.f_frsize * statvfs.f_bfree
	disk_usaged = (total_disk_space - free_disk_space) * 100.0 / total_disk_space
	disk_usaged = int(disk_usaged)
#	disk_tip = "硬盘空间使用率(最大100%):"+str(disk_usage)+"%"	
#	print(disk_tip)	

        data={
                "SecretId":secretId,
                "Namespace":"liyk1",
                "Region":region,
                "Data":[
                        {"dimensions":{"disk_usage":"sda","ip":"172.16.0.16"},
                         "metricName":"disk",
                         "value":disk_usaged
                        }
                        ]
                }
        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()