Jenkins api的综合应用之资源监控的流程分析

131 阅读3分钟

一直流传着这样一个说法,Jenkins会倾向于将工程分配到上一次跑过的节点上。也就是说工程运行的资源使用是有规律的,甚至在同一个机器的不同执行器上甚至都是有区分的。

比如我在一个时间段内连续运行了一个multijob任务4次

image.png

(1)

image.png

(2)

image.png

(3)

image.png

(4)

可以看到任务的编号是连着的,每次都只选择执行器9和10作为各自任务的执行器。另外几个完全不使用。

这种倾向性并没有人明说出来,也不是特别重要,在这里是为了引出今日的核心话题。这种构建分布在哪些节点上的数据,对于分析任务的运行频率,特别是分析节点集群的负载是非常有用的。分析结果可以为我们提供资源使用情况的参考。也可以用来判别异常环境对于构建耗时差异的影响。  

分析思路

在label相关的页面上,一般都会有负载统计,但是负载统计里并没有表明是哪些任务在跑。他的短中长分别是10秒、1分钟、1小时采集一次的结果。我们因为不是系统,处理起来需要花时间,所以可以时间采集宽度上可以稍微放宽一点,选个5分钟,小于5分钟的任务可能采集不到,但这种快速的任务我们在繁忙的系统里可以暂时认为对整体资源消耗使用是不关键的。所以后面想要实现的功能就是每5分钟查看一次正在构建的任务。将其记录下,并提取其中的任务标签和节点名称。

标签用于计算集群的资源调度情况,节点用于计算单个节点的资源使用情况。

数据库表格可以设计的列为:

时间|任务名称|编号|任务标签|节点名称

细一点的还可以将任务标签涉及的机器数和总执行器数量提取出来。

 

运行中任务的提取

结合前面文章增加的视图过滤器插件,我们可以增加一个列表视图,过滤器选择构建状态过滤器,勾选运行中的任务。

image.png

这样就可以通过这个视图来监控运行中的任务了。

再通过前面文章展示的API操作,提取视图的数据,就能通过代码拿到这部分了。

image.png

节点名称和标签的提取

 

通过任务名称,先读取配置文件数据中的label,再通过最后一次编号的构建,读取数据中的builtOn信息,得到当次构建的节点名称。

 

数据展示

前面步骤的数据定时取得后存入数据库,最后将其按照一定规则读取出来,结合绘图包可以绘制成图形,代码里可以用Matplotlib库处理,网页上用echarts.js渲染,都很方便。  

读者可以自行在我前面的文章中寻找Jenkins操作的api来实现这个功能,思路远比代码重要。

参考

读取视图中工程的操作:Python利用requests库自己写一个Jenkins的标签和视图的操作接口 - 掘金 (juejin.cn) 读取任务信息的操作:Python利用requests库自己写一个Jenkins的任务操作接口 - 掘金 (juejin.cn)