当前位置: 首页 > news >正文

Shell脚本实战:从零打造自动化部署、日志分析与性能监控系统

在现代 DevOps 实践中,Shell 脚本虽然“古老”,但依然是系统管理员和开发工程师不可或缺的利器。它轻量、高效、无需额外依赖,特别适合在 Linux 环境下完成自动化任务。本文将通过三个典型场景——自动化部署日志分析性能监控,带你用 Shell 脚本构建一套实用的运维工具链。


一、自动化部署脚本(Auto Deploy)

场景说明

每次发布新版本时,需要拉取代码、停止旧服务、部署新包、启动服务并验证状态。手动操作不仅繁琐,还容易出错。

脚本实现(deploy.sh)

#!/bin/bash # 配置区 APP_NAME="myapp" GIT_REPO="https://github.com/yourname/myapp.git" DEPLOY_DIR="/opt/$APP_NAME" LOG_FILE="/var/log/deploy_$(date +%Y%m%d).log" # 日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # 检查权限 if [ "$(id -u)" -ne 0 ]; then log "请以 root 或 sudo 运行此脚本!" exit 1 fi # 停止服务 log "正在停止 $APP_NAME 服务..." systemctl stop $APP_NAME || log "停止服务失败,继续部署..." # 备份旧版本 if [ -d "$DEPLOY_DIR" ]; then BACKUP_DIR="/opt/backup/${APP_NAME}_$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" cp -r "$DEPLOY_DIR"/* "$BACKUP_DIR"/ log "旧版本已备份至 $BACKUP_DIR" fi # 拉取最新代码 rm -rf /tmp/${APP_NAME}_build git clone "$GIT_REPO" /tmp/${APP_NAME}_build if [ $? -ne 0 ]; then log "Git 克隆失败!" exit 1 fi # 部署新版本 mkdir -p "$DEPLOY_DIR" cp -r /tmp/${APP_NAME}_build/* "$DEPLOY_DIR"/ chown -R appuser:appgroup "$DEPLOY_DIR" # 启动服务 log "正在启动 $APP_NAME 服务..." systemctl start $APP_NAME # 验证服务状态 sleep 3 if systemctl is-active --quiet $APP_NAME; then log "✅ 部署成功!服务运行中。" else log "❌ 服务启动失败!请检查日志。" exit 1 fi

使用建议:配合 Jenkins 或 GitLab CI 触发,实现一键发布。


二、日志分析脚本(Log Analyzer)

场景说明

Web 服务器每天产生大量访问日志,我们需要快速找出:

  • 访问最多的 IP
  • 返回 5xx 错误的请求
  • 异常高频访问(可能为爬虫或攻击)

脚本实现(analyze_access_log.sh)

#!/bin/bash LOG_FILE=${1:-/var/log/nginx/access.log} OUTPUT_DIR="/tmp/log_analysis_$(date +%Y%m%d)" mkdir -p "$OUTPUT_DIR" echo "📊 正在分析日志: $LOG_FILE" # 1. Top 10 访问 IP awk '{print $1}' "$LOG_FILE" | sort | uniq -c | sort -nr | head -10 > "$OUTPUT_DIR/top_ips.txt" # 2. 5xx 错误统计 awk '$9 ~ /^5[0-9][0-9]$/ {print $0}' "$LOG_FILE" | wc -l > "$OUTPUT_DIR/5xx_count.txt" awk '$9 ~ /^5[0-9][0-9]$/ {print $1, $7, $9}' "$LOG_FILE" | head -20 > "$OUTPUT_DIR/5xx_samples.txt" # 3. 每小时请求量趋势(假设日志格式含 [10/Dec/2025:14:23:01) awk -F'[][]' '{print substr($2,14,2)}' "$LOG_FILE" | sort | uniq -c > "$OUTPUT_DIR/hourly_requests.txt" # 4. 异常高频 IP(每分钟超过 100 次) awk '{ ip = $1 time = substr($4, 2, 16) # [10/Dec/2025:14:23 gsub(/:/, "-", time) key = ip "-" time count[key]++ } END { for (k in count) { if (count[k] > 100) print k, count[k] } }' "$LOG_FILE" > "$OUTPUT_DIR/suspicious_ips.txt" echo "✅ 分析完成!结果保存在 $OUTPUT_DIR" ls -lh "$OUTPUT_DIR"

