MedGemma-X镜像运维logrotate自动轮转磁盘空间预警脚本编写1. 引言为什么需要自动化运维想象一下你正在使用MedGemma-X分析一批重要的胸部X光片系统突然卡住了。你检查后发现日志文件已经膨胀到几十GB把磁盘空间占满了。或者更糟的是系统运行了几个月后因为日志文件太大导致应用崩溃而你又没有及时发现。这就是为什么我们需要自动化运维工具。MedGemma-X作为一个专业的AI影像诊断工具在持续运行过程中会产生大量的日志数据。这些日志对于排查问题、监控系统健康至关重要但如果管理不当它们也会成为系统的负担。本文将手把手教你为MedGemma-X镜像配置两套自动化运维工具logrotate自动日志轮转- 自动管理日志文件大小和保留周期磁盘空间预警脚本- 在磁盘空间不足时提前预警即使你之前没有运维经验跟着本文的步骤也能轻松搞定这些配置。2. 理解MedGemma-X的日志系统在开始配置之前我们先了解一下MedGemma-X的日志结构。根据提供的技术文档MedGemma-X的主要日志文件位于/root/build/logs/gradio_app.log这个日志文件记录了应用启动和关闭信息用户请求和响应模型推理过程系统错误和警告资源使用情况随着使用时间的增长这个日志文件会越来越大。如果没有管理可能会出现以下问题问题可能的影响解决方案日志文件过大占用大量磁盘空间影响系统性能定期轮转和清理磁盘空间不足应用无法写入新日志可能导致崩溃设置磁盘空间监控历史日志丢失无法追溯过去的问题合理保留历史日志查找困难在大文件中查找特定信息效率低按时间分割日志理解了这些问题我们就可以开始配置解决方案了。3. 配置logrotate自动日志轮转3.1 什么是logrotatelogrotate是Linux系统自带的日志管理工具它可以自动将大日志文件分割成小文件压缩旧的日志文件节省空间删除过期的日志文件在轮转后重新创建日志文件3.2 创建logrotate配置文件首先我们需要为MedGemma-X创建一个专门的logrotate配置文件# 创建配置文件 sudo nano /etc/logrotate.d/medgemma-x然后在文件中添加以下内容/root/build/logs/gradio_app.log { daily # 每天轮转一次 missingok # 如果日志文件不存在不报错 notifempty # 如果日志文件为空不轮转 compress # 压缩旧的日志文件 delaycompress # 延迟压缩方便查看最近的日志 copytruncate # 复制后清空原文件确保应用不中断 create 0644 root root # 创建新日志文件的权限和所有者 dateext # 使用日期作为后缀 dateformat -%Y%m%d # 日期格式-20240123 rotate 30 # 保留30天的日志 maxsize 100M # 日志文件超过100MB立即轮转 postrotate # 如果需要可以在这里添加轮转后执行的命令 # 例如重新加载应用配置 endscript }让我解释一下关键配置项daily每天检查一次是否需要轮转maxsize 100M即使没到一天如果日志超过100MB也会立即轮转rotate 30保留30个旧日志文件大约一个月compress使用gzip压缩旧日志节省约70%空间copytruncate这是最重要的选项它确保在轮转时应用不会中断3.3 测试logrotate配置配置完成后我们先测试一下是否正常工作# 1. 先查看当前日志状态 ls -lh /root/build/logs/ # 2. 手动执行一次logrotate测试模式 sudo logrotate -d /etc/logrotate.d/medgemma-x # 3. 如果测试正常实际执行一次 sudo logrotate -f /etc/logrotate.d/medgemma-x # 4. 检查轮转结果 ls -lh /root/build/logs/你应该能看到类似这样的输出gradio_app.log # 新的空日志文件 gradio_app.log-20240123.gz # 压缩的旧日志3.4 验证自动执行logrotate默认由cron每天自动执行一次。我们可以检查cron配置# 查看logrotate的cron任务 cat /etc/cron.daily/logrotate # 或者查看系统cron ls -la /etc/cron.daily/ | grep logrotate如果需要更频繁的检查比如每小时可以创建自定义的cron任务# 创建每小时检查的cron任务 sudo nano /etc/cron.hourly/medgemma-logrotate添加以下内容#!/bin/bash /usr/sbin/logrotate /etc/logrotate.d/medgemma-x然后给脚本执行权限sudo chmod x /etc/cron.hourly/medgemma-logrotate4. 编写磁盘空间预警脚本4.1 脚本设计思路logrotate解决了日志文件过大的问题但我们还需要监控整个磁盘的使用情况。磁盘空间预警脚本应该定期检查磁盘使用率设置不同级别的预警阈值提供清晰的预警信息支持多种通知方式自动清理临时文件4.2 创建磁盘监控脚本让我们创建一个完整的磁盘空间监控脚本# 创建脚本文件 sudo nano /root/build/scripts/disk_monitor.sh脚本内容如下#!/bin/bash # MedGemma-X 磁盘空间监控脚本 # 作者系统管理员 # 版本1.0 # 最后更新2024-01-23 # 配置参数 THRESHOLD_WARNING80 # 警告阈值80%使用率 THRESHOLD_CRITICAL90 # 严重阈值90%使用率 THRESHOLD_EMERGENCY95 # 紧急阈值95%使用率 LOG_FILE/root/build/logs/disk_monitor.log CHECK_INTERVAL3600 # 检查间隔秒默认1小时 # 磁盘路径根据你的实际情况调整 DISK_PATH/ MEDGEMMA_LOG_PATH/root/build/logs/ MEDGEMMA_CACHE_PATH/root/build/cache/ # 颜色定义用于终端输出 RED\033[0;31m YELLOW\033[1;33m GREEN\033[0;32m BLUE\033[0;34m NC\033[0m # No Color # 日志函数 log_message() { local level$1 local message$2 local timestamp$(date %Y-%m-%d %H:%M:%S) echo [$timestamp] [$level] $message $LOG_FILE # 根据级别输出不同颜色 case $level in EMERGENCY) echo -e ${RED}[$timestamp] [$level] $message${NC} ;; CRITICAL) echo -e ${RED}[$timestamp] [$level] $message${NC} ;; WARNING) echo -e ${YELLOW}[$timestamp] [$level] $message${NC} ;; INFO) echo -e ${GREEN}[$timestamp] [$level] $message${NC} ;; *) echo [$timestamp] [$level] $message ;; esac } # 检查磁盘使用率 check_disk_usage() { local usage$(df -h $DISK_PATH | awk NR2 {print $5} | sed s/%//) local total$(df -h $DISK_PATH | awk NR2 {print $2}) local used$(df -h $DISK_PATH | awk NR2 {print $3}) local available$(df -h $DISK_PATH | awk NR2 {print $4}) echo $usage $total $used $available } # 清理临时文件 clean_temp_files() { log_message INFO 开始清理临时文件... local freed_space0 # 清理Docker临时文件如果使用Docker if command -v docker /dev/null; then log_message INFO 清理Docker系统资源... docker system prune -f /dev/null 21 fi # 清理系统临时文件 log_message INFO 清理/tmp目录... find /tmp -type f -mtime 7 -delete 2/dev/null # 清理MedGemma缓存谨慎操作 if [ -d $MEDGEMMA_CACHE_PATH ]; then log_message INFO 检查MedGemma缓存目录... # 这里可以根据需要添加特定的清理逻辑 # 例如find $MEDGEMMA_CACHE_PATH -name *.tmp -mtime 1 -delete fi # 清理日志备份保留最近7天 if [ -d $MEDGEMMA_LOG_PATH ]; then log_message INFO 清理旧日志文件... find $MEDGEMMA_LOG_PATH -name *.log.* -mtime 7 -delete 2/dev/null find $MEDGEMMA_LOG_PATH -name *.gz -mtime 30 -delete 2/dev/null fi log_message INFO 临时文件清理完成 } # 发送预警通知示例函数需要根据实际情况实现 send_alert() { local level$1 local message$2 local usage$3 # 这里可以实现多种通知方式 # 1. 发送邮件 # 2. 发送Slack/钉钉消息 # 3. 调用Webhook # 4. 写入系统日志 # 示例写入系统日志 logger -t MedGemma-DiskMonitor [$level] $message - 当前使用率: $usage% # 示例在终端显示实际使用时可以注释掉 log_message $level 预警通知: $message # 如果需要邮件通知可以这样配置 # echo $message | mail -s MedGemma磁盘空间预警 [$level] adminexample.com } # 主监控循环 monitor_loop() { log_message INFO 启动磁盘空间监控服务 log_message INFO 检查间隔: $CHECK_INTERVAL 秒 log_message INFO 监控路径: $DISK_PATH while true; do # 检查磁盘使用率 read usage total used available $(check_disk_usage) # 记录常规信息每天记录一次 current_hour$(date %H) if [ $current_hour 00 ]; then log_message INFO 磁盘状态报告 - 总量: $total, 已用: $used, 可用: $available, 使用率: $usage% fi # 检查阈值并触发相应操作 if [ $usage -ge $THRESHOLD_EMERGENCY ]; then # 紧急情况使用率 95% message磁盘空间紧急告警使用率已达 ${usage}%可用空间仅剩 ${available}。系统可能随时崩溃请立即处理 send_alert EMERGENCY $message $usage clean_temp_files # 自动清理临时文件 elif [ $usage -ge $THRESHOLD_CRITICAL ]; then # 严重情况使用率 90% message磁盘空间严重不足使用率已达 ${usage}%可用空间 ${available}。建议立即清理。 send_alert CRITICAL $message $usage elif [ $usage -ge $THRESHOLD_WARNING ]; then # 警告情况使用率 80% message磁盘空间警告使用率已达 ${usage}%可用空间 ${available}。请注意监控。 send_alert WARNING $message $usage fi # 等待下一次检查 sleep $CHECK_INTERVAL done } # 生成磁盘使用报告 generate_report() { log_message INFO 生成磁盘使用详细报告... echo echo MedGemma-X 磁盘空间使用报告 echo 生成时间: $(date) echo echo # 总体磁盘使用情况 echo 【总体磁盘使用情况】 df -h $DISK_PATH echo # MedGemma相关目录大小 echo 【MedGemma-X 相关目录大小】 echo 日志目录 ($MEDGEMMA_LOG_PATH): du -sh $MEDGEMMA_LOG_PATH 2/dev/null || echo 目录不存在 echo if [ -d $MEDGEMMA_CACHE_PATH ]; then echo 缓存目录 ($MEDGEMMA_CACHE_PATH): du -sh $MEDGEMMA_CACHE_PATH echo echo 缓存目录详细内容: find $MEDGEMMA_CACHE_PATH -type f -exec du -h {} 2/dev/null | sort -hr | head -10 echo fi # 系统大文件查找 echo 【系统大文件前10名】 find / -type f -size 100M 2/dev/null | head -10 echo # Docker磁盘使用如果安装 if command -v docker /dev/null; then echo 【Docker磁盘使用】 docker system df echo fi echo echo 报告结束 } # 脚本主函数 main() { # 创建日志目录如果不存在 mkdir -p $(dirname $LOG_FILE) # 解析命令行参数 case $1 in start) log_message INFO 启动磁盘监控服务... # 以后台方式运行 nohup bash $0 daemon /dev/null 21 echo 监控服务已启动PID: $! ;; stop) log_message INFO 停止磁盘监控服务... pkill -f disk_monitor.sh daemon echo 监控服务已停止 ;; status) if pgrep -f disk_monitor.sh daemon /dev/null; then echo 监控服务正在运行 ps aux | grep disk_monitor.sh | grep -v grep else echo 监控服务未运行 fi ;; report) generate_report ;; daemon) # 守护进程模式 monitor_loop ;; test) # 测试模式 echo 测试磁盘监控脚本... CHECK_INTERVAL10 # 测试时缩短间隔 monitor_loop ;; *) echo 使用方法: $0 {start|stop|status|report|test} echo echo 命令说明: echo start 启动监控服务 echo stop 停止监控服务 echo status 查看服务状态 echo report 生成磁盘使用报告 echo test 测试模式运行 exit 1 ;; esac } # 运行主函数 main $4.3 配置脚本权限和测试创建完脚本后我们需要配置权限并测试# 1. 给脚本执行权限 sudo chmod x /root/build/scripts/disk_monitor.sh # 2. 创建必要的目录 sudo mkdir -p /root/build/logs/ # 3. 测试脚本功能 # 生成报告 sudo /root/build/scripts/disk_monitor.sh report # 测试模式运行CtrlC停止 sudo /root/build/scripts/disk_monitor.sh test # 4. 启动监控服务 sudo /root/build/scripts/disk_monitor.sh start # 5. 检查服务状态 sudo /root/build/scripts/disk_monitor.sh status # 6. 查看监控日志 tail -f /root/build/logs/disk_monitor.log4.4 配置开机自启动为了让监控脚本在系统重启后自动运行我们可以创建systemd服务# 创建systemd服务文件 sudo nano /etc/systemd/system/medgemma-disk-monitor.service添加以下内容[Unit] DescriptionMedGemma-X Disk Space Monitor Afternetwork.target Wantsnetwork.target [Service] Typesimple Userroot ExecStart/root/build/scripts/disk_monitor.sh start ExecStop/root/build/scripts/disk_monitor.sh stop Restartalways RestartSec10 [Install] WantedBymulti-user.target然后启用服务# 重新加载systemd配置 sudo systemctl daemon-reload # 启用开机自启动 sudo systemctl enable medgemma-disk-monitor # 启动服务 sudo systemctl start medgemma-disk-monitor # 检查服务状态 sudo systemctl status medgemma-disk-monitor5. 高级配置与优化5.1 配置邮件通知如果你希望收到磁盘空间预警的邮件通知可以配置邮件功能首先安装邮件发送工具# 安装mailutilsUbuntu/Debian sudo apt-get install mailutils -y # 或者安装sendmailCentOS/RHEL sudo yum install sendmail -y然后在disk_monitor.sh脚本的send_alert函数中添加邮件发送代码send_alert() { local level$1 local message$2 local usage$3 # 邮件通知 local subject[MedGemma-X 磁盘预警] $level - 使用率: $usage% local recipientyour-emailexample.com # 修改为你的邮箱 echo $message | mail -s $subject $recipient # 原有的日志记录 logger -t MedGemma-DiskMonitor [$level] $message - 当前使用率: $usage% log_message $level 预警通知已发送到邮箱 }5.2 集成到现有监控系统如果你已经有监控系统如Prometheus、Zabbix等可以将磁盘监控集成进去# 示例创建Prometheus exporter sudo nano /root/build/scripts/disk_exporter.sh#!/bin/bash # Prometheus格式的磁盘指标导出 while true; do # 获取磁盘使用率 usage$(df -h / | awk NR2 {print $5} | sed s/%//) total$(df -h / | awk NR2 {print $2} | sed s/G//) used$(df -h / | awk NR2 {print $3} | sed s/G//) # 输出Prometheus格式的指标 cat EOF # HELP medgemma_disk_usage_percent Disk usage percentage # TYPE medgemma_disk_usage_percent gauge medgemma_disk_usage_percent $usage # HELP medgemma_disk_total_gb Total disk space in GB # TYPE medgemma_disk_total_gb gauge medgemma_disk_total_gb $total # HELP medgemma_disk_used_gb Used disk space in GB # TYPE medgemma_disk_used_gb gauge medgemma_disk_used_gb $used EOF sleep 15 done5.3 配置日志分析除了监控磁盘空间我们还可以分析日志内容提前发现问题# 创建日志分析脚本 sudo nano /root/build/scripts/log_analyzer.sh#!/bin/bash # MedGemma-X 日志分析脚本 LOG_FILE/root/build/logs/gradio_app.log REPORT_FILE/root/build/logs/analysis_report_$(date %Y%m%d).txt analyze_logs() { echo MedGemma-X 日志分析报告 $REPORT_FILE echo 生成时间: $(date) $REPORT_FILE echo $REPORT_FILE # 分析错误和警告 echo 【错误统计】 $REPORT_FILE grep -i error\|failed\|exception $LOG_FILE | tail -20 $REPORT_FILE echo $REPORT_FILE echo 【警告统计】 $REPORT_FILE grep -i warning $LOG_FILE | tail -10 $REPORT_FILE echo $REPORT_FILE # 分析请求频率 echo 【请求统计】 $REPORT_FILE echo 最近100条请求的时间分布 $REPORT_FILE grep Request received $LOG_FILE | tail -100 | awk {print $1, $2} | uniq -c $REPORT_FILE echo $REPORT_FILE # 分析响应时间 echo 【性能统计】 $REPORT_FILE grep Request completed $LOG_FILE | tail -20 | awk -F in {print $2} | sort -n $REPORT_FILE echo 分析完成报告保存至: $REPORT_FILE } # 每天凌晨执行分析 if [ $1 daily ]; then analyze_logs # 可以在这里添加邮件发送功能 # mail -s MedGemma日志分析报告 adminexample.com $REPORT_FILE fi6. 总结通过本文的配置我们为MedGemma-X镜像建立了一套完整的自动化运维体系6.1 已实现的自动化功能日志自动管理每日自动轮转日志文件自动压缩旧日志节省空间保留30天历史日志供审计单个日志文件不超过100MB磁盘空间智能监控实时监控磁盘使用率三级预警机制警告/严重/紧急自动清理临时文件支持邮件通知开机自启动运维便利性提升一键生成磁盘使用报告完整的服务管理命令详细的日志记录易于扩展的架构6.2 日常运维建议定期检查每周查看一次磁盘监控日志报告分析每月生成一次完整的磁盘使用报告容量规划根据使用情况提前规划磁盘扩容备份策略重要日志定期备份到其他存储6.3 故障排查快速指南如果遇到磁盘相关问题可以按以下步骤排查# 1. 检查当前磁盘状态 df -h / # 2. 查看监控服务状态 sudo systemctl status medgemma-disk-monitor # 3. 查看监控日志 tail -f /root/build/logs/disk_monitor.log # 4. 手动清理空间 sudo /root/build/scripts/disk_monitor.sh report # 根据报告清理不需要的文件 # 5. 重启监控服务 sudo systemctl restart medgemma-disk-monitor6.4 后续优化方向根据实际使用情况你还可以考虑以下优化集成到现有监控平台将指标推送到Prometheus、Grafana等云服务集成如果使用云服务器可以集成云监控服务自动化扩容当磁盘空间不足时自动扩容云环境日志分析增强使用ELK栈进行更深入的日志分析多节点监控如果部署了多个MedGemma实例可以集中监控通过这套自动化运维方案你可以确保MedGemma-X系统长期稳定运行专注于医疗影像分析的核心工作而不用担心运维问题。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
MedGemma-X镜像运维:logrotate自动轮转+磁盘空间预警脚本编写
MedGemma-X镜像运维logrotate自动轮转磁盘空间预警脚本编写1. 引言为什么需要自动化运维想象一下你正在使用MedGemma-X分析一批重要的胸部X光片系统突然卡住了。你检查后发现日志文件已经膨胀到几十GB把磁盘空间占满了。或者更糟的是系统运行了几个月后因为日志文件太大导致应用崩溃而你又没有及时发现。这就是为什么我们需要自动化运维工具。MedGemma-X作为一个专业的AI影像诊断工具在持续运行过程中会产生大量的日志数据。这些日志对于排查问题、监控系统健康至关重要但如果管理不当它们也会成为系统的负担。本文将手把手教你为MedGemma-X镜像配置两套自动化运维工具logrotate自动日志轮转- 自动管理日志文件大小和保留周期磁盘空间预警脚本- 在磁盘空间不足时提前预警即使你之前没有运维经验跟着本文的步骤也能轻松搞定这些配置。2. 理解MedGemma-X的日志系统在开始配置之前我们先了解一下MedGemma-X的日志结构。根据提供的技术文档MedGemma-X的主要日志文件位于/root/build/logs/gradio_app.log这个日志文件记录了应用启动和关闭信息用户请求和响应模型推理过程系统错误和警告资源使用情况随着使用时间的增长这个日志文件会越来越大。如果没有管理可能会出现以下问题问题可能的影响解决方案日志文件过大占用大量磁盘空间影响系统性能定期轮转和清理磁盘空间不足应用无法写入新日志可能导致崩溃设置磁盘空间监控历史日志丢失无法追溯过去的问题合理保留历史日志查找困难在大文件中查找特定信息效率低按时间分割日志理解了这些问题我们就可以开始配置解决方案了。3. 配置logrotate自动日志轮转3.1 什么是logrotatelogrotate是Linux系统自带的日志管理工具它可以自动将大日志文件分割成小文件压缩旧的日志文件节省空间删除过期的日志文件在轮转后重新创建日志文件3.2 创建logrotate配置文件首先我们需要为MedGemma-X创建一个专门的logrotate配置文件# 创建配置文件 sudo nano /etc/logrotate.d/medgemma-x然后在文件中添加以下内容/root/build/logs/gradio_app.log { daily # 每天轮转一次 missingok # 如果日志文件不存在不报错 notifempty # 如果日志文件为空不轮转 compress # 压缩旧的日志文件 delaycompress # 延迟压缩方便查看最近的日志 copytruncate # 复制后清空原文件确保应用不中断 create 0644 root root # 创建新日志文件的权限和所有者 dateext # 使用日期作为后缀 dateformat -%Y%m%d # 日期格式-20240123 rotate 30 # 保留30天的日志 maxsize 100M # 日志文件超过100MB立即轮转 postrotate # 如果需要可以在这里添加轮转后执行的命令 # 例如重新加载应用配置 endscript }让我解释一下关键配置项daily每天检查一次是否需要轮转maxsize 100M即使没到一天如果日志超过100MB也会立即轮转rotate 30保留30个旧日志文件大约一个月compress使用gzip压缩旧日志节省约70%空间copytruncate这是最重要的选项它确保在轮转时应用不会中断3.3 测试logrotate配置配置完成后我们先测试一下是否正常工作# 1. 先查看当前日志状态 ls -lh /root/build/logs/ # 2. 手动执行一次logrotate测试模式 sudo logrotate -d /etc/logrotate.d/medgemma-x # 3. 如果测试正常实际执行一次 sudo logrotate -f /etc/logrotate.d/medgemma-x # 4. 检查轮转结果 ls -lh /root/build/logs/你应该能看到类似这样的输出gradio_app.log # 新的空日志文件 gradio_app.log-20240123.gz # 压缩的旧日志3.4 验证自动执行logrotate默认由cron每天自动执行一次。我们可以检查cron配置# 查看logrotate的cron任务 cat /etc/cron.daily/logrotate # 或者查看系统cron ls -la /etc/cron.daily/ | grep logrotate如果需要更频繁的检查比如每小时可以创建自定义的cron任务# 创建每小时检查的cron任务 sudo nano /etc/cron.hourly/medgemma-logrotate添加以下内容#!/bin/bash /usr/sbin/logrotate /etc/logrotate.d/medgemma-x然后给脚本执行权限sudo chmod x /etc/cron.hourly/medgemma-logrotate4. 编写磁盘空间预警脚本4.1 脚本设计思路logrotate解决了日志文件过大的问题但我们还需要监控整个磁盘的使用情况。磁盘空间预警脚本应该定期检查磁盘使用率设置不同级别的预警阈值提供清晰的预警信息支持多种通知方式自动清理临时文件4.2 创建磁盘监控脚本让我们创建一个完整的磁盘空间监控脚本# 创建脚本文件 sudo nano /root/build/scripts/disk_monitor.sh脚本内容如下#!/bin/bash # MedGemma-X 磁盘空间监控脚本 # 作者系统管理员 # 版本1.0 # 最后更新2024-01-23 # 配置参数 THRESHOLD_WARNING80 # 警告阈值80%使用率 THRESHOLD_CRITICAL90 # 严重阈值90%使用率 THRESHOLD_EMERGENCY95 # 紧急阈值95%使用率 LOG_FILE/root/build/logs/disk_monitor.log CHECK_INTERVAL3600 # 检查间隔秒默认1小时 # 磁盘路径根据你的实际情况调整 DISK_PATH/ MEDGEMMA_LOG_PATH/root/build/logs/ MEDGEMMA_CACHE_PATH/root/build/cache/ # 颜色定义用于终端输出 RED\033[0;31m YELLOW\033[1;33m GREEN\033[0;32m BLUE\033[0;34m NC\033[0m # No Color # 日志函数 log_message() { local level$1 local message$2 local timestamp$(date %Y-%m-%d %H:%M:%S) echo [$timestamp] [$level] $message $LOG_FILE # 根据级别输出不同颜色 case $level in EMERGENCY) echo -e ${RED}[$timestamp] [$level] $message${NC} ;; CRITICAL) echo -e ${RED}[$timestamp] [$level] $message${NC} ;; WARNING) echo -e ${YELLOW}[$timestamp] [$level] $message${NC} ;; INFO) echo -e ${GREEN}[$timestamp] [$level] $message${NC} ;; *) echo [$timestamp] [$level] $message ;; esac } # 检查磁盘使用率 check_disk_usage() { local usage$(df -h $DISK_PATH | awk NR2 {print $5} | sed s/%//) local total$(df -h $DISK_PATH | awk NR2 {print $2}) local used$(df -h $DISK_PATH | awk NR2 {print $3}) local available$(df -h $DISK_PATH | awk NR2 {print $4}) echo $usage $total $used $available } # 清理临时文件 clean_temp_files() { log_message INFO 开始清理临时文件... local freed_space0 # 清理Docker临时文件如果使用Docker if command -v docker /dev/null; then log_message INFO 清理Docker系统资源... docker system prune -f /dev/null 21 fi # 清理系统临时文件 log_message INFO 清理/tmp目录... find /tmp -type f -mtime 7 -delete 2/dev/null # 清理MedGemma缓存谨慎操作 if [ -d $MEDGEMMA_CACHE_PATH ]; then log_message INFO 检查MedGemma缓存目录... # 这里可以根据需要添加特定的清理逻辑 # 例如find $MEDGEMMA_CACHE_PATH -name *.tmp -mtime 1 -delete fi # 清理日志备份保留最近7天 if [ -d $MEDGEMMA_LOG_PATH ]; then log_message INFO 清理旧日志文件... find $MEDGEMMA_LOG_PATH -name *.log.* -mtime 7 -delete 2/dev/null find $MEDGEMMA_LOG_PATH -name *.gz -mtime 30 -delete 2/dev/null fi log_message INFO 临时文件清理完成 } # 发送预警通知示例函数需要根据实际情况实现 send_alert() { local level$1 local message$2 local usage$3 # 这里可以实现多种通知方式 # 1. 发送邮件 # 2. 发送Slack/钉钉消息 # 3. 调用Webhook # 4. 写入系统日志 # 示例写入系统日志 logger -t MedGemma-DiskMonitor [$level] $message - 当前使用率: $usage% # 示例在终端显示实际使用时可以注释掉 log_message $level 预警通知: $message # 如果需要邮件通知可以这样配置 # echo $message | mail -s MedGemma磁盘空间预警 [$level] adminexample.com } # 主监控循环 monitor_loop() { log_message INFO 启动磁盘空间监控服务 log_message INFO 检查间隔: $CHECK_INTERVAL 秒 log_message INFO 监控路径: $DISK_PATH while true; do # 检查磁盘使用率 read usage total used available $(check_disk_usage) # 记录常规信息每天记录一次 current_hour$(date %H) if [ $current_hour 00 ]; then log_message INFO 磁盘状态报告 - 总量: $total, 已用: $used, 可用: $available, 使用率: $usage% fi # 检查阈值并触发相应操作 if [ $usage -ge $THRESHOLD_EMERGENCY ]; then # 紧急情况使用率 95% message磁盘空间紧急告警使用率已达 ${usage}%可用空间仅剩 ${available}。系统可能随时崩溃请立即处理 send_alert EMERGENCY $message $usage clean_temp_files # 自动清理临时文件 elif [ $usage -ge $THRESHOLD_CRITICAL ]; then # 严重情况使用率 90% message磁盘空间严重不足使用率已达 ${usage}%可用空间 ${available}。建议立即清理。 send_alert CRITICAL $message $usage elif [ $usage -ge $THRESHOLD_WARNING ]; then # 警告情况使用率 80% message磁盘空间警告使用率已达 ${usage}%可用空间 ${available}。请注意监控。 send_alert WARNING $message $usage fi # 等待下一次检查 sleep $CHECK_INTERVAL done } # 生成磁盘使用报告 generate_report() { log_message INFO 生成磁盘使用详细报告... echo echo MedGemma-X 磁盘空间使用报告 echo 生成时间: $(date) echo echo # 总体磁盘使用情况 echo 【总体磁盘使用情况】 df -h $DISK_PATH echo # MedGemma相关目录大小 echo 【MedGemma-X 相关目录大小】 echo 日志目录 ($MEDGEMMA_LOG_PATH): du -sh $MEDGEMMA_LOG_PATH 2/dev/null || echo 目录不存在 echo if [ -d $MEDGEMMA_CACHE_PATH ]; then echo 缓存目录 ($MEDGEMMA_CACHE_PATH): du -sh $MEDGEMMA_CACHE_PATH echo echo 缓存目录详细内容: find $MEDGEMMA_CACHE_PATH -type f -exec du -h {} 2/dev/null | sort -hr | head -10 echo fi # 系统大文件查找 echo 【系统大文件前10名】 find / -type f -size 100M 2/dev/null | head -10 echo # Docker磁盘使用如果安装 if command -v docker /dev/null; then echo 【Docker磁盘使用】 docker system df echo fi echo echo 报告结束 } # 脚本主函数 main() { # 创建日志目录如果不存在 mkdir -p $(dirname $LOG_FILE) # 解析命令行参数 case $1 in start) log_message INFO 启动磁盘监控服务... # 以后台方式运行 nohup bash $0 daemon /dev/null 21 echo 监控服务已启动PID: $! ;; stop) log_message INFO 停止磁盘监控服务... pkill -f disk_monitor.sh daemon echo 监控服务已停止 ;; status) if pgrep -f disk_monitor.sh daemon /dev/null; then echo 监控服务正在运行 ps aux | grep disk_monitor.sh | grep -v grep else echo 监控服务未运行 fi ;; report) generate_report ;; daemon) # 守护进程模式 monitor_loop ;; test) # 测试模式 echo 测试磁盘监控脚本... CHECK_INTERVAL10 # 测试时缩短间隔 monitor_loop ;; *) echo 使用方法: $0 {start|stop|status|report|test} echo echo 命令说明: echo start 启动监控服务 echo stop 停止监控服务 echo status 查看服务状态 echo report 生成磁盘使用报告 echo test 测试模式运行 exit 1 ;; esac } # 运行主函数 main $4.3 配置脚本权限和测试创建完脚本后我们需要配置权限并测试# 1. 给脚本执行权限 sudo chmod x /root/build/scripts/disk_monitor.sh # 2. 创建必要的目录 sudo mkdir -p /root/build/logs/ # 3. 测试脚本功能 # 生成报告 sudo /root/build/scripts/disk_monitor.sh report # 测试模式运行CtrlC停止 sudo /root/build/scripts/disk_monitor.sh test # 4. 启动监控服务 sudo /root/build/scripts/disk_monitor.sh start # 5. 检查服务状态 sudo /root/build/scripts/disk_monitor.sh status # 6. 查看监控日志 tail -f /root/build/logs/disk_monitor.log4.4 配置开机自启动为了让监控脚本在系统重启后自动运行我们可以创建systemd服务# 创建systemd服务文件 sudo nano /etc/systemd/system/medgemma-disk-monitor.service添加以下内容[Unit] DescriptionMedGemma-X Disk Space Monitor Afternetwork.target Wantsnetwork.target [Service] Typesimple Userroot ExecStart/root/build/scripts/disk_monitor.sh start ExecStop/root/build/scripts/disk_monitor.sh stop Restartalways RestartSec10 [Install] WantedBymulti-user.target然后启用服务# 重新加载systemd配置 sudo systemctl daemon-reload # 启用开机自启动 sudo systemctl enable medgemma-disk-monitor # 启动服务 sudo systemctl start medgemma-disk-monitor # 检查服务状态 sudo systemctl status medgemma-disk-monitor5. 高级配置与优化5.1 配置邮件通知如果你希望收到磁盘空间预警的邮件通知可以配置邮件功能首先安装邮件发送工具# 安装mailutilsUbuntu/Debian sudo apt-get install mailutils -y # 或者安装sendmailCentOS/RHEL sudo yum install sendmail -y然后在disk_monitor.sh脚本的send_alert函数中添加邮件发送代码send_alert() { local level$1 local message$2 local usage$3 # 邮件通知 local subject[MedGemma-X 磁盘预警] $level - 使用率: $usage% local recipientyour-emailexample.com # 修改为你的邮箱 echo $message | mail -s $subject $recipient # 原有的日志记录 logger -t MedGemma-DiskMonitor [$level] $message - 当前使用率: $usage% log_message $level 预警通知已发送到邮箱 }5.2 集成到现有监控系统如果你已经有监控系统如Prometheus、Zabbix等可以将磁盘监控集成进去# 示例创建Prometheus exporter sudo nano /root/build/scripts/disk_exporter.sh#!/bin/bash # Prometheus格式的磁盘指标导出 while true; do # 获取磁盘使用率 usage$(df -h / | awk NR2 {print $5} | sed s/%//) total$(df -h / | awk NR2 {print $2} | sed s/G//) used$(df -h / | awk NR2 {print $3} | sed s/G//) # 输出Prometheus格式的指标 cat EOF # HELP medgemma_disk_usage_percent Disk usage percentage # TYPE medgemma_disk_usage_percent gauge medgemma_disk_usage_percent $usage # HELP medgemma_disk_total_gb Total disk space in GB # TYPE medgemma_disk_total_gb gauge medgemma_disk_total_gb $total # HELP medgemma_disk_used_gb Used disk space in GB # TYPE medgemma_disk_used_gb gauge medgemma_disk_used_gb $used EOF sleep 15 done5.3 配置日志分析除了监控磁盘空间我们还可以分析日志内容提前发现问题# 创建日志分析脚本 sudo nano /root/build/scripts/log_analyzer.sh#!/bin/bash # MedGemma-X 日志分析脚本 LOG_FILE/root/build/logs/gradio_app.log REPORT_FILE/root/build/logs/analysis_report_$(date %Y%m%d).txt analyze_logs() { echo MedGemma-X 日志分析报告 $REPORT_FILE echo 生成时间: $(date) $REPORT_FILE echo $REPORT_FILE # 分析错误和警告 echo 【错误统计】 $REPORT_FILE grep -i error\|failed\|exception $LOG_FILE | tail -20 $REPORT_FILE echo $REPORT_FILE echo 【警告统计】 $REPORT_FILE grep -i warning $LOG_FILE | tail -10 $REPORT_FILE echo $REPORT_FILE # 分析请求频率 echo 【请求统计】 $REPORT_FILE echo 最近100条请求的时间分布 $REPORT_FILE grep Request received $LOG_FILE | tail -100 | awk {print $1, $2} | uniq -c $REPORT_FILE echo $REPORT_FILE # 分析响应时间 echo 【性能统计】 $REPORT_FILE grep Request completed $LOG_FILE | tail -20 | awk -F in {print $2} | sort -n $REPORT_FILE echo 分析完成报告保存至: $REPORT_FILE } # 每天凌晨执行分析 if [ $1 daily ]; then analyze_logs # 可以在这里添加邮件发送功能 # mail -s MedGemma日志分析报告 adminexample.com $REPORT_FILE fi6. 总结通过本文的配置我们为MedGemma-X镜像建立了一套完整的自动化运维体系6.1 已实现的自动化功能日志自动管理每日自动轮转日志文件自动压缩旧日志节省空间保留30天历史日志供审计单个日志文件不超过100MB磁盘空间智能监控实时监控磁盘使用率三级预警机制警告/严重/紧急自动清理临时文件支持邮件通知开机自启动运维便利性提升一键生成磁盘使用报告完整的服务管理命令详细的日志记录易于扩展的架构6.2 日常运维建议定期检查每周查看一次磁盘监控日志报告分析每月生成一次完整的磁盘使用报告容量规划根据使用情况提前规划磁盘扩容备份策略重要日志定期备份到其他存储6.3 故障排查快速指南如果遇到磁盘相关问题可以按以下步骤排查# 1. 检查当前磁盘状态 df -h / # 2. 查看监控服务状态 sudo systemctl status medgemma-disk-monitor # 3. 查看监控日志 tail -f /root/build/logs/disk_monitor.log # 4. 手动清理空间 sudo /root/build/scripts/disk_monitor.sh report # 根据报告清理不需要的文件 # 5. 重启监控服务 sudo systemctl restart medgemma-disk-monitor6.4 后续优化方向根据实际使用情况你还可以考虑以下优化集成到现有监控平台将指标推送到Prometheus、Grafana等云服务集成如果使用云服务器可以集成云监控服务自动化扩容当磁盘空间不足时自动扩容云环境日志分析增强使用ELK栈进行更深入的日志分析多节点监控如果部署了多个MedGemma实例可以集中监控通过这套自动化运维方案你可以确保MedGemma-X系统长期稳定运行专注于医疗影像分析的核心工作而不用担心运维问题。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。