|
| 1 | +// Copyright 2020 The Go Authors. All rights reserved. |
| 2 | +// Use of this source code is governed by a BSD-style |
| 3 | +// license that can be found in the LICENSE file. |
| 4 | + |
| 5 | +/* |
| 6 | +Package metrics provides a stable interface to access implementation-defined |
| 7 | +metrics exported by the Go runtime. This package is similar to existing functions |
| 8 | +like runtime.ReadMemStats and debug.ReadGCStats, but significantly more general. |
| 9 | +
|
| 10 | +The set of metrics defined by this package may evolve as the runtime itself |
| 11 | +evolves, and also enables variation across Go implementations, whose relevant |
| 12 | +metric sets may not intersect. |
| 13 | +
|
| 14 | +Interface |
| 15 | +
|
| 16 | +Metrics are designated by a string key, rather than, for example, a field name in |
| 17 | +a struct. The full list of supported metrics is always available in the slice of |
| 18 | +Descriptions returned by All. Each Description also includes useful information |
| 19 | +about the metric, such as how to display it (e.g. gauge vs. counter) and how difficult |
| 20 | +or disruptive it is to obtain it (e.g. do you need to stop the world?). |
| 21 | +
|
| 22 | +Thus, users of this API are encouraged to sample supported metrics defined by the |
| 23 | +slice returned by All to remain compatible across Go versions. Of course, situations |
| 24 | +arise where reading specific metrics is critical. For these cases, users are |
| 25 | +encouranged to use build tags, and although metrics may be deprecated and removed, |
| 26 | +users should consider this to be an exceptional and rare event, coinciding with a |
| 27 | +very large change in a particular Go implementation. |
| 28 | +
|
| 29 | +Each metric key also has a "kind" that describes the format of the metric's value. |
| 30 | +In the interest of not breaking users of this package, the "kind" for a given metric |
| 31 | +is guaranteed not to change. If it must change, then a new metric will be introduced |
| 32 | +with a new key and a new "kind." |
| 33 | +
|
| 34 | +Metric key format |
| 35 | +
|
| 36 | +As mentioned earlier, metric keys are strings. Their format is simple and well-defined, |
| 37 | +designed to be both human and machine readable. It is split into two components, |
| 38 | +separated by a colon: a rooted path and a unit. The choice to include the unit in |
| 39 | +the key is motivated by compatibility: if a metric's unit changes, its semantics likely |
| 40 | +did also, and a new key should be introduced. |
| 41 | +
|
| 42 | +For more details on the precise definition of the metric key's path and unit formats, see |
| 43 | +the documentation of the Name field of the Description struct. |
| 44 | +
|
| 45 | +Supported metrics |
| 46 | +
|
| 47 | +TODO(mknyszek): List them here as they're added. |
| 48 | +*/ |
| 49 | +package metrics |
0 commit comments