# 健康检查接口 **本文引用的文件列表** - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs) - [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs) - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs) - [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs) - [README.md](file://README.md) - [docker/Dockerfile](file://docker/Dockerfile) - [crates/rcoder/src/rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考量](#性能考量) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件面向RCoder项目的健康检查API,聚焦GET /health端点的HTTP方法、URL模式、响应格式与行为语义。文档解释该接口如何用于系统状态监控与负载均衡器健康探测,给出成功与失败场景的JSON结构说明,阐述服务启动时的验证作用,并提供在Kubernetes等容器编排系统中的集成方式、curl示例与客户端实现要点,以及性能监控与超时处理的最佳实践。 ## 项目结构 - 健康检查端点在两个主要服务中均可用: - rcoder主服务:提供HTTP API与健康检查 - agent_runner服务:同样提供健康检查端点 - 路由注册与OpenAPI文档由各服务的router模块负责 - 服务启动时绑定端口并启动HTTP服务器,健康检查端点即随服务启动而可用 ```mermaid graph TB subgraph "rcoder主服务" RMain["main.rs
启动HTTP服务器"] RRouter["router.rs
路由注册 /health"] RHandler["health_handler.rs
健康检查处理器"] end subgraph "agent_runner服务" AMain["main.rs
启动HTTP服务器"] ARouter["router.rs
路由注册 /health"] AHandler["health_handler.rs
健康检查处理器"] end RMain --> RRouter --> RHandler AMain --> ARouter --> AHandler ``` 图表来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66) - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171) - [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36) 章节来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66) - [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52) ## 核心组件 - 健康检查处理器 - 路径:/health - 方法:GET - 响应:JSON对象,包含status、timestamp、service字段 - 路由注册 - rcoder:在router.rs中将GET /health绑定到处理器 - agent_runner:同理 - 服务启动 - main.rs中创建Axum Router并绑定TCP监听,健康检查端点随服务启动而可用 章节来源 - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66) - [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52) - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171) ## 架构总览 健康检查端点作为系统健康状态的快速探测入口,既可用于内部监控,也可供外部负载均衡器/编排系统进行存活探针。在rcoder中,健康检查端点位于HTTP API层,不依赖业务逻辑,因此其可用性直接反映服务进程的启动与HTTP服务器的就绪状态。 ```mermaid sequenceDiagram participant LB as "负载均衡器/探针" participant HTTP as "HTTP服务器(Axum)" participant Router as "路由(/health)" participant Handler as "健康检查处理器" LB->>HTTP : GET /health HTTP->>Router : 分发请求 Router->>Handler : 调用处理器 Handler-->>HTTP : 返回JSON响应 HTTP-->>LB : 200 OK 或错误码 ``` 图表来源 - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66) - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36) ## 详细组件分析 ### 健康检查端点定义与响应 - HTTP方法与URL模式 - 方法:GET - 路径:/health - 响应结构 - status:字符串,表示服务健康状态 - timestamp:UTC时间戳 - service:服务标识 - 成功响应 - HTTP状态码:200 OK - 响应体:包含上述字段的JSON对象 - 失败响应 - 当HTTP服务器未启动或路由未注册时,可能出现非200的状态码(例如5xx) - 由于健康检查处理器不进行数据库或其他外部依赖的深度校验,一般不会出现500错误;若出现,通常表示服务启动异常或中间件/路由配置问题 ```mermaid flowchart TD Start(["请求进入 /health"]) --> Route["匹配路由 /health"] Route --> HandlerCall["调用健康检查处理器"] HandlerCall --> BuildResp["构造响应对象(status, timestamp, service)"] BuildResp --> ReturnOK["返回 200 OK + JSON"] ReturnOK --> End(["结束"]) ``` 图表来源 - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36) 章节来源 - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36) ### 服务启动与健康检查可用性 - rcoder主服务 - main.rs中创建Axum Router并绑定监听端口,随后启动HTTP服务器 - 启动日志明确打印了API端点信息,包括GET /health - agent_runner服务 - 同样在main.rs中绑定监听端口并启动HTTP服务器 - 路由注册中包含GET /health ```mermaid sequenceDiagram participant Main as "main.rs" participant Router as "router.rs" participant Server as "HTTP服务器(Axum)" Main->>Router : create_router(state) Router-->>Main : 返回Router Main->>Server : 绑定监听端口并启动 Server-->>Main : 服务就绪 Note over Main,Server : /health 端点随服务启动而可用 ``` 图表来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171) - [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52) 章节来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171) ### 在Kubernetes等容器编排系统中的集成 - 健康检查配置 - Dockerfile中定义了HEALTHCHECK指令,使用curl对http://localhost:PORT/health进行探测 - 默认端口为8087(来自rcoder_default.yml中的port字段) - 推荐配置 - 在Kubernetes中,使用livenessProbe/readinessProbe指向同一端点 - 建议将探针超时时间设置为小于探测周期,避免长时间阻塞导致误判 - 若使用代理(Pingora),建议直接对代理监听端口进行探测,或在代理层暴露健康检查端点 章节来源 - [docker/Dockerfile](file://docker/Dockerfile#L296-L304) - [crates/rcoder/src/rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml#L10-L12) ### curl命令示例与客户端实现指南 - curl示例 - GET http://localhost:8087/health - 客户端实现要点 - 使用HTTP客户端库发起GET请求 - 解析JSON响应,读取status、timestamp、service字段 - 对于200以外的状态码,视为不健康 - 设置合理的超时时间,避免阻塞 章节来源 - [README.md](file://README.md#L229-L242) ### 健康检查与负载均衡器健康探测 - 健康检查处理器不进行外部依赖(如数据库、代理后端)的深度校验,仅反映服务进程与HTTP服务器的就绪状态 - 负载均衡器可将其作为存活探针,结合探针超时、重试次数与周期进行综合判断 - 若需要对代理后端进行健康探测,可参考代理健康检查配置(见下一节) 章节来源 - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98) - [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596) ## 依赖关系分析 - 路由到处理器的依赖 - rcoder与agent_runner分别在各自的router.rs中注册GET /health - 处理器在各自handler/health_handler.rs中实现 - 服务启动依赖 - main.rs负责创建Router并启动HTTP服务器 - 代理健康检查(额外能力) - rcoder的ProxyConfig包含HealthCheckConfig - Pingora服务实现健康检查循环,定期对后端端口进行连通性探测 ```mermaid graph LR RMain["rcoder/main.rs"] --> RRouter["rcoder/router.rs"] RRouter --> RHandler["rcoder/handler/health_handler.rs"] AMain["agent_runner/main.rs"] --> ARouter["agent_runner/router.rs"] ARouter --> AHandler["agent_runner/handler/health_handler.rs"] Config["rcoder/config.rs
ProxyConfig/HealthCheckConfig"] --> PingoraSvc["pingora-proxy/service.rs
健康检查循环"] ``` 图表来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265) - [crates/rcoder/src/router.rs](file://crates/rcoder/src/router.rs#L52-L66) - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171) - [crates/agent_runner/src/router.rs](file://crates/agent_runner/src/router.rs#L40-L52) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36) - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98) - [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596) 章节来源 - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98) - [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596) ## 性能考量 - 健康检查处理器为纯内存计算,开销极低,适合高频探测 - 探测周期与超时设置建议 - 周期:根据业务SLA设定,常见为10-30秒 - 超时:建议小于周期,避免探针阻塞影响其他请求 - 在Kubernetes中,合理设置initialDelaySeconds、periodSeconds、timeoutSeconds与failureThreshold,避免误判 - 若使用代理(Pingora),可利用其健康检查能力对后端进行更细粒度的探测 章节来源 - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L124-L134) - [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L581-L591) ## 故障排查指南 - 无法访问/health - 检查服务是否已启动并绑定到预期端口 - 确认防火墙与网络策略允许访问 - 响应非200 - 查看服务日志,定位路由或中间件异常 - 确认路由注册是否正确 - 健康检查频繁失败 - 检查探针超时与周期设置 - 在Kubernetes中适当增大failureThreshold,避免抖动 - 代理健康检查相关 - 确认ProxyConfig中的health_check.enabled、interval_seconds、timeout_seconds配置 - 检查后端端口连通性 章节来源 - [crates/rcoder/src/main.rs](file://crates/rcoder/src/main.rs#L222-L265) - [crates/agent_runner/src/main.rs](file://crates/agent_runner/src/main.rs#L132-L171) - [crates/rcoder/src/config.rs](file://crates/rcoder/src/config.rs#L52-L98) - [crates/pingora-proxy/src/service.rs](file://crates/pingora-proxy/src/service.rs#L556-L596) ## 结论 GET /health端点为RCoder提供了轻量、可靠的健康状态探测入口,适用于服务启动验证与负载均衡器健康探测。其简单实现确保了低开销与高可用性。在生产环境中,建议结合探针超时、周期与重试策略,以及必要时启用代理健康检查,以获得更全面的健康状态视图。 ## 附录 ### API定义与示例 - 端点:GET /health - 响应示例(成功) - 状态码:200 OK - 响应体:包含status、timestamp、service字段的JSON对象 - 响应示例(失败) - 状态码:非200(例如5xx) - 响应体:错误信息(由HTTP服务器或中间件决定) 章节来源 - [crates/rcoder/src/handler/health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [crates/agent_runner/src/handler/health_handler.rs](file://crates/agent_runner/src/handler/health_handler.rs#L1-L36) - [README.md](file://README.md#L229-L242) ### 集成与最佳实践 - curl示例 - curl -X GET http://localhost:8087/health - Kubernetes集成 - 使用livenessProbe/readinessProbe指向同一端点 - HEALTHCHECK已在Dockerfile中定义,可直接复用 - 超时与周期 - 建议周期10-30秒,超时小于周期 - failureThreshold根据稳定性需求调整 章节来源 - [README.md](file://README.md#L229-L242) - [docker/Dockerfile](file://docker/Dockerfile#L296-L304)