公众号文章链接

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

方法一:使用腾讯云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. JAVA把InputStream 转 字节数组(byte[])

    import org.apache.commons.io.IOUtils; byte[] bytes = IOUtils.toByteArray(inputStream); 如果没有这个包 就加下依赖 ...

  2. 一个自定义的c++错误类 和 同步异步、阻塞非阻塞(区别简述)

    一个例子,自定义exception 继承std::exception 1 class _oct_udp_api_export_ udp_err : public std::exception 2 { ...

  3. c++基础之operator =处理

    1.注意自我赋值 先看个例子: class A {}; A a ; a = a; // 注意这句 可能实际中,你不会这样做,但是实际中,是有可能的,并且这样做,也不违背语法. BUT, 如果上面的例子 ...

  4. 【LeetCode】682. Baseball Game 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 使用栈模拟 日期 题目地址:https://leet ...

  5. C. Success Rate

    Success Rate 题目链接 题意 给你两个分数形式的数,然后有两种变化方式 上下都+1 仅下面部分+1 让你求第一个分数变化到第二个分数的最小步数. 思路 有几种特殊情况分类讨论一下. 首先我 ...

  6. window11连接局域网共享失败处理办法

    第一步1.按 Win + R 组合键,打开运行,并输入:gpedit.msc 命令,确定或回车,可以快速打开本地组策略编辑器2.本地组策略编辑器窗口中,依次展开到:计算机配置 - 管理模板 - 网络 ...

  7. uniapp医院预约挂号微信小程序

    开头感言:最近看小程序很火,也想弄一个看看,用了一些时间从0开始写,也记录了一些笔记,自己用框架写的模板,不是很精美,后面会慢慢优化,功能也是后面慢慢加上去的, 其中功能这块,起初只是一些简单的功能, ...

  8. 「Codeforces 468C」Hack it!

    Description 定义 \(f(x)\) 表示 \(x\) 的各个数位之和.现在要求 \(\sum_{i=l}^rf(i)\bmod a\). 显然 ans=solve(l,r)%a; if(a ...

  9. PowerDotNet平台化软件架构设计与实现系列(11):日志平台

    所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...

  10. Reflection 基础知识(一)

    反射机制的定义 反射通常指在程序在运行时能够获取自身的信息. 静态语言反射 在java中使用反射的一个例子 Class<?> clazz = Class.forName("com ...