温馨提示×

如何监控Ubuntu上的Jenkins部署状态

小樊
40
2025-11-14 19:29:25
栏目: 智能运维

监控 Ubuntu 上 Jenkins 部署状态的可落地方案

一 监控目标与分层

  • 业务状态:部署是否成功、最近一次构建结果、失败趋势、部署耗时。
  • 运行健康:Jenkins 节点(Master/Agent)在线、Executor 使用率、构建队列长度、HTTP 响应时间。
  • 基础设施:CPU、内存、磁盘 I/O、网络、JVM GC 与堆使用。
  • 告警处置:构建失败、节点离线、队列积压、磁盘空间不足、响应超时等及时通知。

二 内置与 API 快速监控

  • 内置插件 Monitoring(JavaMelody)
    • Manage Jenkins → Manage Plugins 安装 Monitoring 插件,访问 Manage Jenkins → Monitoring of Jenkins master 查看仪表盘,覆盖 内存、CPU、HTTP 响应时间、当前请求数 等,适合快速“开箱即用”的单体监控。
  • 构建状态与日志
    • 通过 Jenkins REST API 获取构建结果,例如:
      • 最新构建结果:curl -u 用户名:密码 http://<jenkins_host>:8080/job/<job_name>/lastBuild/api/json
      • 指定构建:curl -u 用户名:密码 http://<jenkins_host>:8080/job/<job_name>/<build_number>/api/json
    • 结合脚本轮询上述接口,解析字段如 result、duration、timestamp,当 result != “SUCCESS” 时触发告警或回滚流程。
  • 系统与服务状态
    • 服务存活与端口:systemctl status jenkins;ss -ltnp | grep 8080
    • 资源与 I/O:top/htop、iostat、iftop/nethogs
    • 日志定位:/var/log/jenkins/jenkins.log(排查启动失败、插件异常、部署脚本报错等)。

三 Prometheus + Grafana 可观测性方案

  • 指标采集
    • 在 Jenkins 安装 Prometheus Metrics Plugin,Jenkins 会自动暴露 /prometheus 指标端点(如:http://<jenkins_host>:8080/prometheus),包含 Job/构建、节点(Agent)、队列、Executor 等 CI/CD 业务指标。
    • 在主机安装 Node Exporter(默认 :9100/metrics)采集 CPU、内存、磁盘、网络 等系统指标,与应用指标解耦。
  • Prometheus 配置示例
    • 抓取 Jenkins:
      • job_name: ‘jenkins’ metrics_path: ‘/prometheus’ static_configs:
        • targets: [‘<jenkins_host>:8080’]
    • 抓取主机:
      • job_name: ‘node’ static_configs:
        • targets: [‘<node_exporter_host>:9100’]
  • Grafana 可视化与告警
    • 导入官方或社区 Jenkins 仪表盘(如 ID:9964),展示 构建成功率、构建耗时、队列长度、节点在线状态、Executor 使用率 等。
    • 典型告警规则示例(Prometheus):
      • 节点离线
        • alert: JenkinsNodeOffline expr: default_jenkins_nodes_online == 0 for: 2m labels: { severity: warning } annotations: { summary: “Jenkins 节点离线”, description: “Jenkins 节点 {{ $labels.node }} 已离线超过 2 分钟” }
      • 构建失败
        • alert: JenkinsJobFailed expr: jenkins_job_last_build_result{result=“FAILURE”} == 1 for: 0m labels: { severity: critical } annotations: { summary: “Jenkins 任务失败”, description: “Job {{ $labels.job }} 最近一次构建失败” }
      • 队列积压
        • alert: JenkinsQueueBacklog expr: jenkins_queue_size > 10 for: 5m labels: { severity: warning } annotations: { summary: “Jenkins 队列积压”, description: “当前队列长度 {{ $value }}” }。

四 部署健康自检与自动化巡检脚本

  • 一键健康检查脚本(示例)
    • 检查项:服务存活、端口可达、最近一次构建结果、节点在线、磁盘空间、JVM 堆使用。
    • 用法:chmod +x jenkins_health.sh && ./jenkins_health.sh
    • 示例脚本(按需调整 URL、凭据与阈值):
      • #!/usr/bin/env bash set -Eeuo pipefail JENKINS_URL=“http://localhost:8080” USER=“admin” TOKEN=“your_api_token” JOB=“your-deploy-job”

        1) 服务与端口

        systemctl is-active --quiet jenkins || { echo “Jenkins service DOWN”; exit 1; } ss -ltnp | grep -q :8080 || { echo “Port 8080 not listening”; exit 1; }

        2) 最近一次构建

        LAST=$(curl -s -u “$USER:$TOKEN” “$JENKINS_URL/job/$JOB/lastBuild/api/json” | jq -r ‘.result // “UNKNOWN”’) [[ “$LAST” == “SUCCESS” ]] || { echo “Last build result: $LAST”; exit 2; }

        3) 节点在线(示例阈值:期望至少 1 个在线 Agent)

        ONLINE=$(curl -s -u “$USER:$TOKEN” “$JENKINS_URL/computer/api/json” | jq ‘[.computer[] | select(.offline==false)] | length’) (( ONLINE >= 1 )) || { echo “Online agents: $ONLINE”; exit 3; }

        4) 磁盘空间(阈值:根分区 < 10% 空闲告警)

        DF=$(df / | tail -1) USE=$(echo “$DF” | awk ‘{print $5}’ | tr -d ‘%’) (( USE < 90 )) || { echo “Root disk usage: ${USE}%”; exit 4; }

        echo “Jenkins health check OK”

  • 建议将脚本纳入 cron(如每 5 分钟)并结合 企业微信/钉钉/Slack WebhookPrometheus Alertmanager 发送告警。

五 故障排查与优化要点

  • 连通性与端口:确认 8080 未被防火墙阻断(如 ufw allow 8080),并能被外部访问;必要时排查云安全组/本机防火墙。
  • 服务与监听:使用 systemctl status jenkinsss -ltnp | grep 8080 确认进程与端口正常;异常时查看 /var/log/jenkins/jenkins.log 定位插件/脚本/权限问题。
  • JVM 与资源:检查 Java 版本兼容堆内存 配置,必要时增大堆;结合 GC 日志 分析长时间 GC 导致的卡顿或失败;关注 磁盘空间I/O 瓶颈。
  • 节点与队列:在 Prometheus/Grafana 观察 节点在线、Executor 使用率、队列长度,节点掉线或队列长期积压时优先扩容 Agent 或优化 Pipeline 并发

0