🔧 故障排查指南

基于 OpenClaw + Claude Code 的端到端研发自动化系统

版本:v1.0 | 更新日期:2026-03-16

📋 故障排查流程

问题发现
信息收集
问题定位
方案制定
实施修复
验证修复
事后复盘

问题分级

级别 名称 响应时间 影响范围
P0 致命 5 分钟 系统完全不可用
P1 严重 30 分钟 核心功能不可用
P2 一般 2 小时 部分功能受影响
P3 轻微 24 小时 轻微影响或无影响

🚀 安装问题

Node.js 安装失败

问题现象: command not found: node
  1. 检查是否已安装:which node
  2. 使用 nvm 安装 (推荐):
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
    nvm install --lts
    nvm use --lts
  3. 验证安装:node -v && npm -v

OpenClaw 安装失败

问题现象: Permission denied
# 方案 1: 手动下载安装
curl -fsSL https://claude.ai/install.sh -o install.sh
chmod +x install.sh
sudo ./install.sh

# 方案 2: 使用 npm 安装
sudo npm install -g @anthropic-ai/claude-code

🔐 认证与配置问题

API Key 无效

错误信息: INVALID_API_KEY - 提供的 API Key 无效或已过期
# 1. 检查环境变量
echo $ANTHROPIC_API_KEY

# 2. 检查格式 (应以 sk-ant-开头)
echo $ANTHROPIC_API_KEY | grep "^sk-ant-"

# 3. 重新设置
export ANTHROPIC_API_KEY="sk-ant-api03-xxxxxxxxxxxxx"

# 4. 验证 API Key
curl -X POST https://api.anthropic.com/v1/messages \
  -H "Authorization: Bearer $ANTHROPIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-4-20250514","max_tokens":10,"messages":[{"role":"user","content":"Hi"}]}'

工作区信任问题

解决方案: 输入 Y 确认信任,或预先配置信任目录
claude config set trusted_directories '["/path/to/project"]'

⚡ 任务执行问题

任务卡住不执行

可能原因诊断方法解决方案
Agent 繁忙 GET /agents 查看状态 等待或切换到其他 Agent
队列堵塞 检查待处理任务数量 取消不必要的任务
资源不足 检查 CPU/内存使用率 扩容或优化任务
网络问题 检查 API 连接 检查网络和代理配置

Token 超限问题

错误: CONTEXT_LENGTH_EXCEEDED - 超过模型 token 限制
# 方案 1: 减少上下文 (在 CLAUDE.md 中指定关注目录)
cat > CLAUDE.md << EOF
# 项目说明
只关注以下目录:
- src/routers/
- src/schemas/

忽略以下目录:
- node_modules/
- .git/
EOF

# 方案 2: 分批次处理
claude "先实现用户认证模块"
claude "接下来实现订单管理模块"

# 方案 3: 使用小模型
export ANTHROPIC_MODEL="claude-sonnet-4-20250514"

💻 代码生成问题

生成的代码无法运行

示例: ImportError: cannot import name 'FastAPI' from 'fastapi'
# 1. 检查包版本
pip show fastapi

# 2. 升级/降级
pip install --upgrade fastapi
# 或
pip install fastapi==0.104.1

# 3. 让 AI 修复
claude "检测到 FastAPI 导入错误,请修复兼容性问题"

代码风格不一致

解决方案: 配置 CLAUDE.md 明确规范 + 使用格式化工具
# 添加代码规范到 CLAUDE.md
cat >> CLAUDE.md << EOF

## 代码风格规范
- 变量和函数:snake_case
- 类名:PascalCase
- 缩进:4 空格
- 导入顺序:标准库 → 第三方库 → 本地模块
EOF

# 使用格式化工具
pip install black isort
black src/
isort src/

🧪 测试相关问题

测试覆盖率不达标

# 1. 识别未覆盖的代码
pytest tests/ --cov=src --cov-report=html
open htmlcov/index.html

# 2. 让 AI 生成补充测试
claude "以下代码行未被测试覆盖,请生成对应的测试用例"

# 3. 运行补充测试
pytest tests/ --cov=src --cov-fail-under=80

测试间歇性失败

