11 个版本
0.3.2-rc.0 | 2024 年 3 月 2 日 |
---|---|
0.3.2-dev.1 | 2024 年 6 月 4 日 |
0.3.2-dev.0 | 2024 年 5 月 31 日 |
0.3.1 | 2023 年 12 月 18 日 |
0.1.0 | 2023 年 9 月 7 日 |
#364 在 过程宏 中
每月下载量 581 次
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 文档中的 Python 和 Rust。
用法
有关完整功能的示例,请参阅该 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