Jenkins Linux版如何进行性能监控
小樊
43
2025-12-14 05:25:17
Jenkins Linux版性能监控实践
一 监控体系总览
- 建议采用分层监控:主机层(CPU、内存、磁盘、I/O、网络)、JVM与应用层(线程、队列、构建时长、插件健康)、可视化与告警层(Grafana/Prometheus 或厂商采集器)。
- 典型组件与用途:
- 主机层:sysstat(sar/iostat)、top/htop、iftop/nethogs、df/du。
- Jenkins应用层:Metrics 插件(暴露 /metrics)、Monitoring 插件(JavaMelody)。
- 可视化与告警:Prometheus + Grafana,或第三方采集器(如 Datakit)。
二 快速上手步骤
- 主机层监控
- 安装并启用 sysstat:执行
sudo apt-get install -y sysstat 并在 /etc/default/sysstat 中将 ENABLED="false" 改为 ENABLED="true",随后使用 sar -u 1 60、iostat -x 1 60、df -h、top/htop 等命令持续观测资源使用与瓶颈。
- Jenkins应用层监控
- 安装 Metrics 插件:在 Manage Jenkins → Plugins 搜索并安装,安装后在 Manage Jenkins → System Configuration → Metrics 点击 Generate 生成 Access Key,Jenkins 将暴露 /metrics 端点(供 Prometheus 或采集器拉取)。
- 安装 Monitoring 插件(JavaMelody):在 Manage Jenkins 中可直接进入 Monitoring of Jenkins master 仪表盘,查看 内存、CPU、HTTP 响应时间、当前请求数 等核心指标。
- 可视化与告警
- 使用 Prometheus + Grafana:在 Prometheus 配置中新增 job 抓取 http:///metrics,在 Grafana 导入 Jenkins 概览面板进行可视化与阈值告警配置。
- 使用 Datakit 采集:在 Jenkins → Metrics 生成 Access Key,在 Datakit 的 /usr/local/datakit/conf.d/jenkins/jenkins.conf 中配置
url 与 key,重启 Datakit 后即可在平台查看 executor、queue、JVM、系统负载 等指标面板。
三 关键指标与阈值建议
- 主机资源
- CPU:持续高于 80% 需关注是否存在构建并发过多或 I/O 等待。
- 内存:可用内存长期低于 10% 或频繁 swap,需优化构建机规格或限制并发。
- 磁盘:构建工作空间与日志所在分区使用率超过 80% 需清理或扩容。
- I/O:await、svctm 偏高且 iowait 上升,说明磁盘成为瓶颈。
- Jenkins 队列与执行器
- 关注 queue_size / queue_blocked / queue_pending / queue_stuck,队列持续增长或卡住表示资源不足或存在阻塞任务。
- 关注 executor_free_count / executor_in_use_count / executor_count,空闲过少说明并发不足或存在长时任务。
- JVM 与插件健康
- 关注 vm_cpu_load、vm_blocked_count、vm_count、vm_memory_total_used,结合 GC 日志判断是否存在内存泄漏或线程阻塞。
- 关注 plugins_active / plugins_failed,失败插件可能影响稳定性。
四 告警与排障
- 告警配置
- Prometheus:对关键指标(如 queue_size > 10、system_cpu_load > 0.8、executor_free_count == 0 持续 5 分钟)设置 Alertmanager 通知(邮件、企业微信、钉钉等)。
- 邮件与扩展:在 Jenkins 中安装 Email Extension 与 Email Extension Template 插件,结合构建结果与监控阈值发送通知。
- 第三方告警:可使用 ElastAlert 对日志或指标阈值进行规则化告警。
- 快速排障命令
- 资源与负载:
top/htop、free -m、df -h、iostat -x 1 60、sar -u 1 60、iftop/nethogs。
- Jenkins 状态与队列:通过 Jenkins REST API 获取节点与构建信息,例如
curl -u 用户名:密码 http://<jenkins>/job/<job_name>/lastBuild/api/json;结合 Monitoring 插件 仪表盘定位 HTTP 与线程问题。