feat(httpd): Add Flux query metrics
* debug/vars InfluxDB metrics * append Prometheus metrics to default registrypull/10403/head
parent
a4dc81902a
commit
cf220c6471
|
@ -40,6 +40,7 @@ import (
|
|||
"github.com/influxdata/influxql"
|
||||
"github.com/influxdata/platform/storage/reads"
|
||||
"github.com/influxdata/platform/storage/reads/datatypes"
|
||||
prom "github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
@ -118,6 +119,7 @@ type Handler struct {
|
|||
// Flux services
|
||||
Controller *control.Controller
|
||||
CompilerMappings flux.CompilerMappings
|
||||
registered bool
|
||||
|
||||
Config *Config
|
||||
Logger *zap.Logger
|
||||
|
@ -234,6 +236,11 @@ func (h *Handler) Open() {
|
|||
}
|
||||
h.Logger.Info("opened HTTP access log", zap.String("path", path))
|
||||
}
|
||||
|
||||
if h.Config.FluxEnabled {
|
||||
h.registered = true
|
||||
prom.MustRegister(h.Controller.PrometheusCollectors()...)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Handler) Close() {
|
||||
|
@ -241,6 +248,13 @@ func (h *Handler) Close() {
|
|||
h.accessLog.Close()
|
||||
h.accessLog = nil
|
||||
}
|
||||
|
||||
if h.registered {
|
||||
for _, col := range h.Controller.PrometheusCollectors() {
|
||||
prom.Unregister(col)
|
||||
}
|
||||
h.registered = false
|
||||
}
|
||||
}
|
||||
|
||||
// Statistics maintains statistics for the httpd service.
|
||||
|
@ -267,6 +281,8 @@ type Statistics struct {
|
|||
RecoveredPanics int64
|
||||
PromWriteRequests int64
|
||||
PromReadRequests int64
|
||||
FluxQueryRequests int64
|
||||
FluxQueryRequestDuration int64
|
||||
}
|
||||
|
||||
// Statistics returns statistics for periodic monitoring.
|
||||
|
@ -296,6 +312,8 @@ func (h *Handler) Statistics(tags map[string]string) []models.Statistic {
|
|||
statRecoveredPanics: atomic.LoadInt64(&h.stats.RecoveredPanics),
|
||||
statPromWriteRequest: atomic.LoadInt64(&h.stats.PromWriteRequests),
|
||||
statPromReadRequest: atomic.LoadInt64(&h.stats.PromReadRequests),
|
||||
statFluxQueryRequests: atomic.LoadInt64(&h.stats.FluxQueryRequests),
|
||||
statFluxQueryRequestDuration: atomic.LoadInt64(&h.stats.FluxQueryRequestDuration),
|
||||
},
|
||||
}}
|
||||
}
|
||||
|
@ -1122,6 +1140,11 @@ func (h *Handler) servePromRead(w http.ResponseWriter, r *http.Request, user met
|
|||
}
|
||||
|
||||
func (h *Handler) serveFluxQuery(w http.ResponseWriter, r *http.Request) {
|
||||
atomic.AddInt64(&h.stats.FluxQueryRequests, 1)
|
||||
defer func(start time.Time) {
|
||||
atomic.AddInt64(&h.stats.FluxQueryRequestDuration, time.Since(start).Nanoseconds())
|
||||
}(time.Now())
|
||||
|
||||
req, err := decodeQueryRequest(r)
|
||||
if err != nil {
|
||||
h.httpError(w, err.Error(), http.StatusBadRequest)
|
||||
|
|
|
@ -19,29 +19,30 @@ import (
|
|||
|
||||
// statistics gathered by the httpd package.
|
||||
const (
|
||||
statRequest = "req" // Number of HTTP requests served.
|
||||
statQueryRequest = "queryReq" // Number of query requests served.
|
||||
statWriteRequest = "writeReq" // Number of write requests serverd.
|
||||
statPingRequest = "pingReq" // Number of ping requests served.
|
||||
statStatusRequest = "statusReq" // Number of status requests served.
|
||||
statWriteRequestBytesReceived = "writeReqBytes" // Sum of all bytes in write requests.
|
||||
statQueryRequestBytesTransmitted = "queryRespBytes" // Sum of all bytes returned in query reponses.
|
||||
statPointsWrittenOK = "pointsWrittenOK" // Number of points written OK.
|
||||
statPointsWrittenDropped = "pointsWrittenDropped" // Number of points dropped by the storage engine.
|
||||
statPointsWrittenFail = "pointsWrittenFail" // Number of points that failed to be written.
|
||||
statAuthFail = "authFail" // Number of authentication failures.
|
||||
statRequestDuration = "reqDurationNs" // Number of (wall-time) nanoseconds spent inside requests.
|
||||
statQueryRequestDuration = "queryReqDurationNs" // Number of (wall-time) nanoseconds spent inside query requests.
|
||||
statWriteRequestDuration = "writeReqDurationNs" // Number of (wall-time) nanoseconds spent inside write requests.
|
||||
statRequestsActive = "reqActive" // Number of currently active requests.
|
||||
statWriteRequestsActive = "writeReqActive" // Number of currently active write requests.
|
||||
statClientError = "clientError" // Number of HTTP responses due to client error.
|
||||
statServerError = "serverError" // Number of HTTP responses due to server error.
|
||||
statRecoveredPanics = "recoveredPanics" // Number of panics recovered by HTTP handler.
|
||||
statRequest = "req" // Number of HTTP requests served.
|
||||
statQueryRequest = "queryReq" // Number of query requests served.
|
||||
statWriteRequest = "writeReq" // Number of write requests serverd.
|
||||
statPingRequest = "pingReq" // Number of ping requests served.
|
||||
statStatusRequest = "statusReq" // Number of status requests served.
|
||||
statWriteRequestBytesReceived = "writeReqBytes" // Sum of all bytes in write requests.
|
||||
statQueryRequestBytesTransmitted = "queryRespBytes" // Sum of all bytes returned in query reponses.
|
||||
statPointsWrittenOK = "pointsWrittenOK" // Number of points written OK.
|
||||
statPointsWrittenDropped = "pointsWrittenDropped" // Number of points dropped by the storage engine.
|
||||
statPointsWrittenFail = "pointsWrittenFail" // Number of points that failed to be written.
|
||||
statAuthFail = "authFail" // Number of authentication failures.
|
||||
statRequestDuration = "reqDurationNs" // Number of (wall-time) nanoseconds spent inside requests.
|
||||
statQueryRequestDuration = "queryReqDurationNs" // Number of (wall-time) nanoseconds spent inside query requests.
|
||||
statWriteRequestDuration = "writeReqDurationNs" // Number of (wall-time) nanoseconds spent inside write requests.
|
||||
statRequestsActive = "reqActive" // Number of currently active requests.
|
||||
statWriteRequestsActive = "writeReqActive" // Number of currently active write requests.
|
||||
statClientError = "clientError" // Number of HTTP responses due to client error.
|
||||
statServerError = "serverError" // Number of HTTP responses due to server error.
|
||||
statRecoveredPanics = "recoveredPanics" // Number of panics recovered by HTTP handler.
|
||||
statPromWriteRequest = "promWriteReq" // Number of write requests to the prometheus endpoint.
|
||||
statPromReadRequest = "promReadReq" // Number of read requests to the prometheus endpoint.
|
||||
statFluxQueryRequests = "fluxQueryReq" // Number of flux query requests served.
|
||||
statFluxQueryRequestDuration = "fluxQueryReqDurationNs" // Number of (wall-time) nanoseconds spent executing Flux query requests.
|
||||
|
||||
// Prometheus stats
|
||||
statPromWriteRequest = "promWriteReq" // Number of write requests to the promtheus endpoint
|
||||
statPromReadRequest = "promReadReq" // Number of read requests to the prometheus endpoint
|
||||
)
|
||||
|
||||
// Service manages the listener and handler for an HTTP endpoint.
|
||||
|
|
Loading…
Reference in New Issue