| Crates.io | pigeon_telemetry |
| lib.rs | pigeon_telemetry |
| version | 0.2.0 |
| created_at | 2025-06-06 14:06:50.480046+00 |
| updated_at | 2025-06-11 12:18:51.537394+00 |
| description | NOLAI standardized OpenTelemetry setup for Rust applications |
| homepage | https://gitlab.science.ru.nl/nolai/utils/pigeon-telemetry |
| repository | https://gitlab.science.ru.nl/nolai/utils/pigeon-telemetry |
| max_upload_size | |
| id | 1703041 |
| size | 63,866 |
NOLAI standardized OpenTelemetry setup for Rust applications.
add this to you Cargo.toml
[dependencies]
pigeon_telemetry = "0.2.0"
tracing = "0.1.41"
tracing-actix-web = { version = "0.7.18", features = ["opentelemetry_0_29"] }
use pigeon_telemetry::{init_telemetry,shutdown_telemetry,TelemetryConfig};
use tracing::info;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Configure from environment variables
let config = TelemetryConfig::from_env();
let telemetry = init_telemetry(config).map_err(|e| {
eprintln!("Failed to initialize telemetry: {}", e);
std::io::Error::other("Telemetry initialization failed")
})?;
// Create a span for the main function
let main_span = info_span!("startup", service=%config.service_name, version=%config.service_version);
let _guard = main_span.enter();
// Normal application logic goes here
// Graceful shutdown
pigeon_telemetry::shutdown_telemetry(telemetry).await;
Ok(())
}
// On every function that needs tracing
#[instrument(skip(req))]
pub async fn example_request<T: RedisStorage>(
req: HttpRequest,
path: web::Path<(String, String)>,
) -> Result<HttpResponse, Error> {
// Function logic here
Ok(HttpResponse::Ok().finish())
}
// Example of logging
use tracing::info;
info!("Application started");
// Example of sending a request to an external service
#[instrument(skip(self, request), fields(base_url = %self.base_url))]
async fn send_request() -> Result<Response, AWError> {
// TracedHttpClient is a wrapper around reqwest::Client that automatically adds tracing spans
let client = TracedHttpClient::new();
let response = client
.post(&url)
.header("Authorization", format!("Bearer {}", self.token))
.json(&encrypted_request)
.send()
.await
.map_err(|e| {
error!("Error sending activity request: {:?}", e);
ErrorInternalServerError(format!("Request error: {}", e))
})?;
}
| Variable | Description |
|---|---|
SERVICE_NAME |
Override service name |
SERVICE_VERSION |
Override service version (OPTIONAL) |
OTLP_ENDPOINT |
OTLP endpoint URL (e.g., https://otlp.nolai.fyi) |
RUST_LOG |
Log level filter (e.g., info,actix_web=warn,actix_server=warn) |