@@ -20,6 +20,7 @@ import (
2020 "github.com/prometheus/client_golang/prometheus/promauto"
2121 "github.com/weaveworks/common/httpgrpc"
2222 "github.com/weaveworks/common/httpgrpc/server"
23+ "google.golang.org/grpc/status"
2324
2425 querier_stats "github.com/cortexproject/cortex/pkg/querier/stats"
2526 "github.com/cortexproject/cortex/pkg/tenant"
@@ -136,6 +137,19 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
136137 resp , err := f .roundTripper .RoundTrip (r )
137138 queryResponseTime := time .Since (startTime )
138139
140+ // Check whether we should parse the query string.
141+ shouldReportSlowQuery := f .cfg .LogQueriesLongerThan != 0 && queryResponseTime > f .cfg .LogQueriesLongerThan
142+ if shouldReportSlowQuery || f .cfg .QueryStatsEnabled {
143+ queryString = f .parseRequestQueryString (r , buf )
144+ }
145+
146+ if shouldReportSlowQuery {
147+ f .reportSlowQuery (r , queryString , queryResponseTime )
148+ }
149+ if f .cfg .QueryStatsEnabled {
150+ f .reportQueryStats (r , queryString , queryResponseTime , stats , err )
151+ }
152+
139153 if err != nil {
140154 writeError (w , err )
141155 return
@@ -156,19 +170,6 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
156170 if err != nil && ! errors .Is (err , syscall .EPIPE ) {
157171 level .Error (util_log .WithContext (r .Context (), f .log )).Log ("msg" , "write response body error" , "bytesCopied" , bytesCopied , "err" , err )
158172 }
159-
160- // Check whether we should parse the query string.
161- shouldReportSlowQuery := f .cfg .LogQueriesLongerThan != 0 && queryResponseTime > f .cfg .LogQueriesLongerThan
162- if shouldReportSlowQuery || f .cfg .QueryStatsEnabled {
163- queryString = f .parseRequestQueryString (r , buf )
164- }
165-
166- if shouldReportSlowQuery {
167- f .reportSlowQuery (r , queryString , queryResponseTime )
168- }
169- if f .cfg .QueryStatsEnabled {
170- f .reportQueryStats (r , queryString , queryResponseTime , stats )
171- }
172173}
173174
174175// reportSlowQuery reports slow queries.
@@ -184,7 +185,7 @@ func (f *Handler) reportSlowQuery(r *http.Request, queryString url.Values, query
184185 level .Info (util_log .WithContext (r .Context (), f .log )).Log (logMessage ... )
185186}
186187
187- func (f * Handler ) reportQueryStats (r * http.Request , queryString url.Values , queryResponseTime time.Duration , stats * querier_stats.Stats ) {
188+ func (f * Handler ) reportQueryStats (r * http.Request , queryString url.Values , queryResponseTime time.Duration , stats * querier_stats.Stats , error error ) {
188189 tenantIDs , err := tenant .TenantIDs (r .Context ())
189190 if err != nil {
190191 return
@@ -215,7 +216,17 @@ func (f *Handler) reportQueryStats(r *http.Request, queryString url.Values, quer
215216 "fetched_data_bytes" , numDataBytes ,
216217 }, formatQueryString (queryString )... )
217218
218- level .Info (util_log .WithContext (r .Context (), f .log )).Log (logMessage ... )
219+ if error != nil {
220+ s , ok := status .FromError (error )
221+ if ! ok {
222+ logMessage = append (logMessage , "error" , error )
223+ } else {
224+ logMessage = append (logMessage , "error" , s .Message ())
225+ }
226+ level .Error (util_log .WithContext (r .Context (), f .log )).Log (logMessage ... )
227+ } else {
228+ level .Info (util_log .WithContext (r .Context (), f .log )).Log (logMessage ... )
229+ }
219230}
220231
221232func (f * Handler ) parseRequestQueryString (r * http.Request , bodyBuf bytes.Buffer ) url.Values {
0 commit comments