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
bash
cargo add -s metrics metrics_cloudwatch
```rust fn main() { // Initialize the backend metricscloudwatch::builder() .cloudwatchnamespace("my-namespace") .init_thread() .unwrap();
metrics::counter!("requests", 1);
} ```
Any labels specified will map to Cloudwatch dimensions
rust
metrics::histogram!("histogram", 100.0, "dimension_name" => "dimension_value");
Specifying the empty string for the value will remove the default dimension of the same name from the metric.
rust
metrics::histogram!("histogram", 100.0, "dimension_name" => "");
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.
rust
metrics::histogram!("histogram", 100.0, "@unit" => metrics_cloudwatch::Unit::Seconds);
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.