Skip to content

Commit 229ec97

Browse files
authored
include status code in query frontend query stats logs (#5104)
Signed-off-by: Ben Ye <benye@amazon.com> Signed-off-by: Ben Ye <benye@amazon.com>
1 parent 0e83237 commit 229ec97

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

pkg/frontend/transport/handler.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,12 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
147147
f.reportSlowQuery(r, queryString, queryResponseTime)
148148
}
149149
if f.cfg.QueryStatsEnabled {
150-
f.reportQueryStats(r, queryString, queryResponseTime, stats, err)
150+
statusCode := resp.StatusCode
151+
if err != nil {
152+
statusCode = getStatusCodeFromError(err)
153+
}
154+
155+
f.reportQueryStats(r, queryString, queryResponseTime, stats, err, statusCode)
151156
}
152157

153158
if err != nil {
@@ -204,7 +209,7 @@ func (f *Handler) reportSlowQuery(r *http.Request, queryString url.Values, query
204209
level.Info(util_log.WithContext(r.Context(), f.log)).Log(logMessage...)
205210
}
206211

207-
func (f *Handler) reportQueryStats(r *http.Request, queryString url.Values, queryResponseTime time.Duration, stats *querier_stats.QueryStats, error error) {
212+
func (f *Handler) reportQueryStats(r *http.Request, queryString url.Values, queryResponseTime time.Duration, stats *querier_stats.QueryStats, error error, statusCode int) {
208213
tenantIDs, err := tenant.TenantIDs(r.Context())
209214
if err != nil {
210215
return
@@ -233,6 +238,7 @@ func (f *Handler) reportQueryStats(r *http.Request, queryString url.Values, quer
233238
"fetched_series_count", numSeries,
234239
"fetched_chunks_bytes", numBytes,
235240
"fetched_data_bytes", numDataBytes,
241+
"status_code", statusCode,
236242
}, stats.LoadExtraFields()...)
237243

238244
logMessage = append(logMessage, formatQueryString(queryString)...)
@@ -299,3 +305,22 @@ func statsValue(name string, d time.Duration) string {
299305
durationInMs := strconv.FormatFloat(float64(d)/float64(time.Millisecond), 'f', -1, 64)
300306
return name + ";dur=" + durationInMs
301307
}
308+
309+
// getStatusCodeFromError extracts http status code based on error, similar to how writeError was implemented.
310+
func getStatusCodeFromError(err error) int {
311+
switch err {
312+
case context.Canceled:
313+
return StatusClientClosedRequest
314+
case context.DeadlineExceeded:
315+
return http.StatusGatewayTimeout
316+
default:
317+
if util.IsRequestBodyTooLarge(err) {
318+
return http.StatusRequestEntityTooLarge
319+
}
320+
}
321+
resp, ok := httpgrpc.HTTPResponseFromError(err)
322+
if ok {
323+
return int(resp.Code)
324+
}
325+
return http.StatusInternalServerError
326+
}

0 commit comments

Comments
 (0)