Expose binary data in metrics

This enables slicing and aggregating metrics based on zebrad version:
https://www.robustperception.io/exposing-the-software-version-to-prometheus
This commit is contained in:
Jack Grigg 2021-03-14 15:37:03 +13:00 committed by teor
parent e51f33a4b9
commit bae9a7ecd5
1 changed files with 22 additions and 0 deletions

View File

@ -19,6 +19,28 @@ impl MetricsEndpoint {
match endpoint_result {
Ok(()) => {
info!("Opened metrics endpoint at {}", addr);
// Expose binary metadata to metrics, using a single time series with
// value 1:
// https://www.robustperception.io/exposing-the-software-version-to-prometheus
//
// We manually expand the metrics::increment!() macro because it only
// supports string literals for metrics names, preventing us from
// using concat!() to build the name.
static METRIC_NAME: [metrics::SharedString; 2] = [
metrics::SharedString::const_str(env!("CARGO_PKG_NAME")),
metrics::SharedString::const_str("build.info"),
];
static METRIC_LABELS: [metrics::Label; 1] =
[metrics::Label::from_static_parts(
"version",
env!("CARGO_PKG_VERSION"),
)];
static METRIC_KEY: metrics::KeyData =
metrics::KeyData::from_static_parts(&METRIC_NAME, &METRIC_LABELS);
if let Some(recorder) = metrics::try_recorder() {
recorder.increment_counter(metrics::Key::Borrowed(&METRIC_KEY), 1);
}
}
Err(e) => panic!(
"Opening metrics endpoint listener {:?} failed: {:?}. \