Jenkins基础教程(197)Jenkins维护之监控磁盘空间:Jenkins磁盘空间告急?这套“急救方案”请收好!

那一夜,服务器磁盘突然爆满,我才意识到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查询语句,可用于监控磁盘空间:

  1. Jenkins Home目录磁盘使用情况
default_jenkins_disk_usage_bytes
  1. 文件存储可用空间
default_jenkins_file_store_available_bytes
  1. 各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的定期执行任务中:

  1. 创建一个Freestyle项目
  2. 在”构建触发器”中设置定时构建,例如H * * * *(每小时执行一次)
  3. 在”构建”部分添加”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监控配置步骤

  1. 安装Metrics插件:在Jenkins中安装Metrics插件,它能够暴露监控指标API,Zabbix通过该API获取数据。
  2. 配置Zabbix Agent:在Jenkins服务器上安装并配置Zabbix Agent,采集系统指标:
yum install zabbix-agent -y
systemctl enable zabbix-agent
systemctl start zabbix-agent
  1. 导入Jenkins监控模板:从Zabbix社区下载或创建专门的Jenkins监控模板,并导入到Zabbix服务器中。
  2. 配置告警规则:在Zabbix中创建触发器,当磁盘空间低于阈值时自动发送告警:
    • 例如:{jenkins.server:vfs.fs.size[/var/lib/jenkins,pfree].last()}<10表示当Jenkins目录剩余空间低于10%时触发告警。
  1. 设置告警通知:配置告警通知方式,如邮件、短信或微信通知,确保管理员能及时收到磁盘空间告警。

07 完整实战:搭建全方位的Jenkins磁盘监控系统

现在,让我们把所有知识点整合起来,搭建一个全方位的监控系统。

系统架构

这个系统包含以下组件:

  1. 数据采集层:Jenkins自监控+Shell脚本定期收集数据
  2. 监控告警层:Prometheus + Alertmanager负责指标存储和告警
  3. 可视化层:Grafana仪表盘展示实时和历史数据
  4. 备份清理层:定期自动清理和备份关键数据

实施步骤

第一周:基础监控搭建

  1. 安装必备插件:Disk Usage Plugin、Monitoring Plugin
  2. 配置基础磁盘使用监控
  3. 设置Shell脚本定期收集磁盘数据
  4. 配置邮件告警

第二周:高级监控集成

  1. 部署Prometheus和Grafana
  2. 安装并配置Prometheus Jenkins插件
  3. 创建Grafana磁盘监控仪表盘
  4. 设置基于Prometheus的告警规则

第三周:自动化清理策略

  1. 分析各Job的磁盘占用情况
  2. 根据重要性配置不同的构建保留策略
  3. 设置定期清理临时文件和工作空间的任务
  4. 实施归档策略,将旧构建数据迁移到低成本存储

第四周:优化和文档化

  1. 根据收集的数据优化监控阈值
  2. 编写操作手册和应急响应流程
  3. 培训团队成员
  4. 定期回顾和优化监控策略

应急响应计划

即使有完善的监控,磁盘空间危机仍可能发生。制定明确的应急响应流程至关重要:

  1. 识别阶段:收到告警后,立即登录服务器确认情况
  2. 评估阶段:使用分析脚本快速定位占用空间最大的目录或文件
  3. 处置阶段:根据预设策略清理非关键数据释放空间
  4. 恢复阶段:确保Jenkins服务恢复正常,构建任务可执行
  5. 复盘阶段:分析事件根本原因,优化监控和预防策略

磁盘监控本质上是一种平衡艺术——在保留足够历史数据以供审计和排查问题,与维持系统健康运行之间找到最佳平衡点。

当你下次收到磁盘空间告警时,不再需要惊慌失措,而是从容地打开精心设计的监控面板,精准定位问题,执行预定的清理方案,轻松化解危机。

`/opt/app/.jenkins` 是 Jenkins 持续集成工具的默认工作目录,通常包含以下内容: - 构建历史记录(工作空间、构建日志、归档文件) - Jenkins 配置文件 - 插件和更新信息 - 缓存与临时文件 当该目录占用磁盘空间过大时,可以采取以下措施进行清理和维护磁盘健康: ### 1. 清理旧的构建记录 - 登录 Jenkins 管理界面。 - 进入每个项目,点击“删除”旧的构建版本。 - 或者使用脚本批量删除旧构建(例如使用 Jenkins Script Console)。 ### 2. 删除工作空间 - Jenkins 每次构建会生成一个工作空间(workspace)。 - 在 Jenkins 管理界面中,进入对应任务,选择“工作空间” -> “删除工作空间”。 - 或者手动删除 `/opt/app/.jenkins/workspace/<项目名>` 下的内容。 ### 3. 清理缓存和临时文件 - 删除 `/opt/app/.jenkins/cache/` 目录下的缓存文件。 - 删除 `/opt/app/.jenkins/tmp/` 目录下的临时文件。 ### 4. 配置构建保留策略 - 在 Jenkins 项目配置中,设置“保留最近的 XX 个构建”或“保留最近 X 天的构建”。 - 使用插件如 **Log Rotation** 或 **Disk Usage Plugin** 来自动管理磁盘使用。 ### 5. 移动 Jenkins 主目录 - 如果磁盘空间不足,可以考虑将 Jenkins 的主目录迁移到另一个有足够空间的磁盘分区。 ### 6. 定期执行磁盘清理脚本 ```bash # 示例:删除所有构建日志小于10KB的空构建 find /opt/app/.jenkins/jobs/*/builds/ -type f -name 'log' -size -10k -exec rm -rf {} \; ``` ### 7. 使用 Jenkins 插件辅助管理 - **Disk Usage Plugin**:查看各项目磁盘占用情况。 - **Workspace Cleanup Plugin**:在构建前后自动清理工作空间。 - **Build Discarder Plugin**:自动删除旧构建。 --- ### 建议维护策略 - 设置全局构建保留策略。 - 定期执行自动化清理脚本。 - 监控磁盘使用情况,设置报警机制(如使用 `df -h` + 脚本 + 邮件通知)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值