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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
//! # 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 these main modules:
//!
//! - `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.
//! - `otel`: Provides utilities for configuring and building tracing subscribers
//! with support for OpenTelemetry and other layers.
//! - `subscriber`: Provides utilities for configuring and building tracing subscribers
//! with support for OpenTelemetry and other layers.
//!
//! ## Example
//!
//! ```rust,no_run
//! use lambda_otel_utils::{HttpTracerProviderBuilder, HttpMeterProviderBuilder};
//! use lambda_runtime::{service_fn, Error as LambdaError, LambdaEvent, Runtime};
//! use lambda_runtime::layers::{OpenTelemetryLayer, OpenTelemetryFaasTrigger};
//! use aws_lambda_events::event::apigw::ApiGatewayProxyRequest;
//! use serde_json::Value;
//! use std::time::Duration;
//!
//! async fn function_handler(event: LambdaEvent<ApiGatewayProxyRequest>) -> Result<Value, LambdaError> {
//! Ok(serde_json::json!({"message": "Hello, World!"}))
//! }
//!
//! #[tokio::main]
//! async fn main() -> Result<(), LambdaError> {
//! let tracer_provider = HttpTracerProviderBuilder::default()
//! .with_stdout_client()
//! .enable_global(true)
//! .build()?;
//!
//! let meter_provider = HttpMeterProviderBuilder::default()
//! .with_stdout_client()
//! .with_meter_name("my-lambda-function")
//! .with_export_interval(Duration::from_secs(60))
//! .build()?;
//!
//! let service = service_fn(function_handler);
//!
//! let runtime = Runtime::new(service_fn(function_handler))
//! .layer(
//! OpenTelemetryLayer::new(|| {
//! tracer_provider.force_flush();
//! meter_provider.force_flush();
//! }
//! )
//! .with_trigger(OpenTelemetryFaasTrigger::Http)
//! );
//!
//! runtime.run().await
//! }
//! ```
//!
//! 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 OpenTelemetry layer.
pub mod http_meter_provider;
pub mod http_tracer_provider;
pub mod protocol;
pub mod resource;
pub mod subscriber;
pub mod vended;
pub use http_meter_provider::HttpMeterProviderBuilder;
pub use http_tracer_provider::HttpTracerProviderBuilder;
pub use lambda_runtime::tower::Layer;
pub use opentelemetry::metrics::MeterProvider;
pub use opentelemetry::trace::TracerProvider;
pub use subscriber::{
create_otel_metrics_layer, create_otel_tracing_layer, init_otel_subscriber,
OpenTelemetrySubscriberBuilder,
};
pub use vended::lambda_runtime_otel::{OpenTelemetryFaasTrigger, OpenTelemetryLayer};
#[cfg(doctest)]
extern crate doc_comment;
#[cfg(doctest)]
use doc_comment::doctest;
#[cfg(doctest)]
doctest!("../README.md", readme);