提示:可结合cron每天凌晨自动运行,并邮件发送报告。


三、性能监控脚本(System Monitor)

场景说明

服务器资源异常可能导致服务中断。我们需要实时监控 CPU、内存、磁盘和负载,并在阈值超标时告警。

脚本实现(monitor.sh)

#!/bin/bash THRESHOLD_CPU=80 THRESHOLD_MEM=85 THRESHOLD_DISK=90 ALERT_EMAIL="admin@example.com" # 获取当前指标 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}') MEM_USAGE=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}') DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%') LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1) # 日志记录 echo "$(date): CPU=$CPU_USAGE%, MEM=$MEM_USAGE%, DISK=$DISK_USAGE%, LOAD=$LOAD_AVG" # 告警逻辑 ALERT_MSG="" if (( $(echo "$CPU_USAGE > $THRESHOLD_CPU" | bc -l) )); then ALERT_MSG+="⚠️ CPU 使用率过高: ${CPU_USAGE}%\n" fi if [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then ALERT_MSG+="⚠️ 内存使用率过高: ${MEM_USAGE}%\n" fi if [ "$DISK_USAGE" -gt "$THRESHOLD_DISK" ]; then ALERT_MSG+="⚠️ 磁盘使用率过高: ${DISK_USAGE}%\n" fi if [ -n "$ALERT_MSG" ]; then echo -e "$ALERT_MSG" | mail -s "[告警] 服务器资源异常" "$ALERT_EMAIL" # 或使用 curl 发送企业微信/钉钉通知 fi
http://www.cnnetsun.cn/news/108506.html

相关文章:

  • 事件驱动架构中的消息可靠性:Watermill与RabbitMQ实战深度解析
  • Python+Vue的瑜伽体验课预约系统 Pycharm django flask
  • 彻底解决Git跨平台开发难题:专业.gitattributes模板集合
  • DAIR-V2X车路协同自动驾驶完全实战指南:从零搭建多模态感知系统
  • 腾讯混元视频生成模型完整技术解析
  • 突破传统瓶颈:如何用LightGlue实现图像特征匹配的极致性能
  • 5天从零掌握开源音乐合成:OpenUtau实战创作全流程
  • UniApp页面跳转后关闭原页面的完整指南:让应用流畅如丝
  • 政策 + 技术双驱动!安科瑞赋能农村能源革命,助力乡村振兴落地生根
  • 快捷键一键粘贴常用短语,复制粘贴告别Ctrl+C/V,打工人必备提高效率神器!
  • GifCapture:Mac端高效Gif录制工具完整指南
  • Pearcleaner Homebrew管理全攻略:告别繁琐命令行操作
  • 首款问世,深度进化——AI-HAZOPkit重塑风险分析“智”高点
  • 终极指南:NewGAN-Manager 足球经理头像配置生成器完全使用手册
  • pdf2svg:极简PDF转SVG的终极解决方案
  • 品牌矩阵时代,企业为什么要优先注册“企业名.网址/产品名.网址”?
  • rcedit终极使用指南:Windows可执行文件资源编辑完整手册
  • YOLOv12低光照检测能力增强:基于Retinexformer主干网络改进的深度实践**
  • 打开应用详情
  • Three.js沉浸式数字展馆开发终极指南:从零构建Web3D交互体验
  • 9、Eclipse集成开发环境使用指南
  • EnergyPlus 建筑能源模拟完整指南:从基础原理到高级应用
  • One-Core-API项目:让Windows XP/2003系统重获新生的革命性解决方案
  • 轻松高效生成音频字幕:OpenLRC完整指南与多语言LRC文件制作
  • 鸿蒙投屏神器HOScrcpy:5分钟快速上手完整指南
  • 从零到一:全栈FastAPI项目部署实战指南
  • 刚刚发布!中信所发布2025年度国际期刊预警名单
  • OCLP-Mod技术解析:为老旧Mac注入新活力的完整方案
  • QuickLook视频预览优化指南:3分钟解决所有播放问题
  • macOS开源应用终极指南:免费工具集合实现效率飞跃