53 lines
2.2 KiB
Go
53 lines
2.2 KiB
Go
// Copyright (c) 2012, Matt T. Proud
|
|
// All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style license that can be found
|
|
// in the LICENSE file.
|
|
|
|
// registry.go provides a container for centralized exposition of metrics to
|
|
// their prospective consumers.
|
|
|
|
// registry.Register("human_readable_metric_name", metric)
|
|
|
|
// Please try to observe the following rules when naming metrics:
|
|
|
|
// - Use underbars "_" to separate words.
|
|
|
|
// - Have the metric name start from generality and work toward specificity
|
|
// toward the end. For example, when working with multiple caching subsystems,
|
|
// consider using the following structure "cache" + "user_credentials" →
|
|
// "cache_user_credentials" and "cache" + "value_transformations" →
|
|
// "cache_value_transformations".
|
|
|
|
// - Have whatever is being measured follow the system and subsystem names cited
|
|
// supra. For instance, with "insertions", "deletions", "evictions",
|
|
// "replacements" of the above cache, they should be named as
|
|
// "cache_user_credentials_insertions" and "cache_user_credentials_deletions"
|
|
// and "cache_user_credentials_deletions" and
|
|
// "cache_user_credentials_evictions".
|
|
|
|
// - If what is being measured has a standardized unit around it, consider
|
|
// providing a unit for it.
|
|
|
|
// - Consider adding an additional suffix that designates what the value
|
|
// represents such as a "total" or "size"---e.g.,
|
|
// "cache_user_credentials_size_kb" or
|
|
// "cache_user_credentials_insertions_total".
|
|
|
|
// - Give heed to how future-proof the names are. Things may depend on these
|
|
// names; and as your service evolves, the calculated values may take on
|
|
// different meanings, which can be difficult to reflect if deployed code
|
|
// depends on antique names.
|
|
|
|
// Further considerations:
|
|
|
|
// - The Registry's exposition mechanism is not backed by authorization and
|
|
// authentication. This is something that will need to be addressed for
|
|
// production services that are directly exposed to the outside world.
|
|
|
|
// - Engage in as little in-process processing of values as possible. The job
|
|
// of processing and aggregation of these values belongs in a separate
|
|
// post-processing job. The same goes for archiving. I will need to evaluate
|
|
// hooks into something like OpenTSBD.
|
|
package registry
|