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

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

目录
相关文章
|
12月前
|
监控 API 计算机视觉
CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
CompreFace 是一个在 GitHub 上拥有 6.1k Star 的轻量级人脸识别库,支持 API 和 SDK。它由 Exadel 公司开发,基于深度学习技术,提供高效、灵活的人脸识别解决方案。CompreFace 支持多种模型(如 VGG-Face、OpenFace 和 Facenet),具备多硬件支持、丰富的功能服务(如人脸检测、年龄性别识别等)和便捷的部署方式。适用于安防监控、商业领域和医疗美容等多个场景。
1374 4
|
10月前
|
人工智能 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的使用,旨在帮助开发者高效利用这一强大平台,开启鸿蒙应用开发之旅。
1299 5
|
9月前
|
运维 监控 网络协议
物联网设备状态监控全解析:从告警参数到静默管理的深度指南-优雅草卓伊凡
物联网设备状态监控全解析:从告警参数到静默管理的深度指南-优雅草卓伊凡
288 11
物联网设备状态监控全解析:从告警参数到静默管理的深度指南-优雅草卓伊凡
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
1387 3
|
8月前
|
编解码 监控 算法
CDN+OSS边缘加速实践:动态压缩+智能路由降低30%视频流量成本(含带宽峰值监控与告警配置)
本方案通过动态压缩、智能路由及CDN与OSS集成优化,实现视频业务带宽成本下降31%,首帧时间缩短50%,错误率降低53%。结合实测数据分析与架构创新,有效解决冷启动延迟、跨区域传输及设备适配性问题,具备快速投入回收能力。
511 0
|
11月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
517 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
11月前
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
623 22

热门文章

最新文章