本技能整理 Sentry 后端在日志、追踪、指标与配置项方面的编码规范,适用于在 Sentry 仓库中新增或修改 Python 代码时参考。
一、Options 系统。所有选项集中在 src/sentry/options/defaults.py 注册,注册时必须提供默认值。读取时调用 options.get("选项名"),不要再传第二个默认参数,因为系统总会返回已注册的默认值,重复传参会造成冗余甚至不一致。示例:options.get("deletions.group-hash-metadata.batch-size") 正确;options.get("deletions.group-hash-metadata.batch-size", 1000) 错误。
二、日志。使用结构化日志,logger.info("事件名", extra={...})。规则 LOG005 要求在异常处理中使用 logger.exception() 而非 logger.error()。规则 LOG011 要求避免用 f-string 或 .format() 预格式化日志消息,改用 %-格式化实现延迟求值,或仅通过 extra 传结构化字段。分析事件用 analytics.record(...) 记录。
三、追踪 / Span。应使用 sentry.utils.tracing 中的包装函数而非直接调用 SDK,这是当前 Span First 流式追踪生命周期落地阶段的硬性要求。start_span 替代 sentry_sdk.start_span;start_span(transaction=True) 替代 start_transaction;set_span_tag / set_span_data 替代 span.set_tag / span.set_data。不需要设置标签或数据时无需捕获 span,需要时用 as span 捕获。
四、属性命名。新增 Tag 或属性前,先查 sentry_conventions.attributes.ATTRIBUTE_NAMES 是否已有标准名,该常量由 OTel 语义约定加 Sentry 自有模型生成。优先复用约定名,避免自造 key 导致同一概念数据被拆散。仅当概念确实未被覆盖时才用自定义 key,并优先使用带命名空间的描述性名称。
五、指标标签。每个不同的标签值组合都是独立时间序列,因此标签要保持低基数、有意义且尽量少:只在确实会按它过滤或分组时才加;值必须有界可枚举(如 status、platform、reason),不得使用 ID、邮箱、URL、自由文本等无界值。中间件 src/sentry/metrics/middleware.py 会拒绝以 _id 结尾或等于 event/project/group 的标签键,默认静默剥离,开启 SENTRY_METRICS_DISALLOW_BAD_TAGS(如 CI)时会抛 BadMetricTags,导致本地正常的指标在别处失败。少数键在 _NOT_BAD_TAGS 白名单中,不要为绕过限制而扩充白名单,应改选低基数标签。
使用方式:上述规范以仓库内技能形式提供,实际落地依赖 Sentry 内部代码库与相关包,暂无公开安装命令或独立运行步骤。限制与完整细节以仓库内规范为准,本次资料未提供版本、依赖与更新信息。