# Open Metrics Client Library [![Test Status](https://github.com/mxinden/rust-open-metrics-client/actions/workflows/rust.yml/badge.svg?event=push)](https://github.com/mxinden/rust-open-metrics-client/actions) [![Crate](https://img.shields.io/crates/v/open-metrics-client.svg)](https://crates.io/crates/open-metrics-client) [![API](https://docs.rs/open-metrics-client/badge.svg)](https://docs.rs/open-metrics-client) [Rust](https://github.com/rust-lang/) client library implementation of the [Open Metrics specification](https://github.com/OpenObservability/OpenMetrics). Allows developers to instrument applications and thus enables operators to monitor said applications with monitoring systems like [Prometheus](https://prometheus.io/). **Documentation**: https://docs.rs/open-metrics-client/ ## Goals - No `unsafe`. Don't use unsafe Rust within the library itself. - Type safe. Leverage Rust's type system to catch common instrumentation mistakes at compile time. - Fast. Don't force users to worry about the performance impact of instrumentation. Instead encourage users to instrument often and extensively. ## Specification Compliance Below is a list of properties where this client library implementation lags behind the Open Metrics specification. Not being compliant with all requirements (`MUST` and `MUST NOT`) of the specification is considered a bug and likely to be fixed in the future. Contributions in all forms are most welcome. - State set metric. - Enforce "A Histogram MetricPoint MUST contain at least one bucket". - Enforce "A MetricFamily MUST have a [...] UNIT metadata". - Enforce "MetricFamily names [...] MUST be unique within a MetricSet." - Enforce "Names SHOULD be in snake_case". - Enforce "MetricFamily names beginning with underscores are RESERVED and MUST NOT be used unless specified by this standard". - Enforce "Exposers SHOULD avoid names that could be confused with the suffixes that text format sample metric names use". - Protobuf wire format. (Follow [spec issue](https://github.com/OpenObservability/OpenMetrics/issues/183).) - Gauge histogram metric. - Allow "A MetricPoint in a Metric with the type [Counter, Histogram] SHOULD have a Timestamp value called Created". - Summary metric. ## Related Libraries - [rust-prometheus](https://github.com/tikv/rust-prometheus/): See [tikv/rust-prometheus/#392](https://github.com/tikv/rust-prometheus/issues/392) for a high-level comparison. ## License Licensed under either of * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) at your option. #### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.