【get√】golang中实现从腾讯云CVM查询网卡流量的两种方法
主要参考了以下位置的资料:
方法一:使用腾讯云go-sdk
- go.mod文件中增加这样一行:
github.com/tencentcloud/tencentcloud-sdk-go v3.0.172
- 准备好:secretId, secretKey,要查询的区域,CVM机器的实例ID
- 以下是例子代码:
import (
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/regions"
Monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
)
// ....
func QueryCvmWanOuttraffic(SecretId string, secretKey string, region string, instanceId string) (string, error) {
credential := common.NewCredential(SecretId, secretKey)
cpf := profile.NewClientProfile()
cpf.HttpProfile.ReqMethod = "GET"
cpf.HttpProfile.ReqTimeout = 5
cpf.Debug = true
cpf.SignMethod = "HmacSHA1"
monitorClient, err := Monitor.NewClient(credential, region, cpf)
if err != nil {
return "", err
}
req := Monitor.NewGetMonitorDataRequest()
var v uint64 = 60
req.Period = &v
now := time.Now()
var arr = []string{
"WanOuttraffic",
"QCE/CVM",
"InstanceId",
now.Add(time.Duration(-10) * time.Minute).Format("2006-01-02 15:04:05"), //查询最近10分钟的
now.Format("2006-01-02 15:04:05"),
}
req.MetricName = &arr[0]
req.Namespace = &arr[1]
req.Instances = []*Monitor.Instance{
&Monitor.Instance{
Dimensions: []*Monitor.Dimension{
&Monitor.Dimension{Name: &arr[2], Value: &instanceId},
},
},
}
req.StartTime = &arr[3]
req.EndTime = &arr[4]
resp, err := monitorClient.GetMonitorData(req)
if err != nil {
return "", err
}
return resp.ToJsonString(), nil
}
//
QueryCvmWanOuttraffic(os.Getenv("TENCENTCLOUD_SECRET_ID"), os.Getenv("TENCENTCLOUD_SECRET_KEY"), regions.Guangzhou, "ins-xxxxxx")
方法2:使用https协议
直接上代码:
import (
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
)
// ....
func HttpsQueryCvmWanOuttraffic(SecretId string, secretKey string, region string, instanceId string) (string, error) {
now := time.Now()
var params = map[string]string{
"namespace": "qce/cvm",
"metricName": "wan_outtraffic",
"dimensions.0.name": "unInstanceId",
"dimensions.0.value": instanceId,
"startTime": now.Add(time.Duration(-10) * time.Minute).Format("2006-01-02 15:04:05"),
"endTime": now.Format("2006-01-02 15:04:05"),
"Region": region,
"Action": "GetMonitorData",
"SecretId": SecretId,
"Timestamp": strconv.Itoa(int(now.Unix())),
"Nonce": strconv.Itoa(rand.Intn(1000000)),
}
arr := make([]string, 0, len(params))
for k, _ := range params {
arr = append(arr, k)
}
sort.Strings(arr)
arrOut := make([]string, 0, len(arr))
for _, item := range arr {
arrOut = append(arrOut, item+"="+url.QueryEscape(params[item]))
}
paramStr := strings.Join(arrOut, "&")
key := []byte(secretKey)
mac := hmac.New(sha1.New, key)
mac.Write([]byte(paramStr))
Signature := base64.StdEncoding.EncodeToString(mac.Sum(nil))
paramStr += "&Signature=" + Signature
url := "https://monitor.tencentcloudapi.com/?"
resp, err := http.Get(url + paramStr)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
}
//
HttpsQueryCvmWanOuttraffic(os.Getenv("TENCENTCLOUD_SECRET_ID"), os.Getenv("TENCENTCLOUD_SECRET_KEY"), "gz", "ins-xxxxxx")
返回的数据
返回数据大致如下:
{
"Response":{
"Period":60,
"MetricName":"WanOuttraffic",
"DataPoints":[
{
"Dimensions":[{"Name":"InstanceId","Value":"ins-xxxxx"}],
"Timestamps":[1589629500,1589629560,1589629620,1589629680,1589629740,1589629800,1589629860,1589629920],
"Values":[83.235,107.038,99.522,101.662,97.613,95.696,85.926,103.345]
}
],
"StartTime":"2020-05-16 19:45:00",
"EndTime":"2020-05-16 19:55:00",
"RequestId":"280b4f26-4117-4287-bc96-79e27283b0ed"
}
}
可以看见,时间戳1589629920对应2020-5-16 19:52;这一分钟的网卡流量是103.345Mbps
在腾讯云官网核对一下
进入https://console.cloud.tencent.com/
在云服务器->实例->搜索ins-xxxxx->点击进入->监控->外网出带宽,时间粒度选择分钟,在19:52上看见:
成功了!嗨森!
【get√】golang中实现从腾讯云CVM查询网卡流量的两种方法的更多相关文章
- angularjs中向html页面添加内容节点元素代码段的两种方法
第一种方式:原生JS向html页面添加内容节点元素代码段: <!DOCTYPE html> <html> <head> <meta charset=" ...
- laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法
laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容. ...
- 弹性配置为构建提速 - CODING & 腾讯云 CVM 最佳实践
CODING 中提供了内置云主机用来执行持续集成(CI)中的构建计划,能够胜任大部分构建任务.但如果碰上了大型项目的构建,或者需要在本地服务器生成构建成果,单个计算资源就显得有点捉急了.针对这一部分需 ...
- 最新阿里云服务器免费SSL证书配置HTTPS的两种方法(图文教程二)
在大家学习如何利用免费SSL证书配置网站HTTPS之前,我们先要搞清楚为什么要开启HTTPS,这个绿色的小锁真的有用吗?所谓的HTTPS其实是(安全套接字层超文本传输协议)是以安全为目标的HTTP通道 ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- Redis中持久化的两种方法详解
Redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里;另一种方法教只追加文件(append-only f ...
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
- 在shell script中进行数值运算的两种方法
方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...
- VS开发中的代码编写小技巧——避免重复代码编写的几种方法
上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中, ...
随机推荐
- linux安装软件系列之npm安装
什么是rpm 百度说它是 Red-hat Package Manager (红帽包管理器) 其实它是:RPM Package Manager (RPM包管理器,来源于:https://rpm.org) ...
- HTML body体
p br h div span <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- nginx配置文件简析
https://blog.csdn.net/wangbin_0729/article/details/82109693 #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相 ...
- vnc mirror driver
2012年4月,大二下学期,平静的课堂上老师通知了一个比赛...第一届大学生软件设计大赛!然后我选了第六题:windows屏幕录像.就这样我就开始了我的vc开发生涯. 之前学了c/c++作为基础,自认 ...
- Unhandled Exception: FormatException: Unexpected character
错误原因 json格式不正确,检查:是否加了注释.最后一个是否加了逗号... 正确格式 { "name": "shellon", "age" ...
- 【LeetCode】252. Meeting Rooms 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcode ...
- 【LeetCode】868. Binary Gap 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 线性扫描 日期 题目地址:https://leetc ...
- 【剑指Offer】把数组排成最小的数 解题报告(Python)
[剑指Offer]把数组排成最小的数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- LeetCode1239串联字符串的最大长度
题目 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解. 请返回所有可行解 s 中最长长度. 解题 ...
- 【嵌入式AI】全志 XR806 say hello world
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文介绍了全志 ...