DeOldify图像上色服务监控教程日志分析健康检查自动恢复小白友好1. 为什么需要监控图像上色服务当你运行DeOldify图像上色服务时可能会遇到各种意外情况服务突然崩溃、处理速度变慢、内存不足导致图片无法处理等。这些问题如果不及时发现和处理会直接影响用户体验。想象一下这样的场景用户上传了一张珍贵的黑白老照片等待上色结果时却遇到服务无响应。没有监控系统你可能要等到用户投诉才知道出了问题。而完善的监控可以让你实时了解服务运行状态快速发现并解决问题预防潜在风险自动恢复崩溃的服务本文将手把手教你搭建一套完整的监控系统包含日志分析、健康检查和自动恢复三大核心功能即使没有运维经验也能轻松上手。2. 搭建日志系统2.1 配置基础日志首先我们需要让服务记录详细的运行日志。修改app.py文件添加日志配置import logging from logging.handlers import RotatingFileHandler # 配置日志 def setup_logging(): # 创建日志目录 log_dir Path(logs) log_dir.mkdir(exist_okTrue) # 设置日志格式 log_format %(asctime)s - %(levelname)s - %(message)s # 主日志文件记录所有信息 main_handler RotatingFileHandler( log_dir / service.log, maxBytes5*1024*1024, # 5MB backupCount3 ) main_handler.setLevel(logging.INFO) main_handler.setFormatter(logging.Formatter(log_format)) # 错误日志文件只记录错误 error_handler RotatingFileHandler( log_dir / error.log, maxBytes2*1024*1024, backupCount1 ) error_handler.setLevel(logging.ERROR) error_handler.setFormatter(logging.Formatter(log_format)) # 控制台输出 console_handler logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter(logging.Formatter(log_format)) # 应用配置 logging.basicConfig( levellogging.INFO, handlers[main_handler, error_handler, console_handler] ) # 在服务启动时调用 setup_logging() logger logging.getLogger(__name__)2.2 关键位置添加日志记录在服务的关键位置添加日志记录帮助我们了解运行情况app.route(/colorize, methods[POST]) def colorize_image(): try: logger.info(收到图片上色请求) # 检查文件大小 if file not in request.files: logger.warning(未接收到文件) return jsonify({error: 未上传文件}), 400 file request.files[file] if file.filename : logger.warning(上传文件名为空) return jsonify({error: 未选择文件}), 400 # 记录内存使用情况 import psutil mem psutil.virtual_memory() logger.info(f当前内存使用: {mem.percent}%) # 处理图片 logger.info(开始处理图片...) result colorize_image_file(file) logger.info(图片处理完成) return result except Exception as e: logger.error(f图片处理失败: {str(e)}, exc_infoTrue) return jsonify({error: 处理失败}), 5002.3 实用的日志分析命令有了日志后我们可以使用这些简单命令分析服务状态# 实时查看最新日志 tail -f logs/service.log # 查看错误日志 cat logs/error.log # 统计每小时处理的图片数量 grep 收到图片上色请求 logs/service.log | awk {print $1} | cut -d: -f1,2 | uniq -c # 查找最常见的错误 grep ERROR logs/error.log | awk -F- {print $NF} | sort | uniq -c | sort -nr # 监控内存使用趋势 grep 当前内存使用 logs/service.log | tail -203. 实现健康检查3.1 添加健康检查接口在app.py中添加一个简单的健康检查接口app.route(/health) def health_check(): 健康检查接口 status { status: healthy, timestamp: datetime.now().isoformat(), details: { model_loaded: hasattr(app, colorization_pipeline), memory_usage: psutil.virtual_memory().percent, disk_space: psutil.disk_usage(/).percent } } # 如果内存或磁盘使用过高标记为不健康 if status[details][memory_usage] 90 or status[details][disk_space] 90: status[status] unhealthy return jsonify(status)3.2 创建健康检查脚本新建一个脚本health_check.sh定期检查服务状态#!/bin/bash # health_check.sh # 健康检查URL HEALTH_URLhttp://localhost:7860/health # 日志文件 LOG_FILElogs/health.log # 执行健康检查 response$(curl -s $HEALTH_URL) status$(echo $response | jq -r .status) # 记录结果 echo $(date) - $response $LOG_FILE # 如果不健康尝试重启 if [ $status ! healthy ]; then echo $(date) - 服务不健康尝试重启... $LOG_FILE supervisorctl restart deoldify fi3.3 设置定时检查使用crontab设置每5分钟检查一次# 编辑crontab crontab -e # 添加以下行 */5 * * * * /bin/bash /path/to/health_check.sh4. 配置自动恢复4.1 使用Supervisor管理服务Supervisor可以监控服务进程崩溃时自动重启。安装并配置# 安装Supervisor sudo apt-get install supervisor创建配置文件/etc/supervisor/conf.d/deoldify.conf[program:deoldify] directory/path/to/your/service command/usr/bin/python3 app.py useryour_username autostarttrue autorestarttrue startsecs10 startretries3 stopwaitsecs30 stdout_logfile/path/to/logs/supervisor.log stdout_logfile_maxbytes5MB stdout_logfile_backups2 stderr_logfile/path/to/logs/supervisor_error.log stderr_logfile_maxbytes2MB stderr_logfile_backups1启动Supervisor并启用配置sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start deoldify4.2 智能重启策略为了避免频繁重启导致问题恶化我们可以改进重启脚本#!/bin/bash # smart_restart.sh LOG_FILElogs/restart.log MAX_RESTARTS3 # 最大重启次数 RESTART_WINDOW3600 # 1小时(秒) # 检查最近重启次数 recent_restarts$(grep 尝试重启 logs/health.log | \ awk -v now$(date %s) -v window$RESTART_WINDOW \ $1 (now - window) {count} END {print count}) if [ $recent_restarts -ge $MAX_RESTARTS ]; then echo $(date) - 重启过于频繁暂停自动重启 $LOG_FILE exit 1 fi # 检查错误类型 last_error$(tail -n 50 logs/error.log | grep -i error\|exception | tail -n 1) # 如果是内存问题先清理 if echo $last_error | grep -q memory\|Memory; then echo $(date) - 检测到内存问题先清理内存 $LOG_FILE sync echo 1 /proc/sys/vm/drop_caches sleep 5 fi # 执行重启 echo $(date) - 正在重启服务... $LOG_FILE supervisorctl restart deoldify # 检查重启结果 sleep 10 if supervisorctl status deoldify | grep -q RUNNING; then echo $(date) - 重启成功 $LOG_FILE else echo $(date) - 重启失败需要人工干预 $LOG_FILE fi5. 监控系统整合5.1 创建监控看板我们可以创建一个简单的网页看板来展示监控数据。新建monitor.pyfrom flask import Flask, render_template import json import psutil from datetime import datetime app Flask(__name__) app.route(/) def dashboard(): # 读取健康检查数据 health_data [] try: with open(logs/health.log, r) as f: for line in f.readlines()[-50:]: # 最近50条记录 try: health_data.append(json.loads(line.strip().split( - )[-1])) except: continue except FileNotFoundError: pass # 计算可用率 healthy_count sum(1 for d in health_data if d.get(status) healthy) uptime (healthy_count / len(health_data)) * 100 if health_data else 0 # 获取系统资源 cpu psutil.cpu_percent() mem psutil.virtual_memory().percent disk psutil.disk_usage(/).percent # 读取最近错误 try: with open(logs/error.log, r) as f: errors f.readlines()[-10:] # 最近10个错误 except FileNotFoundError: errors [] return render_template(dashboard.html, uptimeuptime, cpucpu, memmem, diskdisk, errorserrors, last_checkdatetime.now().strftime(%Y-%m-%d %H:%M:%S)) if __name__ __main__: app.run(host0.0.0.0, port5000)创建模板文件templates/dashboard.html!DOCTYPE html html head titleDeOldify监控看板/title style body { font-family: Arial, sans-serif; margin: 20px; } .metrics { display: flex; margin-bottom: 20px; } .metric { flex: 1; text-align: center; padding: 15px; margin: 0 10px; border-radius: 5px; } .healthy { background-color: #d4edda; } .warning { background-color: #fff3cd; } .critical { background-color: #f8d7da; } .errors { margin-top: 20px; } /style /head body h1DeOldify服务监控看板/h1 p最后检查时间: {{ last_check }}/p div classmetrics div classmetric {% if uptime 95 %}healthy{% elif uptime 80 %}warning{% else %}critical{% endif %} h2服务可用率/h2 p{{ %.2f|format(uptime) }}%/p /div div classmetric {% if cpu 70 %}healthy{% elif cpu 90 %}warning{% else %}critical{% endif %} h2CPU使用率/h2 p{{ cpu }}%/p /div div classmetric {% if mem 70 %}healthy{% elif mem 90 %}warning{% else %}critical{% endif %} h2内存使用率/h2 p{{ mem }}%/p /div div classmetric {% if disk 80 %}healthy{% elif disk 95 %}warning{% else %}critical{% endif %} h2磁盘使用率/h2 p{{ disk }}%/p /div /div div classerrors h2最近错误/h2 {% if errors %} ul {% for error in errors %} li{{ error }}/li {% endfor %} /ul {% else %} p没有发现错误/p {% endif %} /div /body /html5.2 启动监控看板python3 monitor.py访问http://localhost:5000即可查看监控看板。6. 总结通过本教程你已经为DeOldify图像上色服务搭建了一套完整的监控系统日志系统记录服务运行的所有细节便于问题排查健康检查定期检测服务状态预防问题发生自动恢复在服务崩溃时自动重启保证可用性监控看板直观展示服务运行状态这套系统可以帮助你快速发现并解决问题减少服务停机时间了解服务运行趋势提前预防潜在风险建议定期检查日志和监控数据根据实际情况调整配置。随着业务增长你可能需要更强大的监控工具但本文介绍的方法已经能够满足大多数小型项目的需求。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
DeOldify图像上色服务监控教程:日志分析+健康检查+自动恢复,小白友好
DeOldify图像上色服务监控教程日志分析健康检查自动恢复小白友好1. 为什么需要监控图像上色服务当你运行DeOldify图像上色服务时可能会遇到各种意外情况服务突然崩溃、处理速度变慢、内存不足导致图片无法处理等。这些问题如果不及时发现和处理会直接影响用户体验。想象一下这样的场景用户上传了一张珍贵的黑白老照片等待上色结果时却遇到服务无响应。没有监控系统你可能要等到用户投诉才知道出了问题。而完善的监控可以让你实时了解服务运行状态快速发现并解决问题预防潜在风险自动恢复崩溃的服务本文将手把手教你搭建一套完整的监控系统包含日志分析、健康检查和自动恢复三大核心功能即使没有运维经验也能轻松上手。2. 搭建日志系统2.1 配置基础日志首先我们需要让服务记录详细的运行日志。修改app.py文件添加日志配置import logging from logging.handlers import RotatingFileHandler # 配置日志 def setup_logging(): # 创建日志目录 log_dir Path(logs) log_dir.mkdir(exist_okTrue) # 设置日志格式 log_format %(asctime)s - %(levelname)s - %(message)s # 主日志文件记录所有信息 main_handler RotatingFileHandler( log_dir / service.log, maxBytes5*1024*1024, # 5MB backupCount3 ) main_handler.setLevel(logging.INFO) main_handler.setFormatter(logging.Formatter(log_format)) # 错误日志文件只记录错误 error_handler RotatingFileHandler( log_dir / error.log, maxBytes2*1024*1024, backupCount1 ) error_handler.setLevel(logging.ERROR) error_handler.setFormatter(logging.Formatter(log_format)) # 控制台输出 console_handler logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter(logging.Formatter(log_format)) # 应用配置 logging.basicConfig( levellogging.INFO, handlers[main_handler, error_handler, console_handler] ) # 在服务启动时调用 setup_logging() logger logging.getLogger(__name__)2.2 关键位置添加日志记录在服务的关键位置添加日志记录帮助我们了解运行情况app.route(/colorize, methods[POST]) def colorize_image(): try: logger.info(收到图片上色请求) # 检查文件大小 if file not in request.files: logger.warning(未接收到文件) return jsonify({error: 未上传文件}), 400 file request.files[file] if file.filename : logger.warning(上传文件名为空) return jsonify({error: 未选择文件}), 400 # 记录内存使用情况 import psutil mem psutil.virtual_memory() logger.info(f当前内存使用: {mem.percent}%) # 处理图片 logger.info(开始处理图片...) result colorize_image_file(file) logger.info(图片处理完成) return result except Exception as e: logger.error(f图片处理失败: {str(e)}, exc_infoTrue) return jsonify({error: 处理失败}), 5002.3 实用的日志分析命令有了日志后我们可以使用这些简单命令分析服务状态# 实时查看最新日志 tail -f logs/service.log # 查看错误日志 cat logs/error.log # 统计每小时处理的图片数量 grep 收到图片上色请求 logs/service.log | awk {print $1} | cut -d: -f1,2 | uniq -c # 查找最常见的错误 grep ERROR logs/error.log | awk -F- {print $NF} | sort | uniq -c | sort -nr # 监控内存使用趋势 grep 当前内存使用 logs/service.log | tail -203. 实现健康检查3.1 添加健康检查接口在app.py中添加一个简单的健康检查接口app.route(/health) def health_check(): 健康检查接口 status { status: healthy, timestamp: datetime.now().isoformat(), details: { model_loaded: hasattr(app, colorization_pipeline), memory_usage: psutil.virtual_memory().percent, disk_space: psutil.disk_usage(/).percent } } # 如果内存或磁盘使用过高标记为不健康 if status[details][memory_usage] 90 or status[details][disk_space] 90: status[status] unhealthy return jsonify(status)3.2 创建健康检查脚本新建一个脚本health_check.sh定期检查服务状态#!/bin/bash # health_check.sh # 健康检查URL HEALTH_URLhttp://localhost:7860/health # 日志文件 LOG_FILElogs/health.log # 执行健康检查 response$(curl -s $HEALTH_URL) status$(echo $response | jq -r .status) # 记录结果 echo $(date) - $response $LOG_FILE # 如果不健康尝试重启 if [ $status ! healthy ]; then echo $(date) - 服务不健康尝试重启... $LOG_FILE supervisorctl restart deoldify fi3.3 设置定时检查使用crontab设置每5分钟检查一次# 编辑crontab crontab -e # 添加以下行 */5 * * * * /bin/bash /path/to/health_check.sh4. 配置自动恢复4.1 使用Supervisor管理服务Supervisor可以监控服务进程崩溃时自动重启。安装并配置# 安装Supervisor sudo apt-get install supervisor创建配置文件/etc/supervisor/conf.d/deoldify.conf[program:deoldify] directory/path/to/your/service command/usr/bin/python3 app.py useryour_username autostarttrue autorestarttrue startsecs10 startretries3 stopwaitsecs30 stdout_logfile/path/to/logs/supervisor.log stdout_logfile_maxbytes5MB stdout_logfile_backups2 stderr_logfile/path/to/logs/supervisor_error.log stderr_logfile_maxbytes2MB stderr_logfile_backups1启动Supervisor并启用配置sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start deoldify4.2 智能重启策略为了避免频繁重启导致问题恶化我们可以改进重启脚本#!/bin/bash # smart_restart.sh LOG_FILElogs/restart.log MAX_RESTARTS3 # 最大重启次数 RESTART_WINDOW3600 # 1小时(秒) # 检查最近重启次数 recent_restarts$(grep 尝试重启 logs/health.log | \ awk -v now$(date %s) -v window$RESTART_WINDOW \ $1 (now - window) {count} END {print count}) if [ $recent_restarts -ge $MAX_RESTARTS ]; then echo $(date) - 重启过于频繁暂停自动重启 $LOG_FILE exit 1 fi # 检查错误类型 last_error$(tail -n 50 logs/error.log | grep -i error\|exception | tail -n 1) # 如果是内存问题先清理 if echo $last_error | grep -q memory\|Memory; then echo $(date) - 检测到内存问题先清理内存 $LOG_FILE sync echo 1 /proc/sys/vm/drop_caches sleep 5 fi # 执行重启 echo $(date) - 正在重启服务... $LOG_FILE supervisorctl restart deoldify # 检查重启结果 sleep 10 if supervisorctl status deoldify | grep -q RUNNING; then echo $(date) - 重启成功 $LOG_FILE else echo $(date) - 重启失败需要人工干预 $LOG_FILE fi5. 监控系统整合5.1 创建监控看板我们可以创建一个简单的网页看板来展示监控数据。新建monitor.pyfrom flask import Flask, render_template import json import psutil from datetime import datetime app Flask(__name__) app.route(/) def dashboard(): # 读取健康检查数据 health_data [] try: with open(logs/health.log, r) as f: for line in f.readlines()[-50:]: # 最近50条记录 try: health_data.append(json.loads(line.strip().split( - )[-1])) except: continue except FileNotFoundError: pass # 计算可用率 healthy_count sum(1 for d in health_data if d.get(status) healthy) uptime (healthy_count / len(health_data)) * 100 if health_data else 0 # 获取系统资源 cpu psutil.cpu_percent() mem psutil.virtual_memory().percent disk psutil.disk_usage(/).percent # 读取最近错误 try: with open(logs/error.log, r) as f: errors f.readlines()[-10:] # 最近10个错误 except FileNotFoundError: errors [] return render_template(dashboard.html, uptimeuptime, cpucpu, memmem, diskdisk, errorserrors, last_checkdatetime.now().strftime(%Y-%m-%d %H:%M:%S)) if __name__ __main__: app.run(host0.0.0.0, port5000)创建模板文件templates/dashboard.html!DOCTYPE html html head titleDeOldify监控看板/title style body { font-family: Arial, sans-serif; margin: 20px; } .metrics { display: flex; margin-bottom: 20px; } .metric { flex: 1; text-align: center; padding: 15px; margin: 0 10px; border-radius: 5px; } .healthy { background-color: #d4edda; } .warning { background-color: #fff3cd; } .critical { background-color: #f8d7da; } .errors { margin-top: 20px; } /style /head body h1DeOldify服务监控看板/h1 p最后检查时间: {{ last_check }}/p div classmetrics div classmetric {% if uptime 95 %}healthy{% elif uptime 80 %}warning{% else %}critical{% endif %} h2服务可用率/h2 p{{ %.2f|format(uptime) }}%/p /div div classmetric {% if cpu 70 %}healthy{% elif cpu 90 %}warning{% else %}critical{% endif %} h2CPU使用率/h2 p{{ cpu }}%/p /div div classmetric {% if mem 70 %}healthy{% elif mem 90 %}warning{% else %}critical{% endif %} h2内存使用率/h2 p{{ mem }}%/p /div div classmetric {% if disk 80 %}healthy{% elif disk 95 %}warning{% else %}critical{% endif %} h2磁盘使用率/h2 p{{ disk }}%/p /div /div div classerrors h2最近错误/h2 {% if errors %} ul {% for error in errors %} li{{ error }}/li {% endfor %} /ul {% else %} p没有发现错误/p {% endif %} /div /body /html5.2 启动监控看板python3 monitor.py访问http://localhost:5000即可查看监控看板。6. 总结通过本教程你已经为DeOldify图像上色服务搭建了一套完整的监控系统日志系统记录服务运行的所有细节便于问题排查健康检查定期检测服务状态预防问题发生自动恢复在服务崩溃时自动重启保证可用性监控看板直观展示服务运行状态这套系统可以帮助你快速发现并解决问题减少服务停机时间了解服务运行趋势提前预防潜在风险建议定期检查日志和监控数据根据实际情况调整配置。随着业务增长你可能需要更强大的监控工具但本文介绍的方法已经能够满足大多数小型项目的需求。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。