const (
	OpenMetricsMIMEType = "application/openmetrics-text"

	PrometheusSchemaMIMEType = "prometheus/telemetry"

	// ErrorContentType is the content type returned by an error response.
	ErrorContentType = "text/plain"

const OverflowBucket = "+Inf"

const (
	PrometheusMetricFormat = "prometheus"


var LogicalTableSizeName []string = []string{"core", "mount_table", "num_entries"}

LogicalTableSizeName is a set of gauge metric keys for logical mount table sizes

var PhysicalTableSizeName []string = []string{"core", "mount_table", "size"}

PhysicalTableSizeName is a set of gauge metric keys for physical mount table sizes


func FormatFromRequest

func FormatFromRequest(req *logical.Request) string

func NamespaceLabel

func NamespaceLabel(ns *namespace.Namespace) metrics.Label

NamespaceLabel creates a metrics label for the given Namespace: root is "root"; others are path with the final '/' removed.

func TTLBucket

func TTLBucket(ttl time.Duration) string

TTLBucket computes the label to apply for a token TTL.


type ClusterMetricSink

type ClusterMetricSink struct {
	// ClusterName is either the cluster ID, or a name provided
	// in the telemetry configuration stanza.
	// Because it may be set after the Core is initialized, we need
	// to protect against concurrent access.
	ClusterName atomic.Value

	MaxGaugeCardinality int
	GaugeInterval       time.Duration

	// Sink is the go-metrics instance to send to.
	Sink metrics.MetricSink

ClusterMetricSink serves as a shim around go-metrics and inserts a "cluster" label.

It also provides a mechanism to limit the cardinality of the labels on a gauge (at each reporting interval, which isn't sufficient if there is variability in which labels are the top N) and a backoff mechanism for gauge computation.

func BlackholeSink

func BlackholeSink() *ClusterMetricSink

BlackholeSink is a default suitable for use in unit tests.

func NewClusterMetricSink

func NewClusterMetricSink(clusterName string, sink metrics.MetricSink) *ClusterMetricSink

func (*ClusterMetricSink) AddDurationWithLabels

func (m *ClusterMetricSink) AddDurationWithLabels(key []string, d time.Duration, labels []Label)

func (*ClusterMetricSink) AddSampleWithLabels

func (m *ClusterMetricSink) AddSampleWithLabels(key []string, val float32, labels []Label)

func (*ClusterMetricSink) IncrCounterWithLabels

func (m *ClusterMetricSink) IncrCounterWithLabels(key []string, val float32, labels []Label)

func (*ClusterMetricSink) MeasureSinceWithLabels

func (m *ClusterMetricSink) MeasureSinceWithLabels(key []string, start time.Time, labels []Label)

func (*ClusterMetricSink) NewGaugeCollectionProcess

func (m *ClusterMetricSink) NewGaugeCollectionProcess(
	key []string,
	id []Label,
	collector GaugeCollector,
	logger log.Logger,
) (*GaugeCollectionProcess, error)

NewGaugeCollectionProcess creates a new collection process for the callback function given as an argument, and starts it running. A label should be provided for metrics *about* this collection process.

The Run() method must be called to start the process.

func (*ClusterMetricSink) SetDefaultClusterName

func (m *ClusterMetricSink) SetDefaultClusterName(clusterName string)

SetDefaultClusterName changes the cluster name from its default value, if it has not previously been configured.

func (*ClusterMetricSink) SetGaugeWithLabels

func (m *ClusterMetricSink) SetGaugeWithLabels(key []string, val float32, labels []Label)

type GaugeCollectionProcess

type GaugeCollectionProcess struct {
	// contains filtered or unexported fields

A GaugeCollectionProcess is responsible for one particular gauge metric. It handles a delay on initial startup; limiting the cardinality; and exponential backoff on the requested interval.

func (*GaugeCollectionProcess) Run

func (p *GaugeCollectionProcess) Run()

Run should be called as a goroutine.

func (*GaugeCollectionProcess) Stop

func (p *GaugeCollectionProcess) Stop()

Stop the collection process

type GaugeCollector

type GaugeCollector = func(context.Context) ([]GaugeLabelValues, error)

GaugeCollector is a callback function that returns an unfiltered set of label-value pairs. It may be cancelled if it takes too long.

type GaugeLabelValues

type GaugeLabelValues struct {
	Labels []Label
	Value  float32

GaugeLabelValues is one gauge in a set sharing a single key, that are measured in a batch.

type GaugeMetric

type GaugeMetric struct {
	Value  float32
	Labels []Label
	Key    []string

type GaugeMetrics

type GaugeMetrics struct {
	// Metrics is a map from keys concatenated by "." to the metric.
	// It is a map because although we do not care about distinguishing
	// these loop metrics during emission, we must distinguish them
	// when we update a metric.
	Metrics sync.Map

type Label

type Label = metrics.Label

Convenience alias

type Metrics

type Metrics interface {
	SetGaugeWithLabels(key []string, val float32, labels []Label)
	IncrCounterWithLabels(key []string, val float32, labels []Label)
	AddSampleWithLabels(key []string, val float32, labels []Label)
	AddDurationWithLabels(key []string, d time.Duration, labels []Label)
	MeasureSinceWithLabels(key []string, start time.Time, labels []Label)

type MetricsHelper

type MetricsHelper struct {
	PrometheusEnabled bool
	LoopMetrics       GaugeMetrics
	// contains filtered or unexported fields

func NewMetricsHelper

func NewMetricsHelper(inMem *metrics.InmemSink, enablePrometheus bool) *MetricsHelper

func (*MetricsHelper) AddGaugeLoopMetric

func (m *MetricsHelper) AddGaugeLoopMetric(key []string, val float32, labels []Label)

func (*MetricsHelper) CreateMetricsCacheKeyName

func (m *MetricsHelper) CreateMetricsCacheKeyName(key []string, val float32, labels []Label) string

func (*MetricsHelper) GenericResponse

func (m *MetricsHelper) GenericResponse() *logical.Response

func (*MetricsHelper) PrometheusResponse

func (m *MetricsHelper) PrometheusResponse() *logical.Response

func (*MetricsHelper) ResponseForFormat

func (m *MetricsHelper) ResponseForFormat(format string) *logical.Response