diff --git a/pkg/frontend/transport/handler.go b/pkg/frontend/transport/handler.go index bba985ea1c0..bcdd3628a0d 100644 --- a/pkg/frontend/transport/handler.go +++ b/pkg/frontend/transport/handler.go @@ -22,6 +22,8 @@ import ( "github.com/weaveworks/common/httpgrpc" "google.golang.org/grpc/status" + "github.com/cortexproject/cortex/pkg/engine" + "github.com/cortexproject/cortex/pkg/querier" querier_stats "github.com/cortexproject/cortex/pkg/querier/stats" "github.com/cortexproject/cortex/pkg/querier/tenantfederation" "github.com/cortexproject/cortex/pkg/querier/tripperware" @@ -397,6 +399,14 @@ func (f *Handler) logQueryRequest(r *http.Request, queryString url.Values, sourc logMessage = append(logMessage, "user_agent", ua) } + if engineType := r.Header.Get(engine.TypeHeader); len(engineType) > 0 { + logMessage = append(logMessage, "engine_type", engineType) + } + + if blockStoreType := r.Header.Get(querier.BlockStoreTypeHeader); len(blockStoreType) > 0 { + logMessage = append(logMessage, "block_store_type", blockStoreType) + } + if acceptEncoding := r.Header.Get("Accept-Encoding"); len(acceptEncoding) > 0 { logMessage = append(logMessage, "accept_encoding", acceptEncoding) } @@ -509,6 +519,12 @@ func (f *Handler) reportQueryStats(r *http.Request, source, userID string, query if ua := r.Header.Get("User-Agent"); len(ua) > 0 { logMessage = append(logMessage, "user_agent", ua) } + if engineType := r.Header.Get(engine.TypeHeader); len(engineType) > 0 { + logMessage = append(logMessage, "engine_type", engineType) + } + if blockStoreType := r.Header.Get(querier.BlockStoreTypeHeader); len(blockStoreType) > 0 { + logMessage = append(logMessage, "block_store_type", blockStoreType) + } if priority, ok := stats.LoadPriority(); ok { logMessage = append(logMessage, "priority", priority) } diff --git a/pkg/frontend/transport/handler_test.go b/pkg/frontend/transport/handler_test.go index aa863230295..e507fbaed26 100644 --- a/pkg/frontend/transport/handler_test.go +++ b/pkg/frontend/transport/handler_test.go @@ -24,6 +24,8 @@ import ( "github.com/weaveworks/common/user" "google.golang.org/grpc/codes" + "github.com/cortexproject/cortex/pkg/engine" + "github.com/cortexproject/cortex/pkg/querier" querier_stats "github.com/cortexproject/cortex/pkg/querier/stats" "github.com/cortexproject/cortex/pkg/querier/tenantfederation" "github.com/cortexproject/cortex/pkg/querier/tripperware" @@ -501,6 +503,16 @@ func TestReportQueryStatsFormat(t *testing.T) { expectedLog: `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 user_agent=Grafana`, source: tripperware.SourceAPI, }, + "should include engine type": { + header: http.Header{http.CanonicalHeaderKey(engine.TypeHeader): []string{string(engine.Thanos)}}, + expectedLog: `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 engine_type=thanos`, + source: tripperware.SourceAPI, + }, + "should include block store type": { + header: http.Header{http.CanonicalHeaderKey(querier.BlockStoreTypeHeader): []string{"parquet"}}, + expectedLog: `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 block_store_type=parquet`, + source: tripperware.SourceAPI, + }, "should include response error": { responseErr: errors.New("foo_err"), expectedLog: `level=error msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 error=foo_err`,