Jenkins在CentOS上的监控与告警实践
一、监控方案总览
- 建议采用分层监控:系统层用 Node Exporter + Prometheus/Grafana 观测 CPU、内存、磁盘、网络;应用层用 Jenkins Prometheus Metrics Plugin 暴露 /prometheus 指标(如 Job、构建、节点、队列、Executor 等),在 Grafana 做可视化与阈值告警。该组合覆盖节点健康、任务执行、资源使用与趋势分析,适合在 CentOS 上长期稳定运行。
二、系统层监控与告警 Prometheus + Grafana
- 安装与暴露指标
- 在 CentOS 安装并启动 Node Exporter(默认端口 9100),确认可访问 http://:9100/metrics。
- 在 Jenkins 安装 Prometheus Metrics Plugin,确认可访问 http://:8080/prometheus。
- Prometheus 抓取配置示例 prometheus.yml
- 抓取系统层
- job_name: ‘node’
static_configs:
- 抓取 Jenkins 应用层
- job_name: ‘jenkins’
scrape_interval: 15s
metrics_path: ‘/prometheus’
static_configs:
- Grafana 可视化与告警
- 添加 Prometheus 数据源,导入官方或社区 Jenkins 面板(如 ID 9964 等),展示 构建成功率、耗时、队列长度、Executor 使用、节点在线状态 等。
- 在 Grafana Alerting 中创建规则,例如:
- 节点离线:expr: up{job=“jenkins”} == 0 for: 2m;严重度 warning;注解说明节点不可达。
- 构建失败率上升:expr: increase(jenkins_job_build_failed_total[1h]) / increase(jenkins_job_build_total[1h]) > 0.1;严重度 critical;提示检查不稳定测试或代码回退。
- 队列积压:expr: jenkins_queue_size > 10;严重度 warning;提示扩容 Executor 或优化作业。
- 说明
- Node Exporter 负责主机指标,Jenkins Prometheus 插件 负责 CI/CD 业务指标,二者互补,建议同时启用。
三、Jenkins 内建与插件监控
- Monitoring 插件(JavaMelody)
- 安装 Monitoring 插件后,访问 Manage Jenkins → Monitoring of Jenkins master 查看 内存、CPU、HTTP 响应时间、当前请求数 等,适合快速洞察 Master 健康状态与性能瓶颈。
- Metrics 插件(可选,供外部采集)
- 安装 Metrics 插件可暴露 /metrics 端点,便于 Zabbix 或自研采集器拉取 Jenkins 指标,实现统一监控平台接入。
四、构建结果通知与即时告警
- 邮件通知(Email Extension Plugin)
- 安装 Email Extension Plugin,在 Manage Jenkins → Configure System → Extended E-mail Notification 配置 SMTP(服务器、端口、SSL/TLS、认证),发送测试邮件验证。
- 在任务配置的 Post-build Actions 选择 Editable Email Notification,设置收件人、主题、内容模板与触发条件(如 Failure、Unstable、Success、Fixed),可使用变量如 $PROJECT_NAME、$BUILD_NUMBER、$BUILD_STATUS、$BUILD_URL 丰富内容。
- 钉钉通知(DingTalk 插件)
- 在 Jenkins 系统配置 添加 钉钉机器人(Webhook、关键词),或在 Pipeline 中使用 dingtalk 步骤发送 Markdown 消息。
- 示例(Jenkinsfile post 块):
- post {
success {
dingtalk(
robot: ‘Jenkins_Dingding’,
type: ‘MARKDOWN’,
title: “成功: ${JOB_NAME}”,
text: [“- 成功构建: ${JOB_NAME}\n- 版本: ${version}\n- 持续时间: ${currentBuild.durationString}\n- 详情: ${env.BUILD_URL}”]
)
}
failure {
dingtalk(
robot: ‘Jenkins_Dingding’,
type: ‘MARKDOWN’,
title: “失败: ${JOB_NAME}”,
text: [“- 构建失败: ${JOB_NAME}\n- 版本: ${version}\n- 持续时间: ${currentBuild.durationString}\n- 详情: ${env.BUILD_URL}”]
)
}
}
- 也可在任务配置里直接选择 钉钉通知时机 与 机器人,快速启用。
五、落地检查清单
- 确认 Jenkins URL 与 系统管理员邮箱 正确,避免通知发不出去。
- 在 Prometheus 的 Targets 页面确认 node 与 jenkins 均为 UP,Grafana 面板能正常出图。
- 邮件与钉钉均做一次“测试”或“模拟失败构建”,验证收件与内容模板。
- 为关键告警设置 收敛与升级策略(如重复抑制、升级联系人、值班表),避免告警风暴。