@@ -34,6 +34,7 @@ import (
3434 "github.com/cortexproject/cortex/pkg/scheduler/schedulerpb"
3535 "github.com/cortexproject/cortex/pkg/storegateway"
3636 "github.com/cortexproject/cortex/pkg/storegateway/storegatewaypb"
37+ "github.com/cortexproject/cortex/pkg/util/flagext"
3738 "github.com/cortexproject/cortex/pkg/util/push"
3839)
3940
@@ -61,11 +62,15 @@ type Config struct {
6162 // initialized, the custom config handler will be used instead of
6263 // DefaultConfigHandler.
6364 CustomConfigHandler ConfigHandler `yaml:"-"`
65+
66+ // Allows and is used to configure the addition of HTTP Header fields to logs
67+ HTTPRequestHeadersToLog flagext.StringSlice `yaml:"http_request_headers_to_log"`
6468}
6569
6670// RegisterFlags adds the flags required to config this to the given FlagSet.
6771func (cfg * Config ) RegisterFlags (f * flag.FlagSet ) {
6872 f .BoolVar (& cfg .ResponseCompression , "api.response-compression-enabled" , false , "Use GZIP compression for API responses. Some endpoints serve large YAML or JSON blobs which can benefit from compression." )
73+ f .Var (& cfg .HTTPRequestHeadersToLog , "api.http-request-headers-to-log" , "Which HTTP Request headers to add to logs" )
6974 cfg .RegisterFlagsWithPrefix ("" , f )
7075}
7176
@@ -85,13 +90,13 @@ func (cfg *Config) wrapDistributorPush(d *distributor.Distributor) push.Func {
8590}
8691
8792type API struct {
88- AuthMiddleware middleware.Interface
89-
90- cfg Config
91- server * server. Server
92- logger log. Logger
93- sourceIPs * middleware. SourceIPExtractor
94- indexPage * IndexPageContent
93+ AuthMiddleware middleware.Interface
94+ cfg Config
95+ server * server. Server
96+ logger log. Logger
97+ sourceIPs * middleware. SourceIPExtractor
98+ indexPage * IndexPageContent
99+ HTTPHeaderMiddleware * HTTPHeaderMiddleware
95100}
96101
97102func New (cfg Config , serverCfg server.Config , s * server.Server , logger log.Logger ) (* API , error ) {
@@ -121,6 +126,9 @@ func New(cfg Config, serverCfg server.Config, s *server.Server, logger log.Logge
121126 if cfg .HTTPAuthMiddleware == nil {
122127 api .AuthMiddleware = middleware .AuthenticateUser
123128 }
129+ if len (cfg .HTTPRequestHeadersToLog ) > 0 {
130+ api .HTTPHeaderMiddleware = & HTTPHeaderMiddleware {TargetHeaders : cfg .HTTPRequestHeadersToLog }
131+ }
124132
125133 return api , nil
126134}
@@ -139,6 +147,9 @@ func (a *API) RegisterRoute(path string, handler http.Handler, auth bool, method
139147 if a .cfg .ResponseCompression {
140148 handler = gziphandler .GzipHandler (handler )
141149 }
150+ if a .HTTPHeaderMiddleware != nil {
151+ handler = a .HTTPHeaderMiddleware .Wrap (handler )
152+ }
142153
143154 if len (methods ) == 0 {
144155 a .server .HTTP .Path (path ).Handler (handler )
@@ -156,6 +167,9 @@ func (a *API) RegisterRoutesWithPrefix(prefix string, handler http.Handler, auth
156167 if a .cfg .ResponseCompression {
157168 handler = gziphandler .GzipHandler (handler )
158169 }
170+ if a .HTTPHeaderMiddleware != nil {
171+ handler = a .HTTPHeaderMiddleware .Wrap (handler )
172+ }
159173
160174 if len (methods ) == 0 {
161175 a .server .HTTP .PathPrefix (prefix ).Handler (handler )
0 commit comments