关于 rust-error-observability
面向 Rust 服务开发者的错误处理与遥测设计技能,协助在保障用户响应安全的同时提供运维诊断信息,涵盖错误类型、追踪和边界测试。
主要功能
- 01按用途梳理错误流
- 02选择类型化或不透明错误
- 03将错误映射为 HTTP 响应
- 04添加结构化追踪 Span
- 05避免重复日志和敏感数据
- 06测试响应与诊断路径
适用场景
- 01审查 Rust 服务的错误处理
- 02设计安全的 HTTP 错误响应
- 03添加请求与任务诊断信息
- 04检查日志中的机密和个人信息
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill rust-error-observability安装后在 Claude Code 中输入/rust-error-observability确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/error-boundaries.mdsecrets-and-pii.mdtracing.md详细介绍
Rust 错误可观测性
使用此技能,让 Rust 服务故障对运维人员清晰易懂,同时确保面向用户的响应安全。将错误处理与遥测视为同一个设计范畴。
核心工作流
- 梳理错误流:处理程序返回类型、服务/存储库错误、工作进程错误、中间件、日志和 tracing 配置。
- 按用途对每个错误分类:
- 领域或验证结果。
- 可恢复的控制流。
- 运维诊断信息。
- 面向用户的 HTTP 响应。
- 保持领域错误为强类型。对于调用方应当匹配的预期分支,使用
thiserror。 - 在基础设施边界添加上下文。如果调用方不应匹配每种依赖故障,则使用
anyhow或不透明的应用错误。 - 在每个框架中集中一处将错误映射为 HTTP 响应:
ResponseError、AxumIntoResponse,或一个小型适配函数。 - 优先添加结构化 span,而不是增加更多日志行。包含稳定的诊断字段,不要包含原始载荷或机密。
- 确保错误只记录一次。优先在可获取请求上下文的外层边界记录。
- 行为变更时,同时测试公开响应和诊断路径。
错误边界规则
- 领域模块返回领域错误,而不是 HTTP 状态码。
- 存储库模块附加查询或操作上下文,但不要记录每个错误。
- 处理程序将领域结果转换为响应类型,并让意外故障统一返回 500。
- 后台工作进程记录失败的作业 ID、尝试次数和后续操作。
- 在服务路径中避免使用
unwrap、expect或基于字符串的map_err,除非不变量仅在本地成立,且 panic 消息确有帮助。
选择 thiserror、anyhow、不透明错误和框架响应适配器时,请阅读 references/error-boundaries.md。
Tracing 规则
- 在请求处理程序、服务方法、出站客户端、数据库操作和工作进程作业的边界处添加埋点。
- 对请求正文、连接池、客户端、密码、令牌和大型值使用
#[tracing::instrument(skip(...))]。 - 在安全的情况下,附加请求 ID、用户 ID、租户 ID、作业 ID、上游名称和幂等键等字段。
- 不要记录机密、Cookie、密码哈希、Bearer 令牌或完整的个人身份信息。
有关 span、subscriber 配置和测试日志,请阅读 references/tracing.md。
处理包含机密的值之前,请阅读 references/secrets-and-pii.md。
HTTP 响应模式
保持响应错误稳定且明确:
pub enum SubscribeError {
Validation(SubscribeValidationError),
Unexpected(anyhow::Error),
}
impl actix_web::ResponseError for SubscribeError {
fn status_code(&self) -> actix_web::http::StatusCode {
match self {
Self::Validation(_) => actix_web::http::StatusCode::BAD_REQUEST,
Self::Unexpected(_) => actix_web::http::StatusCode::INTERNAL_SERVER_ERROR,
}
}
}
响应正文应对用户安全。trace 事件应包含运维人员所需的诊断上下文。
参考文件
references/error-boundaries.md:选择错误类型和响应适配器。references/tracing.md:span、字段、subscriber 配置和测试输出。references/secrets-and-pii.md:机密和敏感用户数据的脱敏规则。
评论
支持 Markdown