Prometheus 监控 Jenkins 全栈实战:从构建队列到节点健康的 CI/CD 可观测性
发布时间:2026/8/25 13:11:46 作者:尧图编辑部 阅读量:1,286

Prometheus 监控 Jenkins 全栈实战从构建队列到节点健康的 CI/CD 可观测性Jenkins 作为持续集成与持续交付CI/CD的核心引擎一旦它的构建队列积压、执行器耗尽、节点离线、JVM 内存泄漏或插件异常整个软件交付流水线就会中断导致发布延迟甚至线上事故。Prometheus 通过官方的Jenkins Prometheus Plugin能将 Jenkins 的内部状态以标准格式暴露无需额外 Exporter。本文将带你从安装插件、配置抓取到解读核心指标、构建 Grafana 大屏与告警规则让 Jenkins 的每一个角落都透明可控。1. 方案选型Prometheus Plugin vs JMX Exporter方案特点Jenkins Prometheus Plugin推荐官方维护的插件安装后自动在/prometheus路径暴露指标覆盖构建、队列、节点、JVM 等支持自定义指标标签无需重启 Jenkins 即可启用JMX Exporter通用 Java Agent需手动配置 MBean 规则无法直接获得 Jenkins 高级业务指标如 job 构建时长本文采用Prometheus Plugin它开箱即用且指标最贴合 CI/CD 场景。2. 安装并配置 Prometheus Plugin2.1 安装插件登录 Jenkins →系统管理→插件管理→可选插件。搜索Prometheus metrics勾选安装并重启 Jenkins。或者通过 CLI 安装jenkins-plugin-cli--pluginsprometheus:2.1.02.2 配置指标暴露安装后无需额外配置插件默认暴露端点URLhttp://jenkins.example.com:8080/prometheus格式Prometheus 文本格式包含 Job、Node、Executor、Queue 等指标。可选配置系统管理 → 系统配置 → Prometheus Metrics设置自定义标签如instance_name、env以便在 Prometheus 中区分多个 Jenkins 实例。开启或关闭特定采集器如BuildInfoCollector、DiskUsageCollector。配置路径前缀默认/prometheus。验证curlhttp://localhost:8080/prometheus应看到jenkins_executor_count、jenkins_job_build_duration_seconds_sum等指标。2.3 安全控制生产环境建议限制/prometheus端点的访问权限使用 Jenkins 的矩阵授权策略或角色策略仅允许监控用户访问。或通过反向代理Nginx添加 Basic Auth。注意如果 Jenkins 本身需要登录Prometheus 抓取时需携带认证信息见后文。3. 配置 Prometheus 抓取3.1 未启用安全认证的抓取scrape_configs:-job_name:jenkinsscrape_interval:30smetrics_path:/prometheusstatic_configs:-targets:[jenkins-master:8080]labels:app:jenkinsenv:production3.2 启用安全认证的抓取若 Jenkins 需要登录需在 Prometheus 中配置basic_auth。建议在 Jenkins 中创建一个专用监控用户仅读权限。-job_name:jenkinsscrape_interval:30smetrics_path:/prometheusbasic_auth:username:prometheuspassword:your_passwordstatic_configs:-targets:[jenkins-master:8080]如果 Jenkins 使用了 API Token可放在password字段中。3.3 抓取多个 Jenkins Master多主添加多个 target并为每个实例设置不同的instance标签。4. 核心监控指标与 PromQLPrometheus Plugin 暴露的指标以jenkins_或default_jenkins_为前缀取决于插件版本主要类别如下4.1 构建与 Job指标含义jenkins_job_build_duration_seconds(Histogram)Job 构建时长分布jenkins_job_builds_total(Counter)构建总数按repo、status等jenkins_job_last_successful_build_timestamp_seconds最后一次成功构建时间戳jenkins_job_last_build_result最后一次构建结果0成功, 1不稳定, 2失败, 3未构建PromQL 示例最近 5 分钟构建失败数increase(jenkins_job_builds_total{statusfail}[5m])平均构建时长rate(jenkins_job_build_duration_seconds_sum[1h]) / rate(jenkins_job_build_duration_seconds_count[1h])某 Job 最后构建结果为失败jenkins_job_last_build_result{jobmy-app-deploy} 24.2 队列与执行器指标含义jenkins_queue_size当前构建队列长度jenkins_queue_waiting_total处于 Waiting 状态的任务数jenkins_executor_count当前在线执行器总数jenkins_executor_in_use正在使用的执行器数jenkins_executor_free空闲执行器数PromQL 示例队列积压jenkins_queue_size 5执行器使用率jenkins_executor_in_use / jenkins_executor_count无可用执行器jenkins_executor_free 04.3 节点 (Agent) 状态指标含义jenkins_node_online节点是否在线1在线, 0离线jenkins_node_count节点总数按online状态分PromQL 示例离线节点jenkins_node_online 0在线节点数jenkins_node_online 14.4 JVM 与系统指标含义jvm_memory_used_bytes/jvm_memory_max_bytes堆内存使用/上限jvm_gc_collection_seconds_count/sumGC 次数与耗时process_cpu_seconds_total进程 CPU 时间process_open_fds打开文件描述符数jenkins_disk_usage_bytesJenkins 家目录磁盘使用量需开启 DiskUsageCollectorPromQL 示例堆内存使用率jvm_memory_used_bytes{areaheap} / jvm_memory_max_bytes{areaheap} * 100GC 耗时速率rate(jvm_gc_collection_seconds_sum[5m])5. Grafana 仪表盘推荐Jenkins Performance OverviewDashboard ID9964最经典展示构建趋势、队列、执行器、节点状态、JVM 等。Jenkins PrometheusID14764现代版整合了 Job 成功/失败率与构建时长百分位。Jenkins Master HealthID13535侧重 JVM、磁盘、线程池。自定义 CI/CD 大屏可加入流水线成功率、平均交付时间等指标结合 Git、ArgoCD 数据。导入后选择数据源变量instance对应 Jenkins Master。6. 告警规则实战groups:-name:jenkins_alertsrules:-alert:JenkinsDownexpr:up{jobjenkins} 0for:1mlabels:severity:criticalannotations:summary:Jenkins Master {{ $labels.instance }} 不可达-alert:JenkinsBuildQueueBacklogexpr:jenkins_queue_size10for:15mlabels:severity:warningannotations:summary:Jenkins 构建队列积压超过 10 个任务-alert:JenkinsExecutorSaturationexpr:jenkins_executor_free 0for:10mlabels:severity:criticalannotations:summary:所有执行器均在使用中无空闲执行器-alert:JenkinsNodeOfflineexpr:jenkins_node_online 0for:2mlabels:severity:criticalannotations:summary:Jenkins 节点 {{ $labels.node }} 已离线-alert:JenkinsJobFailureexpr:jenkins_job_last_build_result{job~.*production.*} 2for:1mlabels:severity:criticalannotations:summary:关键 Job {{ $labels.job }} 最后构建失败-alert:JenkinsHighHeapUsageexpr:(jvm_memory_used_bytes{areaheap}/ jvm_memory_max_bytes{areaheap}) * 10085for:10mlabels:severity:warningannotations:summary:Jenkins 堆内存使用率超过 85%可根据实际项目名称调整告警中的正则过滤。7. 进阶多 Master、安全与性能优化7.1 多 Master 监控如果有多个 Jenkins 实例如生产与非生产分别配置抓取并在 Prometheus 中用不同的instance标签。Grafana 面板可复用通过变量切换。7.2 安全凭据管理使用 Jenkins 的Credentials Binding插件为 Prometheus 抓取生成专用 API Token。Prometheus 的basic_auth直接填写 API Token 作为密码即可。通过反向代理如 Nginx统一处理 TLS 和认证Prometheus 只需连接代理。7.3 自定义指标标签在 Jenkins 系统配置的 Prometheus 插件部分可以添加额外的静态标签如datacenterdc1方便在 Grafana 中聚合筛选。还可启用BuildInfoCollector的额外维度如branch、result但需注意指标基数。7.4 性能影响Prometheus 插件基于内存中的注册表抓取时仅遍历数据结构对 Jenkins 性能影响极小。建议scrape_interval设为 30-60 秒。7.5 结合 Pipeline 监控插件会自动为每个 Pipeline Job 暴露指标。可通过jenkins_job_build_duration_seconds的job标签筛选特定流水线。若需更细粒度的 Stage 指标可结合Pipeline Stage View插件或自定义 Metric 发布如通过prometheus-build-metrics插件。8. 总结通过 Jenkins Prometheus PluginCI/CD 流水线的每一个关键点——构建队列深度、执行器使用率、节点在线状态、Job 成功率——都转化为 Prometheus 生态中的标准化指标。你可以在 Grafana 上直观地监控交付速度用 Alertmanager 在构建失败或节点宕机时第一时间收到通知。将 Jenkins 的可观测性融入全栈监控体系意味着软件交付的最后一块拼图也被点亮真正实现从代码提交到上线运行的全链路透明化。部署它让自动化构建不再“盲飞”为持续交付保驾护航。