#!/bin/bash # 连接日志一键诊断脚本 # 在生产服务器上以 root 执行: bash /opt/openvpn-manager/scripts/diag-connlogs.sh set -u echo "==========================================" echo " OpenVPN Manager 连接日志诊断" echo "==========================================" echo "" echo "[1] 服务运行状态:" ps -ef | grep -E "openvpn-manager|openvpn " | grep -v grep || echo " (无进程)" echo "" echo "[2] 当前代码版本:" cd /opt/openvpn-manager 2>/dev/null && git log --oneline -3 || echo " git log 失败" echo "" echo "[3] 二进制构建时间:" ls -la /opt/openvpn-manager/bin/openvpn-manager 2>/dev/null | awk '{print " "$6,$7,$8,$9}' echo "" echo "[4] status.log 文件:" find /opt/openvpn-manager/data/instances -name "status.log" 2>/dev/null | while read f; do echo " 路径: $f" echo " 大小: $(stat -c%s "$f") 字节" echo " 内容前 6 行:" head -6 "$f" | sed 's/^/ /' echo " ----" done echo "" echo "[5] 直接登录 API:" LOGIN_RESP=$(curl -s http://localhost:8089/api/login -X POST -H 'Content-Type: application/json' -d '{"username":"admin","password":"admin123"}') echo " 响应: $LOGIN_RESP" TOKEN=$(echo "$LOGIN_RESP" | grep -oP '"token":"\K[^"]+') echo " TOKEN 长度: ${#TOKEN}" if [ -z "$TOKEN" ]; then echo " ✗ 登录失败,无法继续" exit 1 fi echo "" echo "[6] 调用 /api/connlogs:" RESP=$(curl -s "http://localhost:8089/api/connlogs" -H "Authorization: Bearer $TOKEN") echo " 响应: $RESP" echo "" echo "[7] 解析日志条目数:" echo "$RESP" | grep -oP '"common_name":"[^"]+"' | wc -l | awk '{print " 共 "$1" 条连接记录"}' echo "" echo "[8] 关键检查:" echo "$RESP" | grep -q '"_diag"' && echo " ✓ 返回了新格式(带 _diag)" || echo " ✗ 旧格式,说明后端代码未更新" echo "$RESP" | grep -q '"logs"' && echo " ✓ logs 字段存在" || echo " ✗ 缺 logs 字段" echo "" echo "==========================================" echo " 诊断完成" echo "=========================================="