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

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

目录
相关文章
|
监控 API 计算机视觉
CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
CompreFace 是一个在 GitHub 上拥有 6.1k Star 的轻量级人脸识别库,支持 API 和 SDK。它由 Exadel 公司开发,基于深度学习技术,提供高效、灵活的人脸识别解决方案。CompreFace 支持多种模型(如 VGG-Face、OpenFace 和 Facenet),具备多硬件支持、丰富的功能服务(如人脸检测、年龄性别识别等)和便捷的部署方式。适用于安防监控、商业领域和医疗美容等多个场景。
2237 4
|
人工智能 API 开发工具
【AI大模型】使用Python调用DeepSeek的API,原来SDK是调用这个,绝对的一分钟上手和使用
本文详细介绍了如何使用Python调用DeepSeek的API,从申请API-Key到实现代码层对话,手把手教你快速上手。DeepSeek作为领先的AI大模型,提供免费体验机会,帮助开发者探索其语言生成能力。通过简单示例代码与自定义界面开发,展示了API的实际应用,让对接过程在一分钟内轻松完成,为项目开发带来更多可能。
|
弹性计算 监控 安全
API稳定安全最佳实践:用阿里云SDK为业务保驾护航
阿里云智能集团高级技术专家赵建强和曹佩杰介绍了API稳定安全最佳实践,涵盖业务上云真实案例、集成开发最佳实践、配额管理和共担模型四部分。通过分析企业在不同阶段遇到的问题,如签名报错、异常处理不严谨、扩容失败等,提出了解决方案和工具,确保API调用的安全性和稳定性。特别强调了SDK的使用、无AK方案、自动刷新机制以及配额中心的作用,帮助用户构建更稳定、安全的服务,提升运维效率。最终介绍了集成开发共担模型,旨在通过最佳实践和平台工具,保障业务的稳定与安全,推动行业创新与发展。
|
XML API 开发工具
如何接入电竞体育直播API或者SDK
接入电竞体育直播API或SDK的步骤包括:1. 选择合适的API/SDK提供商,如ESL、Riot Games、Twitch等;2. 注册并获取API密钥;3. 阅读官方文档,了解接口调用和数据处理;4. 实现实时更新,确保数据同步;5. 测试与优化,确保功能稳定;6. 遵守使用规范。通过这些步骤,可成功集成电竞直播功能。
|
存储 自然语言处理 API
HarmonyOS SDK使用:熟悉HarmonyOS提供的开发工具和API
【10月更文挑战第21天】随着智能设备的普及,操作系统的重要性日益凸显。华为推出的HarmonyOS凭借其跨平台、分布式特性受到广泛关注。本文将从开发工具、API使用、SDK更新维护及社区支持等方面,探讨HarmonyOS SDK的使用,旨在帮助开发者高效利用这一强大平台,开启鸿蒙应用开发之旅。
1564 5
|
12月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
12月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
12月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
1292 152