40 lines
3.0 KiB
YAML
Executable File
40 lines
3.0 KiB
YAML
Executable File
name: Diagnose ECS (read-only)
|
|
|
|
# 只读诊断:排查数字我后端 DB 接口卡死(MongoDB 挂/连不上)。不重启任何服务。
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
diagnose:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: SSH read-only diagnostics
|
|
uses: appleboy/ssh-action@v1
|
|
with:
|
|
host: ${{ secrets.ECS_HOST }}
|
|
username: ${{ secrets.ECS_USER }}
|
|
password: ${{ secrets.ECS_PASSWORD }}
|
|
command_timeout: 8m
|
|
script: |
|
|
echo "===== 时间 ====="; date
|
|
echo "===== 磁盘 df -h(磁盘满会让 mongo 卡/只读)====="; df -h | grep -vE "tmpfs|udev|overlay" | head -20
|
|
echo "===== 内存 free -h ====="; free -h
|
|
echo "===== pm2 list ====="; pm2 list 2>/dev/null | grep -iE "name|digitalme|online|errored|stopped" || pm2 list 2>/dev/null | head -20
|
|
echo "===== pm2 describe digitalme-api ====="; pm2 describe digitalme-api 2>/dev/null | grep -iE "status|restart|uptime|memory|cpu|pid|script path|unstable" | head -20
|
|
echo "===== 本地 /health(不读库)====="; curl -s -m 8 http://localhost:3603/health; echo
|
|
echo "===== 本地 /api/plaza(读库,8s 看是否卡)====="; curl -s -m 8 -o /dev/null -w "plaza -> code=%{http_code} time=%{time_total}s\n" http://localhost:3603/api/plaza 2>&1
|
|
echo "===== MongoDB systemd 服务 ====="
|
|
systemctl is-active mongod 2>/dev/null && systemctl status mongod --no-pager 2>/dev/null | head -14 || echo "(mongod systemd 非 active 或不存在)"
|
|
echo "===== MongoDB docker 容器 ====="
|
|
(command -v docker >/dev/null && docker ps -a --format '{{.Names}} | {{.Status}} | {{.Image}}' 2>/dev/null | grep -i mongo) || echo "(无 docker mongo 或无 docker)"
|
|
echo "===== 27017 端口监听 ====="; ss -tlnp 2>/dev/null | grep 27017 || echo "⚠ 27017 未监听"
|
|
echo "===== .env 里 Mongo 主机(已脱敏密码) ====="; grep -iE "MONGO|MONGODB" /var/www/digitalme-api.invoratec.cn/.env 2>/dev/null | sed -E 's#://[^@ ]*@#://***:***@#g' | head -5 || echo "(未读到)"
|
|
echo "===== mongo ping(8s) ====="
|
|
if command -v mongosh >/dev/null; then timeout 8 mongosh --quiet --eval "db.adminCommand('ping')" 2>&1 | head -6; \
|
|
elif command -v mongo >/dev/null; then timeout 8 mongo --quiet --eval "db.adminCommand('ping')" 2>&1 | head -6; \
|
|
else echo "(无 mongosh/mongo 客户端)"; fi
|
|
echo "===== API 近 45 行日志(找 Mongo 报错/超时) ====="; pm2 logs digitalme-api --lines 45 --nostream 2>/dev/null | tail -50
|
|
echo "===== mongod 日志尾部(如有) ====="; tail -25 /var/log/mongodb/mongod.log 2>/dev/null || echo "(无 /var/log/mongodb/mongod.log)"
|
|
echo "===== 系统负载/OOM 迹象 ====="; uptime; dmesg 2>/dev/null | grep -iE "out of memory|killed process|oom" | tail -5 || echo "(dmesg 无 OOM 或无权限)"
|
|
echo "===== 诊断完成 ====="
|