71 lines
2.1 KiB
Go
71 lines
2.1 KiB
Go
package control
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
// controllerMetrics holds metrics related to the query controller.
|
|
type ControllerMetrics struct {
|
|
Requests *prometheus.CounterVec
|
|
NotImplemented *prometheus.CounterVec
|
|
RequestsLatency *prometheus.HistogramVec
|
|
ExecutingDuration *prometheus.HistogramVec
|
|
}
|
|
|
|
const (
|
|
LabelSuccess = "success"
|
|
LabelGenericError = "generic_err"
|
|
LabelParseErr = "parse_err"
|
|
LabelInterruptedErr = "interrupt_err"
|
|
LabelRuntimeError = "runtime_error"
|
|
LabelNotImplError = "not_implemented"
|
|
LabelNotExecuted = "not_executed"
|
|
)
|
|
|
|
func NewControllerMetrics(labels []string) *ControllerMetrics {
|
|
const (
|
|
namespace = "influxql"
|
|
subsystem = "service"
|
|
)
|
|
|
|
return &ControllerMetrics{
|
|
Requests: prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Namespace: namespace,
|
|
Subsystem: subsystem,
|
|
Name: "requests_total",
|
|
Help: "Count of the query requests",
|
|
}, append(labels, "result")),
|
|
|
|
NotImplemented: prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Namespace: namespace,
|
|
Subsystem: subsystem,
|
|
Name: "not_implemented_total",
|
|
Help: "Count of the query requests executing unimplemented operations",
|
|
}, []string{"operation"}),
|
|
|
|
RequestsLatency: prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Namespace: namespace,
|
|
Subsystem: subsystem,
|
|
Name: "requests_latency_seconds",
|
|
Help: "Histogram of times spent for end-to-end latency (from issuing query request, to receiving the first byte of the response)",
|
|
Buckets: prometheus.ExponentialBuckets(1e-3, 5, 7),
|
|
}, append(labels, "result")),
|
|
|
|
ExecutingDuration: prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Namespace: namespace,
|
|
Subsystem: subsystem,
|
|
Name: "executing_duration_seconds",
|
|
Help: "Histogram of times spent executing queries",
|
|
Buckets: prometheus.ExponentialBuckets(1e-3, 5, 7),
|
|
}, append(labels, "result")),
|
|
}
|
|
}
|
|
|
|
func (cm *ControllerMetrics) PrometheusCollectors() []prometheus.Collector {
|
|
return []prometheus.Collector{
|
|
cm.Requests,
|
|
cm.NotImplemented,
|
|
cm.ExecutingDuration,
|
|
}
|
|
}
|