当前位置: 首页 > news >正文

Jenkins 监控方案:Prometheus + Grafana 实践

这两天在运维群里面看到有人说 Jenkins 节点也可以监控,以前没想过搞这个,现在就对公司 Jenkins 搞搞顺便记录下呗。

一、使用 Jenkins Prometheus 插件(推荐方式)

1. 安装插件

在 Jenkins 插件管理里搜索并安装 Prometheus Metrics Plugin

2. 启用指标导出

插件安装后,Jenkins 会自动暴露一个 /prometheus 的 HTTP endpoint,例如:

http://<jenkins_host>:8080/prometheus

这里包含了 Job、构建、节点(Agent) 等相关指标。

3. 节点状态指标示例

插件会提供类似的指标:

default_jenkins_nodes_online{node="agent1"} 1
default_jenkins_nodes_online{node="agent2"} 0

其中:

  • 1 表示在线
  • 0 表示离线

也可以在 Prometheus 中直接编写告警规则,例如:

- alert: JenkinsNodeOfflineexpr: default_jenkins_nodes_online == 0for: 2mlabels:severity: warningannotations:summary: "Jenkins 节点离线"description: "Jenkins 节点 {{ $labels.node }} 已离线超过 2 分钟"

二、Jenkins 监控常见用途及原理

常见用途

这里说下普罗米修斯监控 Jenkins 的话一般做些什么。

  1. 节点健康监控

    • 发现某个 Agent 掉线及时告警
    • 判断节点是否长期闲置,辅助缩容
  2. 任务执行监控

    • 构建成功率统计(CI 健康度)
    • 构建耗时分析(定位瓶颈)
    • 失败趋势分析(发现不稳定测试或问题代码)
  3. 资源使用监控

    • 队列长度、Executor 使用情况
    • 帮助判断是否需要扩容构建资源

原理

一般普罗米修斯监控都是靠 Exporter 去定规则监控,这里简单讲下 Node ExporterJenkins Prometheus 的原理与区别。

