用途
python-observability-patterns 提供 Python 应用的可观测性(Observability)模式,主题为“面向生产应用的日志、指标与追踪”。它把结构化日志、指标采集、分布式追踪三类常见能力整理为可参考的代码模式,便于在 Python 项目中落地。
主要能力
结构化日志(structlog)
资料演示了通过 structlog.configure 配置处理链:合并 contextvars 上下文、添加日志级别、使用 ISO 格式时间戳、以 JSONRenderer 输出 JSON。同时设置过滤级别(示例为 logging.INFO)、context_class 为 dict、logger_factory 为 PrintLoggerFactory。
用法示例为 logger.info("user_created", user_id=123, email="test@example.com"),输出形如 {"event": "user_created", "user_id": 123, "email": "test@example.com", "level": "info", "timestamp": "2024-01-15T10:00:00Z"} 的 JSON。
请求上下文传播
资料给出基于 contextvars 的 request_id 绑定方式:定义 ContextVar,提供 bind_request_context 函数生成或接收 request_id,并调用 structlog.contextvars.bind_contextvars 绑定。示例还展示了 FastAPI 中间件:从 X-Request-ID 请求头读取或生成 UUID,绑定上下文,在响应头写回 X-Request-ID,最后清理上下文变量。
Prometheus 指标
使用 prometheus_client 的 Counter、Histogram、Gauge 与 generate_latest。示例定义了 http_requests_total(标签 method、endpoint、status)、http_request_duration_seconds(标签 method、endpoint,buckets 为 0.01、0.05、0.1、0.5、1.0、5.0)与 active_connections。
中间件示例在请求前后增减 ACTIVE_CONNECTIONS、使用 time.perf_counter() 统计耗时,并按标签记录请求计数与延迟。通过 /metrics 端点以 text/plain 返回 generate_latest() 的结果。
OpenTelemetry 追踪
示例从 opentelemetry 引入 trace,使用 TracerProvider、BatchSpanProcessor 与 OTLPSpanExporter(示例端点为 localhost:4317)完成初始化,并设置全局 TracerProvider,通过 trace.get_tracer(name) 获取 tracer。
手动埋点示例在 process_order 中开启名为 process_order 的 span,设置 order_id 属性,并在其内部嵌套 validate_order、charge_payment 两个子 span。
使用方式
资料以代码示例与速查表呈现,未提供安装命令或完整工程步骤。使用需自行安装所涉库(structlog、prometheus-client、opentelemetry 相关包),并按示例配置。速查表列出的库与用途对应关系:structlog 用于结构化日志,prometheus-client 用于指标采集,opentelemetry 用于分布式追踪。指标类型速查:Counter 用于总请求数、错误数;Histogram 用于延迟、大小;Gauge 用于当前连接数、队列长度。
适用场景
- 为 Python 服务(示例以 FastAPI 中间件形式)增加结构化日志与请求上下文。
- 采集 HTTP 请求计数、延迟与连接数等指标并暴露给 Prometheus 抓取。
- 使用 OpenTelemetry 做分布式追踪与手动埋点。
限制与关联
资料未提供价格、收费、性能数据、完整安装命令与平台支持说明,均暂未提供。文档末尾列出前置技能 python-async-patterns(异步上下文传播)、相关技能 python-fastapi-patterns(指标/追踪的 API 中间件)、python-cli-patterns(CLI 日志模式),以及集成技能 python-database-patterns(数据库查询追踪)。同时提供参考文档索引:./references/structured-logging.md、./references/metrics.md、./references/tracing.md,以及资源文件 ./assets/logging-config.py(生产日志配置)。