Documentation ¶
Overview ¶
Package metrics contains expvar & Prometheus types and code used by Tailscale for monitoring.
Index ¶
- func CurrentFDs() int
- type Histogram
- type KeyValue
- type LabelMap
- type MultiLabelMap
- func (v *MultiLabelMap[T]) Add(key T, delta int64)
- func (v *MultiLabelMap[T]) AddFloat(key T, delta float64)
- func (v *MultiLabelMap[T]) Delete(key T)
- func (v *MultiLabelMap[T]) Do(f func(KeyValue[T]))
- func (v *MultiLabelMap[T]) Get(key T) expvar.Var
- func (v *MultiLabelMap[T]) Init() *MultiLabelMap[T]
- func (v *MultiLabelMap[T]) Set(key T, val expvar.Var)
- func (v *MultiLabelMap[T]) String() string
- func (v *MultiLabelMap[T]) WritePrometheus(w io.Writer, name string)
- type Set
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CurrentFDs ¶ added in v1.16.0
func CurrentFDs() int
CurrentFDs reports how many file descriptors are currently open.
It only works on Linux. It returns zero otherwise.
Types ¶
type Histogram ¶ added in v1.46.0
type Histogram struct {
// contains filtered or unexported fields
}
Histogram is a histogram of values. It should be created with NewHistogram.
func NewHistogram ¶ added in v1.46.0
NewHistogram returns a new histogram that reports to the given expvar map under the given name.
The buckets are the boundaries of the histogram buckets, in increasing order. The last bucket is +Inf.
func (*Histogram) PromExport ¶ added in v1.46.0
PromExport writes the histogram to w in Prometheus exposition format.
type KeyValue ¶ added in v1.64.0
type KeyValue[T comparable] struct { Key T Value expvar.Var }
KeyValue represents a single entry in a MultiLabelMap.
type LabelMap ¶
LabelMap is a string-to-Var map variable that satisfies the expvar.Var interface.
Semantically, this is mapped by tsweb's Prometheus exporter as a collection of variables with the same name, with a varying label value. Use this to export things that are intuitively breakdowns into different buckets.
func (*LabelMap) Get ¶
Get returns a direct pointer to the expvar.Int for key, creating it if necessary.
func (*LabelMap) GetFloat ¶ added in v1.0.0
GetFloat returns a direct pointer to the expvar.Float for key, creating it if necessary.
func (*LabelMap) GetIncrFunc ¶ added in v1.46.0
GetIncrFunc returns a function that increments the expvar.Int named by key.
Most callers should not need this; it exists to satisfy an interface elsewhere.
type MultiLabelMap ¶ added in v1.64.0
type MultiLabelMap[T comparable] struct { Type string // optional Prometheus type ("counter", "gauge") Help string // optional Prometheus help string // contains filtered or unexported fields }
MultiLabelMap is a struct-value-to-Var map variable that satisfies the expvar.Var interface but also allows for multiple Prometheus labels to be associated with each value.
T must be a struct type with scalar fields. The struct field names (lowercased) are used as the labels, unless a "prom" struct tag is present. The struct fields must all be strings, and the string values must be valid Prometheus label values without requiring quoting.
func NewMultiLabelMap ¶ added in v1.64.0
func NewMultiLabelMap[T comparable](name string, promType, helpText string) *MultiLabelMap[T]
NewMultiLabelMap creates and publishes (via expvar.Publish) a new MultiLabelMap[T] variable with the given name and returns it.
func (*MultiLabelMap[T]) Add ¶ added in v1.64.0
func (v *MultiLabelMap[T]) Add(key T, delta int64)
Add adds delta to the *expvar.Int value stored under the given map key, creating it if it doesn't exist yet. It does nothing if key exists but is of the wrong type.
func (*MultiLabelMap[T]) AddFloat ¶ added in v1.64.0
func (v *MultiLabelMap[T]) AddFloat(key T, delta float64)
Add adds delta to the *expvar.Float value stored under the given map key, creating it if it doesn't exist yet. It does nothing if key exists but is of the wrong type.
func (*MultiLabelMap[T]) Delete ¶ added in v1.64.0
func (v *MultiLabelMap[T]) Delete(key T)
Delete deletes the given key from the map.
This is not optimized for highly concurrent usage; it's presumed to only be used rarely, at startup.
func (*MultiLabelMap[T]) Do ¶ added in v1.64.0
func (v *MultiLabelMap[T]) Do(f func(KeyValue[T]))
Do calls f for each entry in the map. The map is locked during the iteration, but existing entries may be concurrently updated.
func (*MultiLabelMap[T]) Get ¶ added in v1.64.0
func (v *MultiLabelMap[T]) Get(key T) expvar.Var
Get returns the expvar for the given key, or nil if it doesn't exist.
func (*MultiLabelMap[T]) Init ¶ added in v1.64.0
func (v *MultiLabelMap[T]) Init() *MultiLabelMap[T]
Init removes all keys from the map.
Think of it as "Reset", but it's named Init to match expvar.Map.Init.
func (*MultiLabelMap[T]) Set ¶ added in v1.64.0
func (v *MultiLabelMap[T]) Set(key T, val expvar.Var)
Set sets key to val.
This is not optimized for highly concurrent usage; it's presumed to only be used rarely, at startup.
func (*MultiLabelMap[T]) String ¶ added in v1.64.0
func (v *MultiLabelMap[T]) String() string
func (*MultiLabelMap[T]) WritePrometheus ¶ added in v1.64.0
func (v *MultiLabelMap[T]) WritePrometheus(w io.Writer, name string)
WritePrometheus writes v to w in Prometheus exposition format. The name argument is the metric name.
type Set ¶
Set is a string-to-Var map variable that satisfies the expvar.Var interface.
Semantically, this is mapped by tsweb's Prometheus exporter as a collection of unrelated variables exported with a common prefix.
This lets us have tsweb recognize *expvar.Map for different purposes in the future. (Or perhaps all uses of expvar.Map will require explicit types like this one, declaring how we want tsweb to export it to Prometheus.)