用途:这是 Maple 针对 Python 应用的 OpenTelemetry 接入风格规范,指导如何把追踪、指标和日志发送到 Maple 的 OTLP 端点。
主要能力与约定:
- 在模块作用域获取 OTel 对象,例如 tracer = trace.get_tracer("orders.api")、meter = metrics.get_meter("orders.api"),并创建计数器如 orders_submitted = meter.create_counter("orders.submitted", unit="1")。
- 有界工作使用装饰器 @tracer.start_as_current_span("order.submit"),同步与异步函数均适用;装饰器不适用时改用 with tracer.start_as_current_span(...) 上下文管理器。不要用分离式的 tracer.start_span(...) 加 span.end()。
- 错误路径:在活动 span 上调用 span.record_exception(exc) 并 span.set_status(Status(StatusCode.ERROR)),同时保留原有日志记录。
- 日志:若声明日志经 OTLP 转发,需配置 LoggerProvider、OTLPLogExporter 与 LoggingHandler,调用 set_logger_provider,并用 LoggingInstrumentor().instrument(set_logging_format=True) 做关联;保留原有 logging.basicConfig、控制台/文件 handler 与日志级别。
- 初始化:在 init 模块内联 endpoint 与 ingest key,不从环境变量读取;ingest key 为项目级只写密钥。示例端点 https://ingest.maple.dev,EU 为 https://ingest.eu.maple.dev。仅在可能重复调用时加 _INITIALIZED 守卫。
- 指标:计数器如 llm.tokens.input、llm.tokens.output、requests/events/jobs/errors,token 计数器用 unit="{token}";直方图用于 duration、latency、payload size。不要在应用侧添加 llm.cost_usd 定价指标,Maple 仅从 LLM span 的 gen_ai.usage.cost 显示成本。避免高基数指标属性,优先 tenant/org/project、operation/use case、provider/model、outcome 维度。
- FastAPI:使用原生插桩 pip install opentelemetry-instrumentation-fastapi,配合 FastAPIInstrumentor.instrument_app(app),不要用自定义中间件替代请求处理;需先导入 telemetry 并调用 init_observability()。
安装命令:pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http opentelemetry-instrumentation-logging。
限制:资料未提供 Maple 的收费、价格、平台支持范围或效果数据;具体部署环境变量与密钥获取方式暂未提供。