用途:为 Python 应用加入可观测性能力,即结构化日志、指标(Prometheus)与分布式追踪,便于在生产环境回答“发生了什么、在哪、为什么”,无需部署新代码。适用时机包括:为应用添加结构化日志、实现指标采集、跨服务设置分布式追踪、在请求链路中传播关联 ID、调试生产问题、构建可观测性看板。
主要概念:一是结构化日志,生产环境以 JSON 输出并保持字段一致,便于机器查询与告警,本地开发可考虑人类可读格式;二是四大黄金信号,在每个服务边界追踪延迟、流量、错误与饱和度;三是关联 ID,为单个请求在所有日志与 span 中贯穿唯一 ID,实现端到端追踪;四是有界基数,指标标签值须有界,像用户 ID 这类无界标签会推高存储成本。
使用方式:以 structlog 为例,配置 processors 链(如合并上下文变量、添加日志级别、ISO 时间戳、异常格式化、JSON 渲染),通过 structlog.get_logger() 获取 logger 并记录字段化事件。日志级别应语义一致:DEBUG 用于开发诊断,INFO 用于请求生命周期与操作,WARNING 用于可恢复异常,ERROR 用于需关注的失败;不要把预期行为(如用户输错密码)记为 ERROR。关联 ID 可通过 contextvars 与 structlog.contextvars.bind_contextvars 设置,在 FastAPI 中用中间件读取 X-Correlation-ID 或生成新 ID,并写入响应头,调用下游服务时在请求头携带该 ID。
限制与说明:资料提到更详细的进阶模式位于 references/details.md,此处未展开;未提供具体安装命令、版本要求、支持的框架清单或与其它库的对比,这些暂未提供。最佳实践包括使用结构化日志、传播关联 ID、追踪四大黄金信号、限制标签基数、在合适级别记录日志、在日志中带上用户 ID 与请求 ID 等上下文、使用上下文管理器统一计时与错误处理、将可观测性代码与业务逻辑分离、在集成测试中验证日志与指标,并配置告警。