如何在Azure DevOps 2020中获取近30天代理池历史数据生成小时级消耗图
Azure DevOps 2020 代理池小时级消耗数据获取方案
数据接口调用(基于内置REST API 6.0版本)
Azure DevOps 2020 原生提供了分布式任务相关的接口,不需要额外安装扩展即可拉取全量作业运行数据:
- 第一步:获取目标代理池ID
调用接口GET https://<你的DevOps服务地址>/<集合名称>/_apis/distributedtask/pools?api-version=6.0,返回结果中对应代理池的id字段即为后续请求需要的池ID。 - 第二步:拉取30天内的全量作业请求记录
调用接口GET https://<你的DevOps服务地址>/<集合名称>/_apis/distributedtask/pools/<代理池ID>/jobrequests?api-version=6.0&minLastChangedDate=<30天前的ISO格式时间>&maxLastChangedDate=<当前ISO格式时间>,即可拿到指定时间范围内所有作业的调度、运行、完成全链路记录。
小时级粒度数据聚合逻辑
接口返回的jobRequests列表中,每条记录包含queueTime(入队时间)、startTime(开始运行时间)、finishTime(结束时间)、reservedAgentId(占用代理ID)字段,按以下规则聚合即可得到趋势图所需数据:
- 按自然小时切割时间窗口,统计每个小时窗口内处于运行状态的作业数量、占用的代理数量,即可得到代理池的并发消耗趋势
- 用每个小时内所有作业的
(finishTime - startTime)求和后,除以(代理池总代理数 * 3600秒),即可得到该小时的代理池利用率数值 - 如果需要统计队列拥堵情况,聚合每个小时内作业的
(startTime - queueTime)的平均值/最大值即可
高数据量场景适配
如果30天内的作业量超过1000条,接口单次返回会自动截断,需要通过分页拉取全量数据:
每次接口请求的响应头中会返回x-ms-continuationtoken字段,将该值作为continuationToken参数拼接到下一次请求的URL中,重复调用直到响应头无该字段即可拉取全量数据。
如果你使用的是Azure DevOps 2020 RTM初始版本,将上述接口的
api-version参数改为5.1即可正常调用,返回字段结构完全兼容。
内容的提问来源于stack exchange,提问作者Pranoop
相关产品推荐
相关产品推荐

