pub async fn init_telemetry(
config: TelemetryConfig,
) -> Result<TelemetryCompletionHandler, Error>Expand description
Initialize telemetry for a Lambda function.
This function sets up OpenTelemetry for use in a Lambda function:
- Creates a tracer provider with the given configuration
- Sets it as the global tracer provider
- Registers the internal extension if running in async/finalize mode
- Configures the tracing subscriber with appropriate formatting
The function automatically handles:
- Propagation context setup
- Resource attribute management
- Extension registration based on mode
- Logging format configuration
§Examples
Using with Tower middleware:
use lambda_otel_lite::{init_telemetry, TelemetryConfig, OtelTracingLayer};
use lambda_runtime::{service_fn, Error, LambdaEvent, Runtime};
use tower::ServiceBuilder;
use aws_lambda_events::apigw::ApiGatewayV2httpRequest;
use serde_json::json;
async fn function_handler(event: LambdaEvent<ApiGatewayV2httpRequest>) -> Result<serde_json::Value, Error> {
Ok(json!({ "statusCode": 200 }))
}
#[tokio::main]
async fn main() -> Result<(), Error> {
// Initialize telemetry with default configuration
let completion_handler = init_telemetry(TelemetryConfig::default()).await?;
// Build service with OpenTelemetry tracing middleware
let service = ServiceBuilder::new()
.layer(OtelTracingLayer::new(completion_handler)
.with_name("my-handler"))
.service_fn(function_handler);
Runtime::new(service).run().await
}Using with traced handler:
use lambda_otel_lite::{init_telemetry, traced_handler, TelemetryConfig, TracedHandlerOptions};
use lambda_runtime::{service_fn, Error, LambdaEvent, Runtime};
use aws_lambda_events::apigw::ApiGatewayV2httpRequest;
use serde_json::json;
async fn function_handler(event: LambdaEvent<ApiGatewayV2httpRequest>) -> Result<serde_json::Value, Error> {
Ok(json!({ "statusCode": 200 }))
}
#[tokio::main]
async fn main() -> Result<(), Error> {
// Initialize telemetry with default configuration
let completion_handler = init_telemetry(TelemetryConfig::default()).await?;
// Create the Lambda service with tracing
let func = service_fn(move |event| {
traced_handler(
TracedHandlerOptions::default()
.with_name("my-handler")
.with_event(event),
completion_handler.clone(),
function_handler,
)
});
Runtime::new(func).run().await
}§Environment Variables
RUST_LOGorAWS_LAMBDA_LOG_LEVEL: Controls log filteringAWS_LAMBDA_LOG_FORMAT: Set to “JSON” for JSON formatted logs
§Arguments
config- Configuration for telemetry initialization
§Returns
Returns a TelemetryCompletionHandler for managing telemetry completion
§Errors
Returns an error if:
- Failed to build tracer provider
- Failed to register extension
- Failed to set up tracing subscriber