温馨提示×

Ubuntu Jenkins部署如何监控运行状态

小樊
39
2025-11-22 18:52:38
栏目: 智能运维

Ubuntu 上监控 Jenkins 运行状态的实用方案

一 基础健康检查

  • 服务状态与端口连通
    • 检查服务:sudo systemctl status jenkins(期望状态:active (running)
    • 实时查看启动日志:sudo journalctl -u jenkins -f
    • 端口连通:ss -ltnp | grep 8080 或 curl -I http://localhost:8080
    • 防火墙放行:sudo ufw allow 8080/tcp(云主机还需在安全组放行)
  • 系统资源与关键进程
    • 资源监控:top/htop、iostat -x 1、iftop/nethogs
    • Java 进程与堆:pgrep -f jenkins;jstat -gc 1000(观察 YGC/FGC 与堆使用)
    • 磁盘与 inode:df -h、df -i(构建产物与日志易占满)
  • 快速自检清单
    • 服务存活、端口监听、进程存在、磁盘空间充足、可登录 Web UI

二 日志与可视化监控

  • 日志查看与检索
    • 系统日志:sudo tail -f /var/log/jenkins/jenkins.log
    • 关键字排查:grep -i “error|exception|oom” /var/log/jenkins/jenkins.log
    • Web 端日志:Manage Jenkins → System Log(按日志器和级别筛选)
  • 内置可视化
    • Monitoring 插件(JavaMelody):Manage Jenkins → Monitoring of Jenkins master,查看 CPU、内存、HTTP 响应时间、当前请求数
  • 外部时序与可视化
    • Prometheus 插件暴露 /prometheus 指标端点,Prometheus 拉取后在 Grafana 展示面板(Jenkins 性能与健康概览)
  • 日志轮转与容量控制
    • 建议配置 /etc/logrotate.d/jenkins,示例:
      • /var/log/jenkins/*.log { daily; rotate 7; compress; missingok; notifempty; create 0644 root adm; sharedscripts; postrotate kill -HUP $(cat /var/run/jenkins/jenkins.pid) 2>/dev/null || true; endscript }

三 构建与流水线健康监控

  • API 拉取构建状态
    • 最新构建结果:curl -u user:token http:///job//lastBuild/api/json
    • 可扩展脚本轮询关键 Job,结合返回码与 result 字段做告警(如非 SUCCESS 则通知)
  • CLI 巡检代理与节点
    • 获取代理列表:java -jar jenkins-cli.jar -s http:/// -auth user:token agent list
    • 适合做节点存活与离线告警
  • 日志集中与检索
    • 将 Jenkins 日志接入 ELK/Graylog(如 Logstash 插件输出到 ES,Kibana 可视化),便于跨 Job/节点聚合分析
  • 常见异常信号
    • 构建频繁失败、队列长期堆积、节点频繁离线、构建日志报 OutOfMemoryError 或 GC 停顿过长

四 告警与容量优化

  • 告警建议
    • 进程或端口不可用、HTTP 5xx 增多、构建失败率超阈值、磁盘使用率 > 80%、JVM Full GC 次数突增
    • 可用脚本 + 企业微信/钉钉 Webhook、Prometheus Alertmanager、Zabbix 等方式推送
  • 容量与性能优化
    • 调整堆大小:编辑 /etc/default/jenkins,设置 JAVA_ARGS=“-Xmx4096m -Xms2048m
    • 控制并发:在 全局配置 限制“执行者数量”,并为重任务配置 构建代理
    • 定期清理:工作区与构建历史(Workspace Cleanup 插件)、旧日志与制品归档
    • 版本与插件:保持 Jenkins 与插件 为兼容版本,减少资源泄漏与不稳定因素
  • 最小可用监控脚本示例
    • 检查服务与端口:
      • systemctl is-active --quiet jenkins || echo “Jenkins down”
      • ss -ltnp | grep -q :8080 || echo “Port 8080 not listening”
    • 检查最近一次构建:
      • status=$(curl -s -u user:token http:///job//lastBuild/api/json | jq -r ‘.result’)
      • [[ “$status” != “SUCCESS” ]] && echo “Job last build failed: $status”

0