开发者社区> 婷宝> 正文

云监控api&sdk使用demo

简介:
+关注继续查看

背景

有一些用户,企业内部自建IT信息系统,包括监控和运维系统,希望云监控的数据能够和自建系统打通, 所以会有需要通过云监控的api拉取数据。

下面给出一个两个典型场景的数据查询demo,分别使用两个api,queryMetricList和queryMetricLast, 一个用于查询一段时间的数据,一个用于查询给定时间段内的最新数据。

Demo


package main

import (
    "encoding/json"
    "testing"

    "github.com/aliyun/alibaba-cloud-sdk-go/services/cms"
)

//TestQueryMetricLast
//批量获取用户下所有实例的某个指标的数据。如果想获取多个指标,可以多个线程获取多个指标,也可以单线程循环获取多个指标。
//每用户默认允许30qps,太高的并发将会被限制。
//queryLast接口适用于,用户想要定时全量拉取所有最新数据的情况。时间窗口自动往前滑动,每个周期都取最新一条数据。
//通常监控数据会有一定的延迟,各产品的监控数据的延迟情况不太一样,所以如果给定的时间跨度太短,比如,只查询最近一分钟的时间跨度。
//有可能会因为数据延迟而导致查询不到最新的数据。
//定时查询的频率,通常应该跟period的值一样,比如,如果period=60,可以每60秒触发一次,每次查询过去5分钟内的最新数据。
//某些指标提供小于一分钟的精度,但是秒级精度的数据最多只保留7天。超过7天会有回收掉,就查不到了。
//由于是查询所有实例的最新数据,每轮查询返回的记录条数,通常是用户名下所有的实例数
//如果需要查询所有实例的数据,不需要指定Dimensions
func TestQueryMetricLast(t *testing.T) {
 ​      //关于如何获取ak,参考:https://yq.aliyun.com/articles/608581
    cmsClient, _ := cms.NewClientWithAccessKey(
        "<指定region,如果不确定,可以填入cn-hangzhou>",                    // 地域ID
        "<your access key id>",               // Access Key ID
        "<your Access Key Secret>") // Access Key Secret

    //获取给定时间范围内的给定实例的最后一条也就是最新一条监控数据。
    request := cms.CreateQueryMetricLastRequest()
    //project和metric信息未来会提供api,
    //当前可以先从这里获取。 http://metricmeta.oss-cn-hangzhou.aliyuncs.com/listMetricMeta_zh.html
    request.Project = "acs_ecs_dashboard"
    request.Metric = "cpu_total"
    //period根据每个metric有不同的定义,但是几乎所有的metric都会有60的period,表示要获取60s精度的监控数据。
    request.Period = "60"
    //查询数据的开始时间
    request.StartTime = "2018-11-29 11:00:00"
    //查询数据的结束时间
    request.EndTime = "2018-11-29 12:00:00"
    //本次查询的分页长度,每次查询最多返回1000条数据,可以更小。
    request.Length = "100"
    //分页的cursor,如果返回结果数据里有cursor != "",表示数据还有下一页。需要通过cursor来查询下一页。
    request.Cursor = ""

    t.Log("start query")

    for {
        response, _ := cmsClient.QueryMetricLast(request)
        //response code
        if response.Code != "200" || !response.IsSuccess() {
            t.Fatalf("code:%s,success:%v,msg:%s, httpstatus:%d, response:%v\n", response.Code, response.IsSuccess(), response.Message, response.GetHttpStatus(), response)
        }

        var datapoints []map[string]interface{}
        err := json.Unmarshal([]byte(response.Datapoints), &datapoints)
        if err != nil {
            t.Fatal(err)
        }

        t.Logf("batch count %d\n", len(datapoints))
        for _, v := range datapoints {
            t.Log(v)
        }

        //如果返回的结果中cursor=="",表示没有下一页了。跳出循环,结束本轮查询
        if response.Cursor == "" {
            t.Log("循环结束")
            break
        }

        //如果下一页,将cursor作为查询下一页的条件,赋值给request
        request.Cursor = response.Cursor
        t.Logf("cursor:%s\n", response.Cursor)
    }

    t.Log("finished")
}

//TestBatchQueryMultiInstance
//使用queryList接口可以查询给定时间范围内,给定实例的监控数据。
//该查询允许指定多个多个实例以批量查询。
//如果需要获取多个实例的一段时间的监控数据,可以在查询时指定多个实例(每次最多10个,超过10个会导致后端查询压力较大,有可能会被触发黑名单限流)
//每批最多10个实例,超过会有风险。

