欢迎光临
我们一直在努力

前端故障复盘的排查路径

前端故障复盘的排查路径

周日早上 8 点半,手里的咖啡还没喝完,用户群里就已经炸开了锅:“服务怎么全 502 了?”登跳板机一看,数据库和 Node 应用全挂了。原因极其低级:框架生成的 debug 调试日志一夜之间塞满了硬盘,df -h 现实根分区使用率 100%。由于没有配置基础巡检,整整 4 个小时服务都处于瘫痪状态。

很多独立开发者把大部分精力放在了写代码和看前端页面上,完全把服务器运维抛在脑后。等事故真正爆发时,往往只能手忙脚乱地清理垃圾文件。搭建一套无依赖、轻量级且自带自愈功能的自动化运维巡检脚本,是让独立项目在没人盯着时也能稳定运转的基础。

1. 磁盘被日志打满 100%:服务静悄悄死掉的周日早晨

在跳板机上运行诊断命令,眼前的一幕让人哭笑不得:

Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 40G 0 100% /
tmpfs 2.0G 4.0K 2.0G 1% /dev/shm

进一步查明大文件分布,发现一个 app-debug.log 居然啃掉了 28GB 空间:

# du -sh /var/log/* | sort -rh | head -n 5
28G /var/log/app/app-debug.log
850M /var/log/nginx/access.log
120M /var/log/journal

没有任何防爆措施、没有任何自动清理逻辑、没有任何告警通知。独立开发者如果不做日常巡检,就相当于把服务放在定时炸弹上跑。

2. 轻量级无依赖巡检系统与多级告警架构

对于独立项目来说,引入一套复杂的 Prometheus + Grafana 监控集群成本太高,既耗费内存又增加运维负担。我们需要的是一个单 Bash 脚本 + Cron 组合的极简巡检自愈系统。

核心设计理念:

  • 零外部依赖:仅依赖 Linux 系统自带的 Bash、curl、awk、df。
  • 先自愈,后告警:遇到常见故障(如日志塞满、进程崩溃),脚本先尝试自动清理或重启,实在解决不了再发消息轰炸开发者。
  • 静默原则:一切正常时不发任何垃圾消息,只在触发阈值时告警。
  • 3. 可落地的 Bash/Python 巡检脚本与异常自愈处理

    下面是一套经过线上实测的独立开发者通用日常巡检与自愈 Bash 脚本(auto_inspect.sh):

    #!/usr/bin/env bash

    # ==========================================
    # 独立项目轻量级运维巡检与自愈脚本
    # ==========================================

    # 配置参数
    DISK_THRESHOLD=85 # 磁盘占用报警阈值 (%)
    MEM_THRESHOLD=90 # 内存占用报警阈值 (%)
    CHECK_URL="http://127.0.0.1:8080/health" # 服务健康检查接口
    WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_BOT_KEY"

    # 1. 检查磁盘状态并执行自愈
    check_disk() {
    USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ "$USAGE" -gt "$DISK_THRESHOLD" ]; then
    echo "[WARNING] Disk usage high: ${USAGE}%. Initiating self-healing…"

    # 自愈动作 1: 清理日志文件
    find /var/log/app/ -name "*.log" -mtime +3 -exec rm -f {} \\;
    journalctl –vacuum-size=200M

    # 重新检测
    NEW_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
    send_alert "⚠️ 磁盘警告" "磁盘占用已达 ${USAGE}% (已自动清理至 ${NEW_USAGE}%)"
    fi
    }

    # 2. 检查应用进程与 HTTP 接口存活
    check_service() {
    HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" –connect-timeout 5 "$CHECK_URL")

    if [ "$HTTP_CODE" -ne 200 ]; then
    echo "[CRITICAL] Service endpoint returned $HTTP_CODE. Restarting service…"

    # 自愈动作 2: 自动重启主服务
    systemctl restart my-backend-app
    sleep 3

    RECHECK_CODE=$(curl -s -o /dev/null -w "%{http_code}" –connect-timeout 5 "$CHECK_URL")
    if [ "$RECHECK_CODE" -eq 200 ]; then
    send_alert "✅ 服务自愈成功" "HTTP 接口异常 ($HTTP_CODE),已通过 systemctl 自动拉起服务。"
    else
    send_alert "🚨 紧急故障" "服务已崩溃 (HTTP $HTTP_CODE),自动重启失败,请立刻人工干预!"
    fi
    fi
    }

    # 3. 发送 Webhook 告警消息
    send_alert() {
    TITLE=$1
    MESSAGE=$2
    HOSTNAME=$(hostname)

    PAYLOAD=$(cat <<EOF
    {
    "msgtype": "markdown",
    "markdown": {
    "content": "### ${TITLE}\\n> **主机**: ${HOSTNAME}\\n> **时间**: $(date '+%Y-%m-%d %H:%M:%S')\\n> **详情**: ${MESSAGE}"
    }
    }
    EOF
    )
    curl -s -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "$WEBHOOK_URL" > /dev/null
    }

    # 执行巡检
    check_disk
    check_service

    赋予脚本执行权限并挂载到系统 Cron 中:

    chmod +x /usr/local/bin/auto_inspect.sh

    4. 手动触发与自动化 Cron 测试

    配置完成后,应手动触发各种极限边界条件,测试自愈与告警链路是否顺畅。

    查看并编辑系统 Cron 定时任务:

    # 编辑 Crontab,配置每 10 分钟自动巡检一次
    (crontab -l 2>/dev/null; echo "*/10 * * * * /usr/local/bin/auto_inspect.sh >> /var/log/auto_inspect.log 2>&1") | crontab –

    在跳板机上运行诊断命令,模拟服务崩溃并观察自愈日志:

    # 模拟手动杀掉后端应用进程
    pkill -f "my-backend-app"

    # 手动触发巡检脚本
    /usr/local/bin/auto_inspect.sh

    # 查看自愈日志输出
    tail -n 20 /var/log/auto_inspect.log

    # 查看 Linux 系统定时任务执行记录
    grep "auto_inspect" /var/log/cron

    测试验证表明:脚本在服务被 Kill 掉后的 10 秒内检测到 HTTP 500 异常,自动触发 systemctl restart 拉起进程,并在微信 Hook 中推送了带自愈标记的通知,整个过程完全不需要人为干预。

    5. 巡检自愈监控指标与常规规则集

    独立项目日常巡检的核心在于收敛指标,防范最常见的系统崩溃点:

    巡检维度监控阈值自动化自愈动作告警级别
    磁盘空间 Used > 85% 清理 3 天前旧 Log 与 docker 镜像缓存 P2 ( warning )
    服务存活 HTTP != 200 或 PID 消失 systemctl restart 尝试拉起 1 次 P0 ( critical )
    内存水位 Mem > 90% sync && echo 3 > /proc/sys/vm/drop_caches P2 ( warning )
    TCP 连接数 TIME_WAIT > 2000 调整 net.ipv4.tcp_tw_reuse = 1 参数 P3 ( notice )
    SSL 证书 剩余天数 < 7 天 自动调用 certbot renew 刷新证书 P1 ( error )

    运维不是搞花架子。用最简单的 Bash 脚本把常见的死机隐患掐灭在萌芽状态,独立开发者才能从无休止的“灭火”中解脱出来。

    赞(0)
    未经允许不得转载:171主机测评 » 前端故障复盘的排查路径
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址