pyo3-opentelemetry

Crates.iopyo3-opentelemetry
lib.rspyo3-opentelemetry
version0.3.2-dev.1
sourcesrc
created_at2023-09-07 20:27:50.619746
updated_at2024-06-04 18:08:53.783184
descriptionMacro and utilities for passing OpenTelemetry context from Python to Rust
homepage
repositoryhttps://github.com/rigetti/pyo3-opentelemetry
max_upload_size
id966553
size12,614
(rigetti-githubbot)

documentation

README

PyO3 OpenTelemetry

Background

What this is

pyo3_opentelemetry provides a macro to simply and easily instrument your PyO3 bindings so that OpenTelemetry contexts can be easily passed from a Python caller into a Rust library. The #[pypropagate] macro instruments your Rust functions for you so that the global Python OpenTelemetry context is shared across the FFI boundary.

What this is not

  • This (currently) does not support propagating an OpenTelemetry context from Rust into Python.
  • This does not "magically" instrument Rust code. Without the #[pypropagate] attribute, Rust code is unaffected and will not attach the Python OpenTelemetry context.
  • This does not facilitate the processing or collection of OpenTelemetry spans; you still need to initialize and flush tracing providers and subscribers separately in Python and Rust. For more information, please see the respective OpenTelemetry documentation for Python and Rust.

Usage

For a complete functioning example, see the examples/pyo3-opentelemetry-lib/src/lib.rs example within this crate's repository.

From 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(())
}

These features require no Python code changes, however, opentelemetry-api must be installed.

Commit count: 0

cargo fmt