metrics_cloudwatch
==================
[](https://crates.io/crates/metrics_cloudwatch)
[](https://docs.rs/metrics_cloudwatch)

Purpose
-------
Provide a backend for the [`metrics` facade
crate](https://crates.io/crates/metrics), pushing metrics to CloudWatch.
How to use
----------
Credentials for AWS needs to be available in the environment, see [AWS docs
on setting up AWS credentials](
https://github.com/awslabs/aws-sdk-rust#getting-started-with-the-sdk)
```bash
cargo add -s metrics metrics_cloudwatch
```
```rust
fn main() {
// Initialize the backend
metrics_cloudwatch::builder()
.cloudwatch_namespace("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);
```
Limitations
-----------
The CloudWatch metrics API imposes some limitations.
* Max 30 labels (dimensions) per metric
* Max 150 unique histogram values (used by `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.