# 故障排除 **本文档引用的文件** - [main.rs](file://crates/rcoder/src/main.rs) - [config.rs](file://crates/rcoder/src/config.rs) - [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs) - [tracing_middleware.rs](file://crates/rcoder/src/middleware/tracing_middleware.rs) - [manager.rs](file://crates/docker_manager/src/manager.rs) - [container_stop.rs](file://crates/docker_manager/src/container_stop.rs) - [types.rs](file://crates/docker_manager/src/types.rs) - [cleanup_task.rs](file://crates/rcoder/src/proxy_agent/cleanup_task.rs) - [app_error.rs](file://crates/shared_types/src/model/app_error.rs) ## 目录 1. [常见问题及解决方案](#常见问题及解决方案) 2. [日志分析](#日志分析) 3. [性能优化](#性能优化) 4. [安全考虑](#安全考虑) 5. [配置选项与参数](#配置选项与参数) 6. [组件关系](#组件关系) ## 常见问题及解决方案 ### Docker连接问题 当服务无法连接到Docker守护进程时,系统会提供详细的错误信息和解决建议。主要问题包括: - **Docker socket路径错误**:检查环境变量`DOCKER_SOCKET_PATH`是否正确设置 - **权限不足**:确保容器有权限访问Docker API - **Docker服务未运行**:验证Docker是否正在运行 **解决方案**: 1. 检查`docker-compose.yml`中的配置,确保正确挂载Docker socket 2. 验证Docker socket文件是否存在 3. 检查用户是否在docker组中 4. 测试Docker API连通性 ```mermaid flowchart TD Start([启动服务]) --> CheckDockerSocket["检查DOCKER_SOCKET_PATH环境变量"] CheckDockerSocket --> ValidateSocket["验证Docker socket文件存在"] ValidateSocket --> TestAPI["测试Docker API连通性"] TestAPI --> CheckPermissions["检查用户权限"] CheckPermissions --> Success["服务启动成功"] CheckDockerSocket --> |路径未设置| UseDefault["使用默认路径: /var/run/docker.sock"] UseDefault --> ValidateSocket TestAPI --> |连接失败| ShowHelp["显示详细的配置帮助信息"] ShowHelp --> Stop["停止服务启动"] ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L48-L81) - [main.rs](file://crates/rcoder/src/main.rs#L322-L351) ### 容器清理失败 在服务启动和关闭时,系统会尝试清理遗留的容器。可能会遇到以下问题: - **409冲突错误**:容器已在删除过程中,这是正常情况 - **容器不存在**:容器已被其他进程清理 - **权限不足**:无法访问或删除容器 系统采用智能清理策略,忽略409冲突错误和容器不存在的情况,只记录真正的清理失败。 ```mermaid flowchart TD Start([启动清理]) --> FindContainers["查找匹配模式的容器"] FindContainers --> CheckExist["检查容器是否存在"] CheckExist --> |存在| StopContainer["停止并删除容器"] CheckExist --> |不存在| Skip["跳过,记录为已清理"] StopContainer --> CheckError["检查错误类型"] CheckError --> |409冲突| Skip["跳过,记录为已清理"] CheckError --> |其他错误| LogError["记录失败,计入失败统计"] CheckError --> |成功| LogSuccess["记录成功"] LogSuccess --> NextContainer["处理下一个容器"] LogError --> NextContainer Skip --> NextContainer NextContainer --> |还有容器| CheckExist NextContainer --> |无容器| Complete["清理完成"] ``` **Section sources** - [container_stop.rs](file://crates/docker_manager/src/container_stop.rs#L82-L182) - [main.rs](file://crates/rcoder/src/main.rs#L131-L157) ### 服务启动失败 服务启动时可能遇到多种问题,系统提供了详细的错误处理和恢复机制。 **常见问题**: - 配置文件加载失败 - Docker管理器初始化失败 - 端口绑定失败 - 依赖服务未就绪 **解决方案**: 1. 检查配置文件是否存在且格式正确 2. 验证Docker服务是否正常运行 3. 确认端口未被其他进程占用 4. 检查依赖服务的状态 ```mermaid flowchart TD Start([服务启动]) --> LoadConfig["加载配置文件"] LoadConfig --> |成功| InitDocker["初始化Docker管理器"] LoadConfig --> |失败| UseDefault["使用默认配置"] UseDefault --> InitDocker InitDocker --> |成功| CheckContainers["检查并清理遗留容器"] InitDocker --> |失败| Stop["停止服务启动"] CheckContainers --> |成功| StartProxy["启动代理服务"] CheckContainers --> |失败| LogWarn["记录警告,继续启动"] StartProxy --> |成功| StartServer["启动HTTP服务器"] StartProxy --> |失败| LogError["记录错误"] StartServer --> Complete["服务启动完成"] ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L31-L271) - [config.rs](file://crates/rcoder/src/config.rs#L253-L332) ## 日志分析 ### 日志配置 系统使用`tracing`库进行日志记录,支持多种输出格式和级别。 **日志配置特点**: - 按天滚动保存日志文件 - 保留最近5天的日志 - 同时输出到控制台和文件 - 文件日志采用JSON格式,便于后续分析 - 控制台日志采用简洁格式 ```mermaid flowchart TD Start([日志初始化]) --> CreateDir["创建logs目录"] CreateDir --> SetupRolling["设置按天滚动的文件appender"] SetupRolling --> CreateFileLayer["创建文件日志层"] CreateFileLayer --> CreateConsoleLayer["创建控制台日志层"] CreateConsoleLayer --> SetPropagator["设置全局文本传播器"] SetPropagator --> InitSubscriber["初始化tracing subscriber"] InitSubscriber --> Complete["日志系统初始化成功"] ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L274-L318) - [main.rs](file://crates/agent_runner/src/main.rs#L182-L229) ### 日志级别 系统支持多种日志级别,便于不同场景下的调试和监控。 **日志级别**: - `error`:记录错误信息,需要立即关注 - `warn`:记录警告信息,可能影响系统稳定性 - `info`:记录重要事件和状态变化 - `debug`:记录调试信息,用于问题排查 - `trace`:记录详细跟踪信息,用于深度分析 **日志级别配置**: - 通过环境变量`RUST_LOG`设置 - 支持按模块设置不同级别 - 默认级别为`info` ```mermaid flowchart TD Start([日志级别]) --> Error["error: 记录错误信息"] Error --> Warn["warn: 记录警告信息"] Warn --> Info["info: 记录重要事件"] Info --> Debug["debug: 记录调试信息"] Debug --> Trace["trace: 记录详细跟踪信息"] Trace --> Complete["完成"] ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L308-L314) - [main.rs](file://crates/agent_runner/src/main.rs#L217-L225) ### 日志内容 日志记录了系统运行过程中的关键信息,便于问题排查和性能分析。 **日志内容包括**: - 服务启动和关闭信息 - 配置加载和应用信息 - 容器创建和销毁信息 - 请求处理信息 - 错误和异常信息 **日志字段**: - `timestamp`:时间戳 - `level`:日志级别 - `target`:日志来源 - `message`:日志消息 - `trace_id`:请求跟踪ID - `method`:HTTP方法 - `uri`:请求URI ```mermaid flowchart TD Start([日志内容]) --> ServiceInfo["服务信息: 启动、关闭、状态"] ServiceInfo --> ConfigInfo["配置信息: 加载、应用、验证"] ConfigInfo --> ContainerInfo["容器信息: 创建、启动、停止、销毁"] ContainerInfo --> RequestInfo["请求信息: 处理、响应、错误"] RequestInfo --> ErrorInfo["错误信息: 异常、堆栈跟踪"] ErrorInfo --> Complete["完成"] ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L36-L271) - [tracing_middleware.rs](file://crates/rcoder/src/middleware/tracing_middleware.rs#L75-L128) ## 性能优化 ### 容器清理优化 系统实现了高效的容器清理机制,避免资源泄漏和性能下降。 **清理策略**: - 定时清理闲置容器 - 启动时清理遗留容器 - 关闭时清理所有容器 - 并发清理多个容器 **优化措施**: - 使用`force remove`避免竞态条件 - 过滤409冲突错误 - 并发处理多个容器 - 添加超时机制 ```mermaid flowchart TD Start([容器清理]) --> CheckIdle["检查容器是否闲置"] CheckIdle --> |是| StopContainer["停止并删除容器"] CheckIdle --> |否| Skip["跳过"] StopContainer --> CheckError["检查错误类型"] CheckError --> |409冲突| Skip["跳过"] CheckError --> |其他错误| LogError["记录错误"] CheckError --> |成功| LogSuccess["记录成功"] LogSuccess --> NextContainer["处理下一个容器"] LogError --> NextContainer Skip --> NextContainer NextContainer --> |还有容器| CheckIdle NextContainer --> |无容器| Complete["清理完成"] ``` **Section sources** - [cleanup_task.rs](file://crates/rcoder/src/proxy_agent/cleanup_task.rs#L248-L429) - [container_stop.rs](file://crates/docker_manager/src/container_stop.rs#L82-L182) ### 请求处理优化 系统使用`axum`框架处理HTTP请求,具有高性能和低延迟的特点。 **优化措施**: - 使用异步处理 - 连接复用 - 批量处理 - 缓存机制 **性能指标**: - 请求处理时间 - 并发连接数 - 内存使用 - CPU使用 ```mermaid flowchart TD Start([请求处理]) --> ReceiveRequest["接收HTTP请求"] ReceiveRequest --> ParseRequest["解析请求"] ParseRequest --> ProcessRequest["处理请求"] ProcessRequest --> GenerateResponse["生成响应"] GenerateResponse --> SendResponse["发送响应"] SendResponse --> Complete["完成"] ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L222-L264) - [main.rs](file://crates/agent_runner/src/main.rs#L132-L171) ### 资源管理优化 系统实现了高效的资源管理机制,避免资源泄漏和性能下降。 **资源管理**: - 内存管理 - CPU管理 - 网络管理 - 存储管理 **优化措施**: - 资源限制 - 资源回收 - 资源监控 - 资源优化 ```mermaid flowchart TD Start([资源管理]) --> Memory["内存管理: 分配、释放、监控"] Memory --> CPU["CPU管理: 调度、限制、监控"] CPU --> Network["网络管理: 连接、带宽、监控"] Network --> Storage["存储管理: 读写、缓存、监控"] Storage --> Complete["完成"] ``` **Section sources** - [manager.rs](file://crates/docker_manager/src/manager.rs#L147-L175) - [types.rs](file://crates/docker_manager/src/types.rs#L51-L60) ## 安全考虑 ### 容器安全 系统在容器创建和运行时实施了多种安全措施。 **安全措施**: - 禁用`NET_RAW`和`NET_ADMIN`能力 - 禁用特权模式 - 使用非root用户运行 - 限制资源使用 - 网络隔离 **安全配置**: - `cap_drop`:移除危险能力 - `privileged`:禁用特权模式 - `user`:指定运行用户 - `memory`:限制内存使用 - `nano_cpus`:限制CPU使用 ```mermaid flowchart TD Start([容器安全]) --> DropCapabilities["移除NET_RAW和NET_ADMIN能力"] DropCapabilities --> DisablePrivileged["禁用特权模式"] DisablePrivileged --> LimitResources["限制资源使用"] LimitResources --> NetworkIsolation["网络隔离"] NetworkIsolation --> Complete["完成"] ``` **Section sources** - [manager.rs](file://crates/docker_manager/src/manager.rs#L153-L165) - [types.rs](file://crates/docker_manager/src/types.rs#L51-L60) ### 网络安全 系统在网络安全方面实施了多种措施,防止未授权访问和攻击。 **安全措施**: - 使用安全的网络配置 - 限制端口暴露 - 使用防火墙规则 - 监控网络流量 - 防止DDoS攻击 **网络配置**: - `network_mode`:设置网络模式 - `port_bindings`:限制端口映射 - `host_config`:配置主机安全 - `networking_config`:配置网络安全 ```mermaid flowchart TD Start([网络安全]) --> SecureNetwork["使用安全的网络配置"] SecureNetwork --> LimitPorts["限制端口暴露"] LimitPorts --> Firewall["使用防火墙规则"] Firewall --> MonitorTraffic["监控网络流量"] MonitorTraffic --> PreventDDoS["防止DDoS攻击"] PreventDDoS --> Complete["完成"] ``` **Section sources** - [manager.rs](file://crates/docker_manager/src/manager.rs#L178-L206) - [types.rs](file://crates/docker_manager/src/types.rs#L24-L26) ### 数据安全 系统在数据安全方面实施了多种措施,保护用户数据和系统数据。 **安全措施**: - 数据加密 - 访问控制 - 数据备份 - 数据审计 - 数据隔离 **数据保护**: - `encryption`:数据加密 - `authentication`:身份验证 - `authorization`:授权 - `backup`:数据备份 - `audit`:数据审计 ```mermaid flowchart TD Start([数据安全]) --> EncryptData["数据加密"] EncryptData --> AccessControl["访问控制"] AccessControl --> BackupData["数据备份"] BackupData --> AuditData["数据审计"] AuditData --> IsolateData["数据隔离"] IsolateData --> Complete["完成"] ``` **Section sources** - [config.rs](file://crates/rcoder/src/config.rs#L43-L44) - [types.rs](file://crates/docker_manager/src/types.rs#L15-L16) ## 配置选项与参数 ### 主要配置选项 系统提供了多种配置选项,便于用户根据需求进行定制。 **配置文件**:`config.yml` **主要配置项**: - `default_agent`:默认使用的AI代理类型 - `projects_dir`:项目工作目录 - `port`:主服务端口 - `proxy_config`:反向代理配置 - `docker_config`:Docker配置 ```mermaid flowchart TD Start([配置选项]) --> DefaultAgent["default_agent: 默认AI代理类型"] DefaultAgent --> ProjectsDir["projects_dir: 项目工作目录"] ProjectsDir --> Port["port: 主服务端口"] Port --> ProxyConfig["proxy_config: 反向代理配置"] ProxyConfig --> DockerConfig["docker_config: Docker配置"] DockerConfig --> Complete["完成"] ``` **Section sources** - [config.rs](file://crates/rcoder/src/config.rs#L38-L50) - [config.rs](file://crates/agent_runner/src/config.rs#L39-L49) ### 反向代理配置 反向代理配置允许用户自定义代理服务的行为。 **配置项**: - `listen_port`:代理服务监听端口 - `default_backend_port`:默认后端服务端口 - `backend_host`:后端服务主机地址 - `port_param`:端口参数名称 - `health_check`:健康检查配置 **健康检查配置**: - `enabled`:是否启用健康检查 - `interval_seconds`:检查间隔(秒) - `timeout_seconds`:超时时间(秒) - `healthy_threshold`:健康阈值 - `unhealthy_threshold`:不健康阈值 ```mermaid flowchart TD Start([代理配置]) --> ListenPort["listen_port: 监听端口"] ListenPort --> DefaultBackend["default_backend_port: 默认后端端口"] DefaultBackend --> BackendHost["backend_host: 后端主机"] BackendHost --> PortParam["port_param: 端口参数"] PortParam --> HealthCheck["health_check: 健康检查"] HealthCheck --> Enabled["enabled: 是否启用"] HealthCheck --> Interval["interval_seconds: 间隔"] HealthCheck --> Timeout["timeout_seconds: 超时"] HealthCheck --> Healthy["healthy_threshold: 健康阈值"] HealthCheck --> Unhealthy["unhealthy_threshold: 不健康阈值"] Unhealthy --> Complete["完成"] ``` **Section sources** - [config.rs](file://crates/rcoder/src/config.rs#L68-L80) - [config.rs](file://crates/agent_runner/src/config.rs#L61-L73) ### Docker配置 Docker配置允许用户自定义容器的行为。 **配置项**: - `multi_image_config`:多镜像配置 - `network_mode`:网络模式 - `work_dir`:工作目录 - `auto_cleanup`:自动清理 - `container_ttl_seconds`:容器存活时间(秒) **多镜像配置**: - `services`:服务配置 - `global_defaults`:全局默认配置 - `selection_strategy`:选择策略 - `cache_config`:缓存配置 ```mermaid flowchart TD Start([Docker配置]) --> MultiImage["multi_image_config: 多镜像配置"] MultiImage --> NetworkMode["network_mode: 网络模式"] NetworkMode --> WorkDir["work_dir: 工作目录"] WorkDir --> AutoCleanup["auto_cleanup: 自动清理"] AutoCleanup --> ContainerTTL["container_ttl_seconds: 容器存活时间"] ContainerTTL --> Complete["完成"] ``` **Section sources** - [config.rs](file://crates/rcoder/src/config.rs#L82-L96) - [types.rs](file://crates/docker_manager/src/types.rs#L176-L195) ## 组件关系 ### 核心组件关系 系统由多个核心组件组成,它们之间有明确的关系和依赖。 **主要组件**: - `rcoder`:主服务 - `agent_runner`:代理运行器 - `docker_manager`:Docker管理器 - `pingora-proxy`:反向代理 - `shared_types`:共享类型 **组件关系**: - `rcoder`依赖`docker_manager`和`pingora-proxy` - `agent_runner`依赖`docker_manager` - `rcoder`和`agent_runner`共享`shared_types` - `pingora-proxy`提供反向代理功能 ```mermaid classDiagram class Rcoder { +start() +load_config() +init_docker_manager() +start_proxy() } class AgentRunner { +start() +load_config() +run_agent() } class DockerManager { +create_container() +stop_container() +get_container_info() } class PingoraProxy { +start() +add_backend() +health_check() } class SharedTypes { +AgentType +ContainerInfo +AppError } Rcoder --> DockerManager : "使用" Rcoder --> PingoraProxy : "使用" AgentRunner --> DockerManager : "使用" Rcoder --> SharedTypes : "共享" AgentRunner --> SharedTypes : "共享" ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L1-L271) - [main.rs](file://crates/agent_runner/src/main.rs#L1-L179) ### 服务启动流程 服务启动时,各个组件按照特定顺序初始化和启动。 **启动流程**: 1. 初始化遥测系统 2. 解析命令行参数 3. 加载配置文件 4. 创建项目工作目录 5. 初始化Docker管理器 6. 启动代理服务 7. 启动HTTP服务器 ```mermaid sequenceDiagram participant Main as "main函数" participant Telemetry as "遥测系统" participant Config as "配置系统" participant Docker as "Docker管理器" participant Proxy as "代理服务" participant Server as "HTTP服务器" Main->>Telemetry : init_telemetry() Telemetry-->>Main : 初始化成功 Main->>Config : load_config_with_args() Config-->>Main : 返回配置 Main->>Main : create_dir_all(projects_dir) Main->>Docker : init_global_docker_manager() Docker-->>Main : 初始化成功 Main->>Proxy : start() Proxy-->>Main : 启动成功 Main->>Server : serve() Server-->>Main : 服务器运行 ``` **Section sources** - [main.rs](file://crates/rcoder/src/main.rs#L31-L271) - [main.rs](file://crates/agent_runner/src/main.rs#L30-L179) ### 请求处理流程 HTTP请求的处理流程涉及多个组件的协作。 **处理流程**: 1. 接收HTTP请求 2. 通过追踪中间件处理 3. 路由到相应处理器 4. 处理请求 5. 生成响应 6. 返回响应 ```mermaid sequenceDiagram participant Client as "客户端" participant Server as "HTTP服务器" participant Middleware as "追踪中间件" participant Router as "路由" participant Handler as "处理器" Client->>Server : HTTP请求 Server->>Middleware : 调用中间件 Middleware->>Middleware : 生成trace_id Middleware->>Middleware : 创建span Middleware->>Router : 调用下一个处理器 Router->>Handler : 路由到处理器 Handler->>Handler : 处理请求 Handler-->>Router : 返回响应 Router-->>Middleware : 返回响应 Middleware-->>Server : 返回响应 Server-->>Client : HTTP响应 ``` **Section sources** - [tracing_middleware.rs](file://crates/rcoder/src/middleware/tracing_middleware.rs#L72-L128) - [main.rs](file://crates/rcoder/src/main.rs#L220-L221)