1. Node Exporter 的原理

  • 实现方式:独立进程(Go 编写)
  • 采集数据:通过 /proc/sys 读取主机指标,例如 CPU、内存、磁盘、网络
  • 暴露方式:HTTP 服务(默认 :9100/metrics
  • 特点:与应用解耦,只关注系统层面

2. Jenkins Prometheus 插件的原理

  • 实现方式:Jenkins 插件,运行在 JVM 内部

  • 采集数据:调用 Jenkins 内部对象模型(Java API),如:

    • Computer → 节点信息
    • Run → Job 构建状态
    • Queue → 任务队列
  • 暴露方式http://<jenkins>:8080/prometheus

  • 特点:强依赖 Jenkins,只能监控 CI/CD 业务指标

3. 本质区别

对比点Node ExporterJenkins Prometheus 插件
运行位置宿主机/容器,独立进程Jenkins JVM 内部
采集来源Linux 内核接口(/proc)Jenkins 内部 Java API/对象模型
采集对象操作系统层面资源应用级别 CI/CD 指标
暴露方式HTTP :9100/metricsJenkins /prometheus 路径
依赖关系与应用解耦,独立运行依赖 Jenkins,本身不可独立使用

总结一句话:

  • Node Exporter 监控机器
  • Jenkins Prometheus 插件监控流水线

三、Prometheus 抓取 Jenkins 数据

在 Prometheus 配置文件 prometheus.yaml 中加入:

- job_name: 'jenkins'scrape_interval: 5mscrape_timeout: 3mstatic_configs:- targets:- jenkins.example.commetrics_path: /prometheus

如果在 Kubernetes 容器内访问:

- job_name: 'jenkins'scrape_interval: 5mscrape_timeout: 3mstatic_configs:- targets:- jenkins.jenkins.svc.cluster.local:8080metrics_path: /prometheus

说明:

  • metrics_path:Prometheus 抓取的路径(不填默认对应 /metrics,上方对应:http://jenkins.example.com/prometheus
  • targets:目标主机+端口。K8s 里用 服务名.命名空间.svc.cluster.local:端口 格式

配置完成后,重启 Prometheus 即可在 Prometheus UI 里看到 Jenkins 指标(可能等1-2分钟)。


四、Grafana 面板展示及报警配置

实际上,我也没监控 Jenkins 任务、资源的需求,这里就监控下 Jenkins 节点在线情况就好了。

首先确认 default_jenkins_nodes_online 是节点在线状态,抓取到的信息是这样的:

default_jenkins_nodes_online{node="aa",} 1.0
default_jenkins_nodes_online{node="bb",} 1.0
default_jenkins_nodes_online{node="cc",} 0.0
...

面板展示

先 New Dashboard,再 Add visualization。

1. Table Panel 配置

  1. 在 Grafana 下新建的 Panel,选择 Table 视图(默认是 Time series
  2. 在 Query Options 下,Format 设置为 Table(而非 Time series),Type 设置为 Instant(即时)

2. 处理重复数据

然后发现同一节点出现多行,可以在 Prometheus 查询里使用聚合函数,例如:

max by (node) (default_jenkins_nodes_online)

这样每个节点只保留一行最新状态。

出现多行是因为指标被采集多次,或者 Grafana 默认把 每个时间点都作为一行。

3. 表格美化

  • Transform - Organize fields → 删除不需要的列,修改列名

  • 右侧列 - Add field override → 按列名设置阈值颜色(设Cell options > Cell type 为 Colored text,添加 Thresholds > Thresholds)

    • 1 设 绿色
    • 1.001/0.999/Base 设 红色
  • 排序 → 点击表格列名,按状态递增排列,离线节点置顶

  • 列宽度(Colored text) → 调整为合适宽度,避免过长

然后点保存,这样就完成了对 Jenkins 节点的视图面板了。

⚠ 注意:Dashboard 名称和 Panel 名称不要完全相同,否则会报错。

报警配置

在 Alert rules 里 Create alert rule

  • 输入 Rule name
  • 查询语句处(A)选择 prometheus 类型并输入:
    count(max by (node) (default_jenkins_nodes_online)) 
    
  • sum(max by (node) (default_jenkins_nodes_online))

    >即 A 代表了查询的值,这里用节点总数的和减去返回值的和(节点正常返回1),只要 ≠ 0,就是有异常Options -> Format 选择 Table
    
  • Add expression 选择 Classic_conditions
    WHEN last() OF A IS OUTSIDE RANGE -0.999 TO 0.001

    限制 A 的值大于或小于 0 就报警

  • 最后选择 Folder、Evaluation group,保存

这样就完成了 Jenkins 节点离线异常报警了。

注意事项

default_jenkins_nodes_online 这个指标只有两种状态:

  • 1 → 节点在线
  • 0 → 节点离线

需要注意的是:
如果你是 手动将节点下线,这个指标同样会变为 0,并不会区分是手动下线还是节点故障。因此:

  • 如果直接以 jenkins_nodes_online 状态不等于 1 作为告警条件,手动下线的节点也会触发告警。
  • 插件本身没有额外的参数能标识“手动下线”。

解决思路:

  1. 调用 Jenkins API → 可以进一步判断某个节点是否被手动禁用,再结合 Prometheus 告警规则做过滤。

  2. 配置告警排除规则 → 如果节点较少,可以在告警规则里直接排除某些手动下线的节点,例如:

    jenkins_node_online{node!="手动下线的节点"}
    

对于节点规模不大、手动下线很少的场景,这样写一行过滤规则就能解决。


总结

  • Jenkins Prometheus 插件:轻量、无侵入,快速导出 Jenkins 的业务指标
  • Prometheus:集中采集
  • Grafana:可视化 + 报表 + 告警

在我本篇博文的基础上,稍微参照一下其他的 Jenkins/prometheus 抓取信息说明,很容易就可以实现从 节点状态任务健康度队列资源 的全方位对 Jenkins 监控了。


文章转载自:

http://TpVhr2NK.gwsLL.cn
http://BTx5qqFV.gwsLL.cn
http://P6pMDPGn.gwsLL.cn
http://QLRZAv3m.gwsLL.cn
http://SWNltnTw.gwsLL.cn
http://pbKvaBqe.gwsLL.cn
http://4uQ5ySRm.gwsLL.cn
http://66c7nbDQ.gwsLL.cn
http://68osRIdX.gwsLL.cn
http://3kGEfQbc.gwsLL.cn
http://t74upbux.gwsLL.cn
http://70xaKqsp.gwsLL.cn
http://6SL15BDb.gwsLL.cn
http://hYH3xKbD.gwsLL.cn
http://bPIP5k45.gwsLL.cn
http://QdueRuvw.gwsLL.cn
http://Yh9MNpm6.gwsLL.cn
http://ADM6rZwq.gwsLL.cn
http://UOcgSB6l.gwsLL.cn
http://JprtWFp9.gwsLL.cn
http://D3HUHco8.gwsLL.cn
http://JFoSgY0O.gwsLL.cn
http://zvCuN2Kq.gwsLL.cn
http://RhsMKqtp.gwsLL.cn
http://SEDmpR7R.gwsLL.cn
http://1srwWH0J.gwsLL.cn
http://Dic5s8Y9.gwsLL.cn
http://o9w872qL.gwsLL.cn
http://84uOlTD2.gwsLL.cn
http://erpFtBZK.gwsLL.cn
http://www.dtcms.com/a/367858.html

相关文章:

  • 【论文阅读】Security of Language Models for Code: A Systematic Literature Review
  • 神经网络算法各种层的原理(基于Keras)--输入层,全连接层,卷积层,池化层,嵌入层,长短期记忆网络层等
  • Github | MoneyPrinterTurbo:自动化视频内容生成系统
  • JUnit入门:Java单元测试全解析
  • 如何下载B站视频,去水印,翻译字幕
  • 脚本语言的大浪淘沙或百花争艳
  • Redis中的hash数据类型
  • 如何安全地删除与重建 Elasticsearch 的 .watches 索引
  • HDFS存储农业大数据的秘密是什么?高级大豆数据分析与可视化系统架构设计思路
  • uni-app iOS 文件调试常见问题与解决方案:结合 itools、克魔、iMazing 的实战经验
  • 解析豆科系统发育冲突原因
  • 五分钟XML速成
  • 《LangChain从入门到精通》系统学习教材大纲
  • 华为云 OBS:数字时代的数据存储与价值挖掘利器
  • Claude Code PM 深度实战指南:AI驱动的GitHub项目管理与并行协作
  • paimon实战 -- 阿里基于StarRocks 与 Paimon 实现的实时分析黑科技
  • 开源定时器教程:Quartz与XXL-JOB全面对比与实践
  • Day21_【机器学习—决策树(3)—剪枝】
  • finalize() 方法介绍
  • IDE mac M芯片安装报错:如何解决“InsCode.app 已损坏”,无法打开
  • Qt信号与槽机制全面解析
  • Qt实现背景滚动
  • 新后端漏洞(上)- H2 Database Console 未授权访问
  • 使用CI/CD部署后端项目(gin)
  • Charles抓包工具在接口性能优化与压力测试中的实用方法
  • Spring Boot启动失败从循环依赖到懒加载配置的深度排查指南
  • iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护
  • uni-app 项目 iOS 上架效率优化 从工具选择到流程改进的实战经验
  • solidity的高阶语法
  • 大数据框架对比与选择指南