云监控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")
}

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

相关实践学习
RocketMQ监控/告警一站式搭建应用
RocketMQ监控/告警一站式搭建演示
目录
相关文章
|
2月前
|
Java API 开发工具
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
跨境支付公司和Docusign进行集成时,碰到问题时的解决方案。分别用SDK和API集成后的各自使用体验。
46 2
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
|
7月前
|
Java API
Java调用淘宝API demo源代码
Java调用淘宝API demo源代码
70 0
|
6月前
|
安全 API 开发工具
获取仓库列表接口可以通过SDK或者REST API两种方式调用
获取仓库列表接口可以通过SDK或者REST API两种方式调用
50 2
|
7月前
|
JavaScript API 开发工具
SAP Marketing Cloud Restful API SDK 使用案例分享
SAP Marketing Cloud Restful API SDK 使用案例分享
67 0
|
2月前
|
Web App开发 前端开发 JavaScript
如何快速与呼叫中心系统CTI/API/SDK接口集成
由于呼叫中心系统涉及通信、CTI、终端设备、中继线路等技术与概念,从事信息管理系统、ERP、CRM、工单系统等的研发人员一般不是非常熟悉这部分技术,当需要提供具备呼叫中心能力的解决方案时,往往要用较多的时间来研究这些相对复杂的技术,对接过程比较长,开发调试有一定的阻力,基于此,我们提出一种更加简便高效的集成方法,可以零代码集成呼叫中心平台,实现项目快速上线。
如何快速与呼叫中心系统CTI/API/SDK接口集成
|
3月前
|
存储 API 开发工具
如何使用Python SDK与OpenAI Assistants API构建助手?
在这篇文章中,我们将介绍如何使用Python SDK构建最基本的Assistant,你只需要在代码中添加你自己的OpenAI API密钥即可。
120 0
|
8月前
|
算法 数据可视化 开发工具
Baumer相机BGAPI SDK Demo软件去连接JPEG-650M相机进行采图时,发现图像显示为一条灰色条状图像(C++),联合OpenCV进行图像转换显示
Baumer相机BGAPI SDK Demo软件去连接JPEG-650M相机进行采图时,发现图像显示为一条灰色条状图像(C++),联合OpenCV进行图像转换显示
62 0
|
9月前
|
自然语言处理 API 开发工具
百度语言处理应用技术API:NLP开发SDK的简单调用
百度语言处理应用技术API:NLP开发SDK的简单调用
63 0
|
9月前
|
API PHP 开发工具
漏刻有时API接口实战开发系列(11):腾讯云短信3.0sms开发SDK环境部署及配置的实战总结
漏刻有时API接口实战开发系列(11):腾讯云短信3.0sms开发SDK环境部署及配置的实战总结
188 0
|
SQL 消息中间件 分布式计算
基于阿里云 CloudMonitor云监控自定义监控大盘对 EMR 自定义监控实践
本文旨在分享 EMR 平台大数据服务基于阿里云 CloudMonitor 的监控实践,给客户提供除了 EMR 平台默认监控以外,自建监控方式,适用于统一多个阿里云服务的监控监控场景。
670 1
基于阿里云 CloudMonitor云监控自定义监控大盘对 EMR 自定义监控实践