公众号文章链接

主要参考了以下位置的资料:

方法一:使用腾讯云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查询网卡流量的两种方法的更多相关文章

  1. angularjs中向html页面添加内容节点元素代码段的两种方法

    第一种方式:原生JS向html页面添加内容节点元素代码段: <!DOCTYPE html> <html> <head> <meta charset=" ...

  2. laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法

    laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容. ...

  3. 弹性配置为构建提速 - CODING & 腾讯云 CVM 最佳实践

    CODING 中提供了内置云主机用来执行持续集成(CI)中的构建计划,能够胜任大部分构建任务.但如果碰上了大型项目的构建,或者需要在本地服务器生成构建成果,单个计算资源就显得有点捉急了.针对这一部分需 ...

  4. 最新阿里云服务器免费SSL证书配置HTTPS的两种方法(图文教程二)

    在大家学习如何利用免费SSL证书配置网站HTTPS之前,我们先要搞清楚为什么要开启HTTPS,这个绿色的小锁真的有用吗?所谓的HTTPS其实是(安全套接字层超文本传输协议)是以安全为目标的HTTP通道 ...

  5. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  6. Redis中持久化的两种方法详解

    Redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里;另一种方法教只追加文件(append-only f ...

  7. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  8. 在shell script中进行数值运算的两种方法

    方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...

  9. VS开发中的代码编写小技巧——避免重复代码编写的几种方法

    上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中, ...

随机推荐

  1. 你假笨JVM参数 - 1 CMSScavengeBeforeRemark

    参数:-XX:CMSScavengeBeforeRemark含义:Enable scavenging attempts before the CMS remark step.开启或关闭在CMS重新标记 ...

  2. WebRTC本地插入多个转发节点

    网络延迟是一种比较常见的情况.在本地网页上,我们可以建立多个RTCPeerConnection,增加转发次数,来模拟出网络延迟的效果. 建立通话后,再往后面增加本地转发节点. 准备 页面准备,方便我们 ...

  3. Java abstract 抽象类 和interface接口的异同点

    abstract 抽象类 和interface接口的异同点 相同点: 抽象类和接口都不能实例化,他们都位于继承树顶端,被其他类实现和继承 都可以包含抽象方法,实现接口或者继承抽象类的非抽象类(普通类) ...

  4. Mysql 表名忽略大小写-连接字符集随笔记录

    1.参数说明: lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的 lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候 ...

  5. 经验:如何使用replace而不丢失数据

    背景:replace很好用,的应用场景比较多,但是直接使用可能会造成一引起字段的值丢失. 解决方法: 一.原始数据 select id,f1,f2 ,flag from update_test; id ...

  6. 【LeetCode】1114. Print in Order 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 mutex锁 promise/future 日期 题 ...

  7. python学习第五天:python基础(string、list、tuple)

    首先,什么是sequence(序列)操作? 字符串的特性被称为sequence(序列) H o w a r e y o u ? 就好像存储在一个个连续的单元格里面,每个单元格存储一个字符,每个字符就是 ...

  8. Codeforces 855B:Marvolo Gaunt's Ring(枚举,前后缀)

    B. Marvolo Gaunt's Ring Professor Dumbledore is helping Harry destroy the Horcruxes. He went to Gaun ...

  9. 第八个知识点:交互式的定义如何帮助计算和IP类问题是什么

    第八个知识点:交互式的定义如何帮助计算和IP类问题是什么 这是系列中的第8篇,我们主要讨论计算中交互作用的用处和IP类问题是什么. 为了回答这些问题,我们首先给交互式证明系统一个简洁的介绍.众所周知, ...

  10. FAT

    目录 概 主要内容 代码 Zhang J., Xu X., Han B., Niu G., Cui L., Sugiyama M., Kankanhalli M. Attacks which do n ...