mirror of https://github.com/grafana/loki
Instrument querier inflight requests. (#11085)
**What this PR does / why we need it**: #10858 removed the HTTP and gRPC server from the querier workers. That means inflight requests are not instrumented anymore. This change adds a middleware that does that. This will add metrics such as ``` # HELP cortex_inflight_requests Current number of inflight requests. # TYPE cortex_inflight_requests gauge cortex_inflight_requests{method="gRPC",route="*logproto.IndexStatsRequest"} 0 cortex_inflight_requests{method="gRPC",route="*queryrange.LabelRequest"} 0 cortex_inflight_requests{method="gRPC",route="*queryrange.LokiRequest"} 0 cortex_inflight_requests{method="gRPC",route="*queryrange.LokiSeriesRequest"} 0 ``` **Checklist** - [ ] Reviewed the [`CONTRIBUTING.md`](https://github.com/grafana/loki/blob/main/CONTRIBUTING.md) guide (**required**) - [ ] Documentation added - [ ] Tests updated - [ ] `CHANGELOG.md` updated - [ ] If the change is worth mentioning in the release notes, add `add-to-release-notes` label - [ ] Changes that require user attention or interaction to upgrade are documented in `docs/sources/setup/upgrade/_index.md` - [ ] For Helm chart changes bump the Helm chart version in `production/helm/loki/Chart.yaml` and update `production/helm/loki/CHANGELOG.md` and `production/helm/loki/README.md`. [Example PR](pull/10096/headd10549e3ec
) - [ ] If the change is deprecating or removing a configuration option, update the `deprecated-config.yaml` and `deleted-config.yaml` files respectively in the `tools/deprecated-config-checker` directory. [Example PR](0d4416a4b0
)
parent
53949dc5cd
commit
8742599be1
@ -0,0 +1,47 @@ |
||||
package queryrange |
||||
|
||||
import ( |
||||
"context" |
||||
"fmt" |
||||
|
||||
"github.com/prometheus/client_golang/prometheus" |
||||
"github.com/prometheus/client_golang/prometheus/promauto" |
||||
|
||||
"github.com/grafana/loki/pkg/querier/queryrange/queryrangebase" |
||||
) |
||||
|
||||
const ( |
||||
gRPC = "gRPC" |
||||
) |
||||
|
||||
type QueryHandlerMetrics struct { |
||||
InflightRequests *prometheus.GaugeVec |
||||
} |
||||
|
||||
func NewQueryHandlerMetrics(registerer prometheus.Registerer, metricsNamespace string) *QueryHandlerMetrics { |
||||
return &QueryHandlerMetrics{ |
||||
InflightRequests: promauto.With(registerer).NewGaugeVec(prometheus.GaugeOpts{ |
||||
Namespace: metricsNamespace, |
||||
Name: "inflight_requests", |
||||
Help: "Current number of inflight requests.", |
||||
}, []string{"method", "route"}), |
||||
} |
||||
} |
||||
|
||||
type Instrument struct { |
||||
*QueryHandlerMetrics |
||||
} |
||||
|
||||
var _ queryrangebase.Middleware = Instrument{} |
||||
|
||||
// Wrap implements the queryrangebase.Middleware
|
||||
func (i Instrument) Wrap(next queryrangebase.Handler) queryrangebase.Handler { |
||||
return queryrangebase.HandlerFunc(func(ctx context.Context, r queryrangebase.Request) (queryrangebase.Response, error) { |
||||
route := fmt.Sprintf("%T", r) |
||||
inflight := i.InflightRequests.WithLabelValues(gRPC, route) |
||||
inflight.Inc() |
||||
defer inflight.Dec() |
||||
|
||||
return next.Do(ctx, r) |
||||
}) |
||||
} |
Loading…
Reference in new issue