| Crates.io | metrics_cloudwatch |
| lib.rs | metrics_cloudwatch |
| version | 4.0.0 |
| created_at | 2020-02-14 13:53:23.779046+00 |
| updated_at | 2025-01-20 14:56:28.929683+00 |
| description | CloudWatch emitter for the metrics crate |
| homepage | https://github.com/ramn/metrics_cloudwatch |
| repository | https://github.com/ramn/metrics_cloudwatch |
| max_upload_size | |
| id | 208934 |
| size | 135,993 |
Provide a backend for the metrics facade
crate, pushing metrics to CloudWatch.
Credentials for AWS needs to be available in the environment, see AWS docs on setting up AWS credentials
cargo add -s metrics metrics_cloudwatch
#[tokio::main]
async fn main() {
let sdk_config = aws_config::defaults(aws_config::BehaviorVersion::latest())
.load()
.await;
let client = aws_sdk_cloudwatch::Client::new(&sdk_config);
// Initialize the backend
tokio::spawn(metrics_cloudwatch::Builder::new()
.cloudwatch_namespace("my-namespace")
.init_future(client, metrics::set_global_recorder));
metrics::counter!("requests").increment(1);
}
Any labels specified will map to Cloudwatch dimensions
metrics::histogram!("histogram", "dimension_name" => "dimension_value").record(100.0);
Specifying the empty string for the value will remove the default dimension of the same name from the metric.
metrics::histogram!("histogram", "dimension_name" => "").record(100.0);
The special @unit label accepts a metrics_cloudwatch::Unit which specifies the unit for the metric (the unit can also be specified when registering the metric). Other @ prefixed labels are ignored.
metrics::histogram!("histogram", "@unit" => metrics_cloudwatch::Unit::Seconds).record(100.0);
The CloudWatch metrics API imposes some limitations.
timing!() and value!()) per API
call. Going beyond this works but will incur one API call per batch of 150
unique values. Could be a good idea to measure timing in milliseconds rather
than nanoseconds, to keep down the number of unique values.