lambda_otel_utils/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
//! # lambda-otel-utils
//!
//! `lambda-otel-utils` is a Rust library that provides utilities for integrating
//! OpenTelemetry tracing and metrics with AWS Lambda functions. It simplifies the process of
//! setting up and configuring OpenTelemetry for use in serverless environments.
//!
//! ## Main Components
//!
//! This crate consists of three main modules:
//!
//! - `http_otel_layer`: Provides the `HttpOtelLayer` for propagating
//! context across HTTP boundaries.
//! - `http_tracer_provider`: Offers the `HttpTracerProviderBuilder` for configuring and
//! building a custom TracerProvider tailored for Lambda environments.
//! - `http_meter_provider`: Provides the `HttpMeterProviderBuilder` for configuring and
//! building a custom MeterProvider tailored for Lambda environments.
//!
//! ## Example
//!
//! ```rust,no_run
//! use lambda_runtime::{service_fn, Error, LambdaEvent};
//! use aws_lambda_events::event::apigw::ApiGatewayProxyRequest;
//! use lambda_otel_utils::{HttpOtelLayer, HttpTracerProviderBuilder, HttpMeterProviderBuilder};
//! use serde_json::Value;
//! use lambda_runtime::tower::Layer;
//! use std::time::Duration;
//!
//! async fn function_handler(event: LambdaEvent<ApiGatewayProxyRequest>) -> Result<Value, Error> {
//! Ok(serde_json::json!({"message": "Hello from Lambda!"}))
//! }
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Error> {
//! // Initialize tracer provider
//! let tracer_provider = HttpTracerProviderBuilder::default()
//! .with_stdout_client()
//! .with_tracer_name("my-lambda-function")
//! .build()?;
//!
//! // Initialize meter provider
//! let meter_provider = HttpMeterProviderBuilder::default()
//! .with_stdout_client()
//! .with_meter_name("my-lambda-function")
//! .with_export_interval(Duration::from_secs(60))
//! .build()?;
//!
//! // Clone providers for the flush function
//! let tracer_provider_clone = tracer_provider.clone();
//! let meter_provider_clone = meter_provider.clone();
//!
//! // Create service with tracing layer
//! let service = HttpOtelLayer::new(move || {
//! tracer_provider_clone.force_flush();
//! meter_provider_clone.force_flush();
//! })
//! .layer(service_fn(function_handler));
//!
//! // Run the Lambda runtime
//! lambda_runtime::run(service).await?;
//! Ok(())
//! }
//! ```
//!
//! This example demonstrates how to set up a comprehensive tracing and metrics configuration using
//! `lambda-otel-utils` in a Lambda function, including both the TracerProvider, MeterProvider, and
//! the context propagation layer.
pub mod http_meter_provider;
pub mod http_otel_layer;
pub mod http_tracer_provider;
pub use http_meter_provider::HttpMeterProviderBuilder;
pub use http_otel_layer::HttpOtelLayer;
pub use http_tracer_provider::HttpTracerProviderBuilder;
pub use lambda_runtime::tower::Layer;