【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开发中的代码编写小技巧——避免重复代码编写的几种方法
上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中, ...
随机推荐
- SQL Server中的函数
字符串函数 日期函数 数学函数 系统函数
- java 常用类库:时间类LocalDate;LocalTime;LocalDateTime;Calendar 类;Date ;
LocalDate类 LocalDate类代表不带时区的日期,列入2020-12-20.该类提供了静态的now()方法来获取当前的日期.这个类是线程安全的. LocalTime类 代表不带时区的时间, ...
- 如何把Electron做成一个Runtime,让多个应用共享同一个Electron
这个问题涉及到很多知识,而且要想把这个Runtime做好很绕. 下面我就说一下我的思路:(以下内容以Windows平台为基础,Mac平台和Linux平台还得去调查一下,才能确定是否可行) 首先,我们先 ...
- AcWing 1204. 错误票据
题目: 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号. 全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成 ...
- JAVA比较两个版本号的大小
/** * 比较版本号的大小 (两个版本号格式应尽量相同) * * @param v1 版本号1 * @param v2 版本号2 * @return 正数:v1大 负数:v2大 0:相等 */ pu ...
- JAVA实现QQ第三方登录
首先在QQ互联: https://connect.qq.com/manage.html 申请账号,并且进行资料审核,同时创建应用(设置回调地址) 申请应用完后,会有app_ID.app_KEY等参数 ...
- 百度地图AK密钥申请
注册登录 :http://lbsyun.baidu.com/apiconsole/key#/home 然后点击提交 这个就是AK密钥
- [Flink-源码分析]Blink SQL 回撤解密
因为目前我司使用的版本还是和Blink对齐的版本,所以本文还是先针对Blink中对于回撤的实现来进行源码分析. 概念 回撤这个概念,是流计算中特有的,简单理解起来就是将先前的计算结果回撤,那什么场景下 ...
- nim_duilib(13)之添加fmt库
introduction 习惯使用fmt库做字符串的格式化操作.尽管nim_duilib提供了类似的函数. 故项目demo_xml引入了外部库fmt framework.h中添加下面的以便使用fmt库 ...
- 【LeetCode】961. N-Repeated Element in Size 2N Array 解题报告(Python & C+++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...
