#pyo3 #open-telemetry #tracing #macro #python #python-bindings

pyo3-opentelemetry

用于将 OpenTelemetry 上下文从 Python 传递到 Rust 的宏和工具

11 个版本

0.3.2-rc.02024 年 3 月 2 日
0.3.2-dev.12024 年 6 月 4 日
0.3.2-dev.02024 年 5 月 31 日
0.3.1 2023 年 12 月 18 日
0.1.0 2023 年 9 月 7 日

#364过程宏

Download history 63/week @ 2024-05-27 110/week @ 2024-06-03 31/week @ 2024-06-10 22/week @ 2024-06-24 28/week @ 2024-07-01 365/week @ 2024-07-08 60/week @ 2024-07-15 81/week @ 2024-07-22 386/week @ 2024-07-29 50/week @ 2024-08-05

每月下载量 581 次

Apache-2.0 协议

14KB
138 行代码

PyO3 OpenTelemetry

背景

这是什么

pyo3_opentelemetry 提供了一个宏,可以简单地为你设置 PyO3 绑定的代码,以便 OpenTelemetry 上下文可以轻松地从 Python 调用者传递到 Rust 库。宏 #[pypropagate] 会为你设置 Rust 函数,以便全局 Python OpenTelemetry 上下文可以跨 FFI 边界共享。

这不是什么

  • (目前)不支持从 Rust 传递 OpenTelemetry 上下文到 Python。
  • 这不会“神奇地”设置 Rust 代码。如果没有 #[pypropagate] 属性,Rust 代码不受影响,并且不会附加 Python OpenTelemetry 上下文。
  • 这不会促进 OpenTelemetry 跨度的处理或收集;你仍然需要在 Python 和 Rust 中分别单独初始化和刷新跟踪提供者和订阅者。有关更多信息,请参阅相应 OpenTelemetry 文档中的 PythonRust

用法

有关完整功能的示例,请参阅该 crate 仓库中的 examples/pyo3-opentelemetry-lib/src/lib.rs 示例。

从 Rust

use pyo3_opentelemetry::prelude::*;
use pyo3::prelude::*;
use tracing::instrument;

#[pypropagate]
#[pyfunction]
#[instrument]
fn my_function() {
  println!("span \"my_function\" is active and will share the Python OpenTelemetry context");
}

#[pymodule]
fn my_module(_py: Python, m: &PyModule) -> PyResult<()> {
   m.add_function(wrap_pyfunction!(my_function, m)?)?;
   Ok(())
}

这些功能不需要更改 Python 代码,但是必须安装 opentelemetry-api

依赖项

~7–12MB
~149K SLoC