Ubuntu 上实现 Jenkins 远程监控的可落地方案
一 监控目标与总体架构
- 监控对象与指标
- Jenkins 主节点:CPU、内存、磁盘、HTTP 响应时间、在线用户、线程、构建队列/执行器等。
- 构建与作业:构建成功率、构建时长、队列等待时长、失败趋势等。
- 节点与代理:在线/离线状态、空闲/忙碌执行器数量、系统资源等。
- 推荐架构
- 主机与应用指标:Prometheus 抓取 /prometheus 或 /metrics,Grafana 可视化与告警。
- Jenkins 内部健康与性能:内置 Monitoring(JavaMelody) 插件仪表盘。
- 任务与构建事件:Jenkins REST API 拉取构建结果与趋势。
- 命令行与自动化:jenkins-cli.jar 或 SSH CLI 做远程巡检与批量操作。
- 企业既有监控:Zabbix 通过脚本采集 /metrics 接口数据入库与告警。
二 快速落地步骤
- 启用并验证内置监控
- 安装插件:Manage Jenkins → Plugins → Monitoring(JavaMelody)。
- 访问仪表盘:Manage Jenkins → Monitoring of Jenkins master,查看 内存、CPU、HTTP 响应时间、当前请求数 等。
- 暴露指标给 Prometheus
- 安装插件:Prometheus metrics(不同发行版插件名可能略有差异)。
- 配置权限:为监控专用账号生成 API Token,并在 Manage Jenkins → Configure Global Security 中为该账号授予读取权限(至少 Overall/Read)。
- 验证端点:浏览器访问 http://<JENKINS_URL>/prometheus(或 /metrics),应返回指标文本或 JSON。
- 配置 Prometheus 抓取
- 在 prometheus.yml 增加抓取任务(示例):
- job_name: “jenkins”
metrics_path: “/prometheus/”
scheme: http
bearer_token: “<your_jenkins_token>”
static_configs:
- targets: [“<JENKINS_IP>:<JENKINS_PORT>”]
- 热加载或重启 Prometheus,确认 Targets 页面状态为 UP。
- Grafana 可视化
- 添加 Prometheus 数据源,导入 Jenkins 仪表盘模板(如 ID:9964),按需调整面板与告警阈值。
三 命令行与 API 远程巡检
- 使用 jenkins-cli.jar
- 下载:wget http://<JENKINS_URL>/jnlpJars/jenkins-cli.jar。
- 触发构建(API Token 认证更安全):
- java -jar jenkins-cli.jar -s http://<JENKINS_URL> -auth :<API_TOKEN> build -f -v
- 可将 用户名:API Token 写入文件(如 .jenkins-token),使用 -auth @.jenkins-token 引用。
- 使用 SSH CLI
- 启用 Jenkins SSH Server:Manage Jenkins → Configure Global Security → SSH Server,可设置固定端口(如 8090)。
- 获取监听端口:
- curl -Lv http://<JENKINS_URL>/login 2>&1 | grep ‘X-SSH-Endpoint’
- 添加公钥到目标 Jenkins 用户 的 Public Keys,之后可远程执行命令:
- ssh -l -p 8090 <JENKINS_HOST> who-am-i
- ssh -l -p 8090 <JENKINS_HOST> help
- ssh -l -p 8090 <JENKINS_HOST> build -f -v
- 使用 REST API 获取构建状态
- 示例:
- curl -u :<API_TOKEN> http://<JENKINS_URL>/job//lastBuild/api/json
- 可结合脚本定时拉取并推送到企业告警平台或写入时序库。
四 企业级监控集成 Zabbix
- 部署 Metrics 插件 并生成 Access Key,验证 /metrics 接口返回 JSON 指标。
- 在 Zabbix Agent 主机放置采集脚本(Python/Shell),脚本通过 Access Key 请求 /metrics,按需扁平化并输出指定指标值。
- Zabbix Server 创建 UserParameter,例如:
- Key:jenkins.metrics[gauges.jenkins.node.count.value.value]
- 更新间隔:如 30s
- 创建 监控项、触发器与仪表盘,对 节点数、构建失败、线程死锁、磁盘空间 等关键指标进行告警。
五 安全与网络要点
- 访问控制
- 禁用匿名访问,使用 强密码/API Token;为 Prometheus 抓取与 Zabbix 采集创建最小权限专用账号。
- 启用 CSRF 保护 与 代理/反向代理白名单。
- 传输与端口
- 优先使用 HTTPS 访问 Jenkins Web/API;SSH CLI 默认使用 22 端口(或自定义端口),Jenkins SSH Server 端口(如 8090)需纳入防火墙策略。
- 如需 JNLP 代理 通信,开放 50000/TCP(仅限受信网络)。
- 合规与审计
- 定期轮换 API Token/SSH 密钥,开启 构建日志保留策略 与 审计日志,对敏感作业启用 参数化与凭据隔离。