那一夜,服务器磁盘突然爆满,我才意识到Jenkins监控的重要性——而这一切本可以避免。
01 为什么你的Jenkins总是“胃口”这么大?
每次构建,Jenkins就像一只贪吃的小怪兽,不仅会产生构建产物,还会保存详细的构建历史、日志和工作空间文件。
日子久了,这些数据会悄无声息地吃掉你大量的磁盘空间。
更糟糕的是,当空间不足时,Jenkins会开始“罢工”:构建失败、性能下降,甚至整个CI/CD流程瘫痪。
这不仅仅是 inconvenience,而是可能导致团队开发工作完全停滞的重大事故。
我曾经遇到过因为磁盘满导致生产环境无法部署的紧急情况,那种紧张感至今记忆犹新。
02 基础防护:Jenkins自带的磁盘监控能力
好消息是,Jenkins本身提供了一些基础的磁盘监控功能,让你能够快速了解磁盘使用情况。
内置插件:你的第一道防线
Disk Usage Plugin 是每个Jenkins管理员都应该熟悉的基本插件。
安装后,你可以在”Manage Jenkins” → “Disk Usage”中查看Jenkins home目录和workspace的详细使用情况。
这个插件提供了一个清晰的可视化界面,显示哪些job占用了最多的空间,让你快速识别出”空间杀手”。
Monitoring Plugin 是另一个有用工具,它提供包括磁盘使用情况在内的系统性能概览。
它会生成包含系统负载、内存使用等信息的HTML报告,让你对Jenkins服务器的运行状态有一个全面的了解。
节点磁盘空间监控
在多节点的Jenkins环境中,Node and Cloud Monitor 插件可以帮你监控所有节点的磁盘空间。
它的优势在于:当节点的剩余空间低于预设阈值(如10%)时,Jenkins会自动将该节点标记为离线,防止在该节点上执行新的构建任务,避免因磁盘空间不足导致的构建失败。
03 专业监控:Prometheus+Grafana全方位监控方案
对于需要更全面监控的企业级环境,Prometheus + Grafana组合是你的不二选择。
这套方案不仅能监控磁盘空间,还能跟踪Jenkins的各项性能指标,提供精美的可视化仪表盘。
配置Prometheus监控Jenkins
首先,需要在Jenkins中安装Prometheus插件。
安装完成后,进入”Manage Jenkins” → “Configure System”,找到Prometheus部分,确保”Enable Prometheus”已勾选。
默认情况下,Prometheus指标可以通过http://你的Jenkins地址/prometheus访问。
接下来,配置Prometheus服务器拉取Jenkins的指标数据。
在Prometheus的prometheus.yml配置文件中添加以下内容:
scrape_configs:
- job_name: 'jenkins'
metrics_path: '/prometheus'
static_configs:
- targets: ['jenkins_server_ip:8080'] # 替换为你的Jenkins服务器IP和端口
重启Prometheus服务后,它就会开始从Jenkins收集指标数据。
Jenkins提供的磁盘相关指标
Prometheus插件会暴露一系列与磁盘相关的监控指标,包括:
- default_jenkins_disk_usage_bytes:Jenkins_HOME中一级文件夹的磁盘使用量(字节)
- default_jenkins_job_usage_bytes:每个作业的磁盘使用量(字节)
- default_jenkins_file_store_capacity_bytes:文件存储的总大小(字节)
- default_jenkins_file_store_available_bytes:文件存储的估计可用空间
创建Grafana监控仪表盘
配置Grafana连接到Prometheus数据源后,你可以创建专门的磁盘监控面板。
以下是几个实用的PromQL查询语句,可用于监控磁盘空间:
- Jenkins Home目录磁盘使用情况:
default_jenkins_disk_usage_bytes
- 文件存储可用空间:
default_jenkins_file_store_available_bytes
- 各Job的磁盘使用情况:
default_jenkins_job_usage_bytes
Grafana的可视化能力让你可以轻松创建磁盘使用趋势图、空间占用Top N Job排行榜等,帮助你及时发现潜在问题。
04 实战演练:Shell脚本监控方案
如果你偏好轻量级解决方案,或者所处的环境不允许安装复杂的监控系统,Shell脚本是一个简单有效的选择。
基础监控脚本
创建一个名为monitor_linux.sh的脚本:
#!/bin/bash
# 采集CPU、内存、磁盘信息
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
MEM_USAGE=$(free -m | awk '/Mem:/ {printf "%.2f%%", $3/$2*100}')
DISK_USAGE=$(df -h / | awk '/\// {print $5}')
# 输出到日志文件
echo "$(date '+%Y-%m-%d %H:%M:%S') - CPU Usage: ${CPU_USAGE}%, Memory Usage: ${MEM_USAGE}, Disk Usage: ${DISK_USAGE}" >> /var/log/jenkins/linux_monitor.log
# 发送邮件告警(需配置Jenkins邮件通知)
if (( $(echo "$DISK_USAGE > 90" | sed 's/%//' | bc -l) )); then
echo "Disk usage on Linux server is over 90%! Current usage: ${DISK_USAGE}" | mail -s "Jenkins Linux Disk Alert" admin@example.com
fi
给脚本添加执行权限:chmod +x /path/to/monitor_linux.sh。
高级磁盘分析脚本
如果你想深入了解哪些文件或目录占用了最多空间,可以使用这个分析脚本:
#!/bin/bash
# 分析Jenkins目录中占用空间最大的子目录
JENKINS_HOME="/var/lib/jenkins"
REPORT_DIR="/tmp/jenkins_disk_report"
DATE=$(date +%Y%m%d_%H%M%S)
echo "=== Jenkins磁盘使用分析报告 ===" > $REPORT_DIR/report_$DATE.txt
echo "生成时间: $(date)" >> $REPORT_DIR/report_$DATE.txt
echo "==================================" >> $REPORT_DIR/report_$DATE.txt
# 分析Jenkins Home下各目录的大小
echo "1. Jenkins Home各目录大小:" >> $REPORT_DIR/report_$DATE.txt
du -h --max-depth=1 $JENKINS_HOME | sort -hr >> $REPORT_DIR/report_$DATE.txt
echo "" >> $REPORT_DIR/report_$DATE.txt
echo "2. 占用空间最大的文件Top 20:" >> $REPORT_DIR/report_$DATE.txt
find $JENKINS_HOME -type f -exec du -h {} + | sort -rh | head -20 >> $REPORT_DIR/report_$DATE.txt
echo "" >> $REPORT_DIR/report_$DATE.txt
echo "3. 构建历史占用空间统计:" >> $REPORT_DIR/report_$DATE.txt
du -h $JENKINS_HOME/jobs/*/builds | sort -hr >> $REPORT_DIR/report_$DATE.txt
# 检查磁盘总体使用情况
OVERALL_DISK=$(df -h $JENKINS_HOME | awk 'NR==2 {print $5 " used: " $3 " / " $2}')
echo "" >> $REPORT_DIR/report_$DATE.txt
echo "4. 总体磁盘使用情况: $OVERALL_DISK" >> $REPORT_DIR/report_$DATE.txt
# 如果总体使用率超过85%,发送警告
USAGE_PERCENT=$(df $JENKINS_HOME | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE_PERCENT -gt 85 ]; then
echo "警告: Jenkins磁盘使用率超过85%!当前使用率: ${USAGE_PERCENT}%" | mail -s "Jenkins磁盘空间警告" -a $REPORT_DIR/report_$DATE.txt admin@example.com
fi
集成到Jenkins
将脚本添加到Jenkins的定期执行任务中:
- 创建一个Freestyle项目
- 在”构建触发器”中设置定时构建,例如
H * * * *(每小时执行一次) - 在”构建”部分添加”Execute shell”步骤,输入脚本路径:
/path/to/monitor_linux.sh
05 防患于未然:主动磁盘空间管理策略
监控只是手段,预防才是关键。以下是几种主动管理磁盘空间的有效策略:
定期清理构建历史
Jenkins的构建历史是磁盘空间的主要占用者之一。合理配置构建保留策略可以显著减少空间占用。
对于频繁执行的Job,可以设置在日志轮转中只保留最近10次构建的历史记录,或者根据时间条件(如保留30天内的构建)自动清理旧记录。
清理工作空间
工作空间文件往往包含大量的源代码、依赖库和构建产物,占用空间巨大。
配置构建后操作,在构建成功后自动清理工作空间,可以立即释放大量磁盘空间。
使用条件触发清理
你可以设置一个专门的清理Job,当磁盘使用率超过特定阈值时自动触发:
#!/bin/bash
# 磁盘使用率阈值(%)
THRESHOLD=80
CURRENT_USAGE=$(df /var/lib/jenkins | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $CURRENT_USAGE -gt $THRESHOLD ]; then
echo "磁盘使用率 ${CURRENT_USAGE}% 超过阈值 ${THRESHOLD}%,执行清理操作..."
# 清理Jenkins临时文件
find /var/lib/jenkins -name "*.tmp" -type f -delete
# 清理旧构建日志(保留最近30天)
find /var/lib/jenkins/jobs -name "builds" -type d -mtime +30 -exec rm -rf {} +
echo "清理完成"
else
echo "磁盘使用率正常:${CURRENT_USAGE}%"
fi
06 企业级方案:Zabbix监控集成
对于大型企业环境,Zabbix提供了一个全面的监控解决方案。
它不仅能监控磁盘空间,还能跟踪整个IT基础设施的健康状态。
Zabbix监控配置步骤
- 安装Metrics插件:在Jenkins中安装Metrics插件,它能够暴露监控指标API,Zabbix通过该API获取数据。
- 配置Zabbix Agent:在Jenkins服务器上安装并配置Zabbix Agent,采集系统指标:
yum install zabbix-agent -y
systemctl enable zabbix-agent
systemctl start zabbix-agent
- 导入Jenkins监控模板:从Zabbix社区下载或创建专门的Jenkins监控模板,并导入到Zabbix服务器中。
- 配置告警规则:在Zabbix中创建触发器,当磁盘空间低于阈值时自动发送告警:
-
- 例如:
{jenkins.server:vfs.fs.size[/var/lib/jenkins,pfree].last()}<10表示当Jenkins目录剩余空间低于10%时触发告警。
- 例如:
- 设置告警通知:配置告警通知方式,如邮件、短信或微信通知,确保管理员能及时收到磁盘空间告警。
07 完整实战:搭建全方位的Jenkins磁盘监控系统
现在,让我们把所有知识点整合起来,搭建一个全方位的监控系统。
系统架构
这个系统包含以下组件:
- 数据采集层:Jenkins自监控+Shell脚本定期收集数据
- 监控告警层:Prometheus + Alertmanager负责指标存储和告警
- 可视化层:Grafana仪表盘展示实时和历史数据
- 备份清理层:定期自动清理和备份关键数据
实施步骤
第一周:基础监控搭建
- 安装必备插件:Disk Usage Plugin、Monitoring Plugin
- 配置基础磁盘使用监控
- 设置Shell脚本定期收集磁盘数据
- 配置邮件告警
第二周:高级监控集成
- 部署Prometheus和Grafana
- 安装并配置Prometheus Jenkins插件
- 创建Grafana磁盘监控仪表盘
- 设置基于Prometheus的告警规则
第三周:自动化清理策略
- 分析各Job的磁盘占用情况
- 根据重要性配置不同的构建保留策略
- 设置定期清理临时文件和工作空间的任务
- 实施归档策略,将旧构建数据迁移到低成本存储
第四周:优化和文档化
- 根据收集的数据优化监控阈值
- 编写操作手册和应急响应流程
- 培训团队成员
- 定期回顾和优化监控策略
应急响应计划
即使有完善的监控,磁盘空间危机仍可能发生。制定明确的应急响应流程至关重要:
- 识别阶段:收到告警后,立即登录服务器确认情况
- 评估阶段:使用分析脚本快速定位占用空间最大的目录或文件
- 处置阶段:根据预设策略清理非关键数据释放空间
- 恢复阶段:确保Jenkins服务恢复正常,构建任务可执行
- 复盘阶段:分析事件根本原因,优化监控和预防策略
磁盘监控本质上是一种平衡艺术——在保留足够历史数据以供审计和排查问题,与维持系统健康运行之间找到最佳平衡点。
当你下次收到磁盘空间告警时,不再需要惊慌失措,而是从容地打开精心设计的监控面板,精准定位问题,执行预定的清理方案,轻松化解危机。
1282

被折叠的 条评论
为什么被折叠?



