tracing-cloudwatch

Crates.iotracing-cloudwatch
lib.rstracing-cloudwatch
version0.2.0
sourcesrc
created_at2023-05-05 19:35:31.413549
updated_at2024-10-12 10:17:25.765086
descriptiontracing-subscriber layer that sends your application's tracing events(logs) to AWS CloudWatch Logs
homepage
repositoryhttps://github.com/ymgyt/tracing-cloudwatch
max_upload_size
id858004
size94,128
Yuta Yamaguchi (ymgyt)

documentation

README

tracing-cloudwatch

tracing-cloudwatch is a custom tracing-subscriber layer that sends your application's tracing events(logs) to AWS CloudWatch Logs.

We have supported rusoto and the AWS SDK as AWS clients.

Usage

With AWS SDK

feature awssdk required

use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

#[tokio::main]
async fn main() {
    let config = aws_config::load_from_env().await;
    let cw_client = aws_sdk_cloudwatchlogs::Client::new(&config);

    tracing_subscriber::registry::Registry::default()
        .with(
            tracing_cloudwatch::layer().with_client(
                cw_client,
                tracing_cloudwatch::ExportConfig::default()
                    .with_batch_size(5)
                    .with_interval(std::time::Duration::from_secs(1))
                    .with_log_group_name("tracing-cloudwatch")
                    .with_log_stream_name("stream-1"),
            )
            .with_code_location(true)
            .with_target(false),
        )
        .init();
}

With Rusoto

feature rusoto required

use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

#[tokio::main]
async fn main() {
    let cw_client = rusoto_logs::CloudWatchLogsClient::new(rusoto_core::Region::ApNortheast1);

    tracing_subscriber::registry::Registry::default()
        .with(
            tracing_cloudwatch::layer().with_client(
                cw_client,
                tracing_cloudwatch::ExportConfig::default()
                    .with_batch_size(5)
                    .with_interval(std::time::Duration::from_secs(1))
                    .with_log_group_name("tracing-cloudwatch")
                    .with_log_stream_name("stream-1"),
            )
            .with_code_location(true)
            .with_target(false),
        )
        .init();
}

Using pre-configured tracing_subsriber::fmt::Layer

You can specify a pre-configured fmt::Layer to control the log format. For example, the following example outputs the logs in JSON format.

tracing_subscriber::registry::Registry::default()
    .with(tracing_cloudwatch::layer()
        .with_fmt_layer(
            tracing_subscriber::fmt::layer()
                .json()
                .without_time()
        )
    )
    .init();

Required Permissions

Currently, following AWS IAM Permissions required

  • logs:PutLogEvents

CloudWatch Log Groups and Streams

This crate does not create a log group and log stream, so if the specified log group and log stream does not exist, it will raise an error.

Retry and Timeout

We haven't implemented any custom retry logic or timeout settings within the crate. We assume that these configurations are handled through the SDK Client.
For instance, in the AWS SDK, you can set up these configurations using timeout_config and retry_config

License

This project is licensed under the MIT license.

Commit count: 37

cargo fmt