func TestBatchQueryMultiInstance(t *testing.T) {
 ​      //关于如何获取ak,参考:https://yq.aliyun.com/articles/608581
    cmsClient, _ := cms.NewClientWithAccessKey(
        "<指定region,如果不确定,可以填入cn-hangzhou>",                    // 地域ID
        "<your access key id>",               // Access Key ID
        "<your Access Key Secret>") // Access Key Secret

    //获取给定时间范围内的给定实例的最后一条也就是最新一条监控数据。
    request := cms.CreateQueryMetricListRequest()
    //project和metric信息未来会提供api,
    //当前可以先从这里获取。 http://metricmeta.oss-cn-hangzhou.aliyuncs.com/listMetricMeta_zh.html
    request.Project = "acs_ecs_dashboard"
    request.Metric = "cpu_total"
    //period根据每个metric有不同的定义,但是几乎所有的metric都会有60的period,表示要获取60s精度的监控数据。
    request.Period = "60"
    //查询数据的开始时间
    request.StartTime = "2018-11-25 11:00:00"
    //查询数据的结束时间
    request.EndTime = "2018-11-29 12:00:00"
    //本次查询的分页长度,每次查询最多返回1000条数据,可以更小。
    request.Length = "10"
    request.Dimensions = "[{'instanceId':'AY140613113321409088'},{'instanceId':'AY14061311320829774f'},{'instanceId':'AY14061311330190512d'}]"
    //分页的cursor,如果返回结果数据里有cursor != "",表示数据还有下一页。需要通过cursor来查询下一页。
    request.Cursor = ""

    t.Log("start query")

    for {
        response, _ := cmsClient.QueryMetricList(request)
        //response code
        if response.Code != "200" || !response.IsSuccess() {
            t.Fatalf("code:%s,success:%v,msg:%s, httpstatus:%d, response:%v\n", response.Code, response.IsSuccess(), response.Message, response.GetHttpStatus(), response)
        }

        var datapoints []map[string]interface{}
        err := json.Unmarshal([]byte(response.Datapoints), &datapoints)
        if err != nil {
            t.Fatal(err)
        }

        t.Logf("batch count %d\n", len(datapoints))
        for _, v := range datapoints {
            t.Log(v)
        }

        //如果返回的结果中cursor=="",表示没有下一页了。跳出循环,结束本轮查询
        if response.Cursor == "" {
            t.Log("循环结束")
            break
        }

        //如果有下一页,将cursor作为查询下一页的条件,赋值给request
        request.Cursor = response.Cursor
        t.Logf("--------分页cursor:%s\n", response.Cursor)
    }

    t.Log("finished")
}

本文档会陆续更新,增加其他场景

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
合约跟单系统开发demo方案详情|api对接|一键跟单平台开发模式定制流程
合约跟单系统开发demo方案详情|api对接|一键跟单平台开发模式定制流程
17 0
麒麟系统开发笔记(九):在国产麒麟系统上搭建宇视摄像头SDK基础环境Demo
国产麒麟系统开发上,使用宇视摄像头,本篇使用宇视官网的提供的SDK,搭建基础的国产系统上宇视摄像头SDK开发化境Demo。
61 0
Spring Data Solr的api demo测试操作
Spring Data Solr的api demo测试操作
67 0
Vue 集成腾讯地图基础api Demo集合(基础地图引入与展示模块,地址逆解析,3D/2D切换 ,位置服务,mark标记)
Vue 集成腾讯地图基础api Demo集合(基础地图引入与展示模块,地址逆解析,3D/2D切换 ,位置服务,mark标记)
427 0
Unity -Demo 之 ✨ 语音识别-讯飞SDK使用过程
因为工作需求,现在要选择连接一个语音识别功能接入系统中,所以目前正在尝试使用讯飞的语音识别SDK进行连接。 在使用语音识别的sdk之前先查阅了一下语音识别的基本知识 然后去讯飞的官网注册信息并创建一个应用用于使用SDK 基本步骤处理完了,下面就是下载SDK进行集成使用了,我这里用的是语音唤醒的SDK,按照官方教程做就行。教程在这-语音唤醒SDK教程 当上面这几步做完了之后,接下来就是将这个工程打包成给unity使用的aar包了。可以参考这个教程:将Android Studio的工程打包成aar包给unity使用
240 0
阿里云智能视觉开放平台人脸人体API测试Demo
阿里云视觉智能开放平台基于达摩院自研的人脸人体分析技术,提供人脸检测与五官定位、人脸属性识别、人脸比对、人脸搜索、人体检测、人体属性、行为分析等多种功能,为开发者和企业用户提供高性能高可用的人脸人体识别服务。广泛应用于数字门店、楼宇门禁、身份识别、互动娱乐、IPC摄像头、内容广告等领域。本文以厨师帽检测为例,使用新版本Java SDK演示服务的快速调用。
433 0
阿里云AMQP NodeJS SDK使用Demo
消息队列RabbitMQ版是阿里云消息队列(MQ)团队基于AMQP 0-9-1(AMQP 0.91)标准协议研发的分布式、高吞吐、低延迟、高可扩展的云消息队列服务。消息队列RabbitMQ版完全兼容开源RabbitMQ社区、开箱即用、无需部署、免运维,帮助您快速上云。阿里云提供全托管服务,更专业、更可靠、更安全。本文主要演示如何使用开源NodeJS SDK连接阿里云AMQP 消息服务,实现消息收发。
679 0
阿里云Rocket MQ PHP Http SDK发送消息示例Demo
消息队列 RocketMQ 版支持 RESTful 风格的 HTTP 协议通信,并提供了以下 7 种语言的 SDK,下面以最新的PHP Http SDK为范例介绍RocketMQ消息的发送。
2045 0
阿里云Rocket MQ Java Http SDK发送消费消息示例Demo
消息队列 RocketMQ 版支持 RESTful 风格的 HTTP 协议通信,并提供了以下 7 种语言的 SDK,下面以最新的Java Http SDK为范例介绍RocketMQ消息的发送和接收。
3210 0
阿里云Rocket MQ 管理API Go SDK使用示例Demo
消息队列 RocketMQ 版产品接口支持 HTTP 调用、SDK 调用和 OpenAPI Explorer 调用,本文主要演示Go SDK的安装和使用。
704 0
+关注
婷宝
十多年软件开发经验,负责阿里云监控基础设施,以及云上监控。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
从 SDK 到编解码:视频直播架构解析
立即下载
跨平台的云服务SDK需要什么
立即下载
一个跨平台的云服务SDK需要什么
立即下载