github.com/influxdata/influxdb/v2@v2.7.6/influxql/control/prometheus.go (about)

     1  package control
     2  
     3  import (
     4  	"github.com/prometheus/client_golang/prometheus"
     5  )
     6  
     7  // controllerMetrics holds metrics related to the query controller.
     8  type ControllerMetrics struct {
     9  	Requests          *prometheus.CounterVec
    10  	NotImplemented    *prometheus.CounterVec
    11  	RequestsLatency   *prometheus.HistogramVec
    12  	ExecutingDuration *prometheus.HistogramVec
    13  }
    14  
    15  const (
    16  	LabelSuccess        = "success"
    17  	LabelGenericError   = "generic_err"
    18  	LabelParseErr       = "parse_err"
    19  	LabelInterruptedErr = "interrupt_err"
    20  	LabelRuntimeError   = "runtime_error"
    21  	LabelNotImplError   = "not_implemented"
    22  	LabelNotExecuted    = "not_executed"
    23  )
    24  
    25  func NewControllerMetrics(labels []string) *ControllerMetrics {
    26  	const (
    27  		namespace = "influxql"
    28  		subsystem = "service"
    29  	)
    30  
    31  	return &ControllerMetrics{
    32  		Requests: prometheus.NewCounterVec(prometheus.CounterOpts{
    33  			Namespace: namespace,
    34  			Subsystem: subsystem,
    35  			Name:      "requests_total",
    36  			Help:      "Count of the query requests",
    37  		}, append(labels, "result")),
    38  
    39  		NotImplemented: prometheus.NewCounterVec(prometheus.CounterOpts{
    40  			Namespace: namespace,
    41  			Subsystem: subsystem,
    42  			Name:      "not_implemented_total",
    43  			Help:      "Count of the query requests executing unimplemented operations",
    44  		}, []string{"operation"}),
    45  
    46  		RequestsLatency: prometheus.NewHistogramVec(prometheus.HistogramOpts{
    47  			Namespace: namespace,
    48  			Subsystem: subsystem,
    49  			Name:      "requests_latency_seconds",
    50  			Help:      "Histogram of times spent for end-to-end latency (from issuing query request, to receiving the first byte of the response)",
    51  			Buckets:   prometheus.ExponentialBuckets(1e-3, 5, 7),
    52  		}, append(labels, "result")),
    53  
    54  		ExecutingDuration: prometheus.NewHistogramVec(prometheus.HistogramOpts{
    55  			Namespace: namespace,
    56  			Subsystem: subsystem,
    57  			Name:      "executing_duration_seconds",
    58  			Help:      "Histogram of times spent executing queries",
    59  			Buckets:   prometheus.ExponentialBuckets(1e-3, 5, 7),
    60  		}, append(labels, "result")),
    61  	}
    62  }
    63  
    64  func (cm *ControllerMetrics) PrometheusCollectors() []prometheus.Collector {
    65  	return []prometheus.Collector{
    66  		cm.Requests,
    67  		cm.NotImplemented,
    68  		cm.ExecutingDuration,
    69  	}
    70  }