可能原因: 测试数据污染、外部依赖不稳定、并发问题
# 解决方案:隔离测试数据 + Mock 外部依赖
@pytest.fixture
def clean_db():
    db.drop_all()
    db.create_all()
    yield db
    db.drop_all()

@patch('requests.post')
def test_external_api(mock_post):
    mock_post.return_value.status_code = 200
    # 测试逻辑

🚢 CI/CD 部署问题

K8s 部署失败 - ImagePullBackOff

# 1. 查看 Pod 详情
kubectl describe pod order-service-xxx -n test

# 2. 查看事件日志
kubectl get events -n test --sort-by='.lastTimestamp'

# 3. 检查镜像拉取凭证
kubectl get secret registry-credentials -n test -o yaml

# 4. 更新凭证
kubectl create secret docker-registry registry-credentials \
  --docker-server=harbor.internal.com \
  --docker-username=admin \
  --docker-password=Harbor12345 \
  -n test

健康检查失败

解决方案: 延长初始延迟时间,确保应用实现了健康检查端点
# Helm Chart values.yaml
healthCheck:
  readinessProbe:
    initialDelaySeconds: 30  # 从 10 增加到 30
    periodSeconds: 10
    
  livenessProbe:
    initialDelaySeconds: 60  # 从 30 增加到 60
    periodSeconds: 20

# 确保应用实现健康检查端点
@app.get("/health/ready")
def health_ready():
    return {"status": "ready"}

🔒 安全问题

API Key 泄露紧急处理

⚠️ 立即执行以下步骤:
  1. 立即撤销泄露的 API Key (登录 Anthropic Console → API Keys → Revoke)
  2. 从 Git 历史中删除:
    java -jar bfg.jar --delete-files .env
    git reflog expire --expire=now --all
    git gc --prune=now --aggressive
  3. 轮换所有相关凭证 (生成新的 API Key)
  4. 审计 API 调用记录 (检查异常调用)
  5. 添加预防措施 (git-secrets / pre-commit hooks)

容器安全漏洞

# 使用 Trivy 扫描
trivy image order-service:latest

# 修复方案:
# 1. 使用最小化基础镜像
FROM python:3.12-slim

# 2. 多阶段构建
FROM node:22 AS builder
...
FROM python:3.12-slim
COPY --from=builder ...

# 3. 非 root 用户运行
RUN useradd -m -u 1000 appuser
USER appuser

📊 日志分析

日志位置

组件日志路径
OpenClaw~/.openclaw/logs/
Claude Code~/.claude/logs/
应用日志/var/log/app/ 或 stdout
Jenkins/var/jenkins_home/jobs/*/builds/*/log
K8s Podskubectl logs <pod-name> -n <namespace>

常用日志分析命令

# 实时查看日志
tail -f /var/log/app/application.log

# 搜索错误
grep -i "error\|exception\|critical" application.log

# 查看错误上下文
grep -B 5 -A 5 "ERROR" application.log

# 按时间过滤
awk '/2026-03-16 10:00:00/,/2026-03-16 11:00:00/' application.log

# JSON 日志分析
cat application.log | jq 'select(.level == "ERROR")'

🆘 紧急恢复流程

K8s 回滚操作

# 1. 查看部署历史
kubectl rollout history deployment/order-service -n test

# 2. 回滚到上一个版本
kubectl rollout undo deployment/order-service -n test

# 3. 回滚到指定版本
kubectl rollout undo deployment/order-service -n test --to-revision=5

# 4. 验证回滚
kubectl rollout status deployment/order-service -n test

数据库回滚

# 使用 Alembic 回滚迁移
alembic downgrade -1        # 回滚一个版本
alembic downgrade head~3    # 回滚三个版本
alembic downgrade base      # 回滚到初始状态

# 从备份恢复
pg_restore -U postgres -d orders_db -Fc backup_20260315.dump

📞 联系支持

问题类型联系方式响应时间
P0 级故障 电话 + Slack 5 分钟
P1 级故障 Slack + 邮件 30 分钟
P2 技术问题 GitHub Issues 24 小时
P3 一般咨询 社区论坛 48 小时
紧急联系人:
On-call 工程师:+86-XXX-XXXX-XXXX
技术负责人:tech-lead@example.com
产品负责人:product-owner@example.com