Skip to content

Commit ef23a6e

Browse files
Rebased.
Addressing PR comments. Simplifying PrefixPreferSource logic Adding example to readme
1 parent 3ed018e commit ef23a6e

File tree

8 files changed

+35
-25
lines changed

8 files changed

+35
-25
lines changed

README.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,11 @@ tenant:
158158

159159
# If true will use the tenant ID of the inbound request as the prefix of the new tenant id.
160160
# Will be automatically suffixed with a `-` character.
161+
# Example:
162+
# Prometheus forwards metrics with `X-Scope-OrgID: Prom-A` set in the inbound request.
163+
# This would result in the tenant prefix being set to `Prom-A-`.
161164
# https://grafana.com/docs/mimir/latest/configure/about-tenant-ids/
162-
# env: CT_TENANT_PREFIX
165+
# env: CT_TENANT_PREFIX_PREFER_SOURCE
163166
prefix_prefer_source: false
164167
```
165168

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.12.4
1+
1.12.5

config.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ type config struct {
3737
}
3838

3939
Tenant struct {
40-
Label string `env:"CT_TENANT_LABEL"`
40+
Label string `env:"CT_TENANT_LABEL"`
4141
LabelList []string `yaml:"label_list" env:"CT_TENANT_LABEL_LIST" envSeparator:","`
42-
Prefix string `yaml:"prefix" env:"CT_TENANT_PREFIX"`
43-
LabelRemove bool `yaml:"label_remove" env:"CT_TENANT_LABEL_REMOVE"`
44-
Header string `env:"CT_TENANT_HEADER"`
45-
Default string `env:"CT_TENANT_DEFAULT"`
46-
AcceptAll bool `yaml:"accept_all" env:"CT_TENANT_ACCEPT_ALL"`
42+
Prefix string `yaml:"prefix" env:"CT_TENANT_PREFIX"`
43+
PrefixPreferSource bool `yaml:"prefix_prefer_source" env:"CT_TENANT_PREFIX_PREFER_SOURCE`
44+
LabelRemove bool `yaml:"label_remove" env:"CT_TENANT_LABEL_REMOVE"`
45+
Header string `env:"CT_TENANT_HEADER"`
46+
Default string `env:"CT_TENANT_DEFAULT"`
47+
AcceptAll bool `yaml:"accept_all" env:"CT_TENANT_ACCEPT_ALL"`
4748
}
4849

4950
pipeIn *fhu.InmemoryListener

deploy/k8s/chart/Chart.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
apiVersion: v2
22
description: A Helm Chart for cortex-tenant
33
name: cortex-tenant
4-
version: 0.4.1 # This is the chart version
5-
appVersion: 1.12.4 # version number of the application being deployed.
4+
version: 0.4.2 # This is the chart version
5+
appVersion: 1.12.5 # version number of the application being deployed.
66
type: application
77
sources:
88
- https://github.com/blind-oracle/cortex-tenant

deploy/k8s/chart/values.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ config:
101101
# (env: `CT_TENANT_LABEL`)
102102
label: tenant
103103
# -- List of labels examined for tenant information. If set takes precedent over `label`
104+
# (env: `CT_TENANT_LABEL_LIST`)
104105
label_list: []
105106
# -- Optional hard-coded prefix with delimeter for all tenant values.
106107
# Delimeters allowed for use:
@@ -109,6 +110,9 @@ config:
109110
prefix: ""
110111
# -- If true will use the tenant ID of the inbound request as the prefix of the new tenant id.
111112
# Will be automatically suffixed with a `-` character.
113+
# Example:
114+
# Prometheus forwards metrics with `X-Scope-OrgID: Prom-A` set in the inbound request.
115+
# This would result in the tenant prefix being set to `Prom-A-`.
112116
# (env: `CT_TENANT_PREFIX_PREFER_SOURCE`)
113117
prefix_prefer_source: false
114118
# -- Whether to remove the tenant label from the request

deploy/k8s/manifests/config-file-configmap.yml

+3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ data:
4444
prefix: ""
4545
# If true will use the tenant ID of the inbound request as the prefix of the new tenant id.
4646
# Will be automatically suffixed with a `-` character.
47+
# Example:
48+
# Prometheus forwards metrics with `X-Scope-OrgID: Prom-A` set in the inbound request.
49+
# This would result in the tenant prefix being set to `Prom-A-`.
4750
# https://grafana.com/docs/mimir/latest/configure/about-tenant-ids/
4851
prefix_prefer_source: false
4952
# Whether to remove the tenant label from the request

processor.go

+12-13
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,10 @@ func (p *processor) handle(ctx *fh.RequestCtx) {
170170
return
171171
}
172172

173-
tenantPrefix := p.cfg.Tenant.Prefix
174-
175173
if p.cfg.Tenant.PrefixPreferSource {
176-
if string(ctx.Request.Header.Peek("X-Scope-OrgID")) != "" {
177-
tenantPrefix = string(ctx.Request.Header.Peek("X-Scope-OrgID")) + "-"
174+
sourceTenantPrefix := string(ctx.Request.Header.Peek(p.cfg.Tenant.Header))
175+
if sourceTenantPrefix != "" {
176+
p.cfg.Tenant.Prefix = sourceTenantPrefix + "-"
178177
}
179178
}
180179

@@ -185,7 +184,7 @@ func (p *processor) handle(ctx *fh.RequestCtx) {
185184
// If there's metadata - just accept the request and drop it
186185
if len(wrReqIn.Metadata) > 0 {
187186
if p.cfg.Metadata && p.cfg.Tenant.Default != "" {
188-
r := p.send(clientIP, reqID, tenantPrefix, p.cfg.Tenant.Default, wrReqIn)
187+
r := p.send(clientIP, reqID, p.cfg.Tenant.Default, wrReqIn)
189188
if r.err != nil {
190189
ctx.Error(err.Error(), fh.StatusInternalServerError)
191190
p.Errorf("src=%s req_id=%s: unable to proxy metadata: %s", clientIP, reqID, r.err)
@@ -210,7 +209,7 @@ func (p *processor) handle(ctx *fh.RequestCtx) {
210209

211210
metricTenant := ""
212211
var errs *me.Error
213-
results := p.dispatch(clientIP, reqID, tenantPrefix, m)
212+
results := p.dispatch(clientIP, reqID, m)
214213

215214
code, body := 0, []byte("Ok")
216215

@@ -312,7 +311,7 @@ func (p *processor) marshal(wr *prompb.WriteRequest) (bufOut []byte, err error)
312311
return snappy.Encode(nil, b), nil
313312
}
314313

315-
func (p *processor) dispatch(clientIP net.Addr, reqID uuid.UUID, tenantPrefix string, m map[string]*prompb.WriteRequest) (res []result) {
314+
func (p *processor) dispatch(clientIP net.Addr, reqID uuid.UUID, m map[string]*prompb.WriteRequest) (res []result) {
316315
var wg sync.WaitGroup
317316
res = make([]result, len(m))
318317

@@ -323,7 +322,7 @@ func (p *processor) dispatch(clientIP net.Addr, reqID uuid.UUID, tenantPrefix st
323322
go func(idx int, tenant string, wrReq *prompb.WriteRequest) {
324323
defer wg.Done()
325324

326-
r := p.send(clientIP, reqID, tenantPrefix, tenant, wrReq)
325+
r := p.send(clientIP, reqID, tenant, wrReq)
327326
res[idx] = r
328327
}(i, tenant, wrReq)
329328

@@ -368,7 +367,7 @@ func (p *processor) processTimeseries(ts *prompb.TimeSeries) (tenant string, err
368367
return
369368
}
370369

371-
func (p *processor) send(clientIP net.Addr, reqID uuid.UUID, tenantPrefix string, tenant string, wr *prompb.WriteRequest) (r result) {
370+
func (p *processor) send(clientIP net.Addr, reqID uuid.UUID, tenant string, wr *prompb.WriteRequest) (r result) {
372371
start := time.Now()
373372
r.tenant = tenant
374373

@@ -386,7 +385,7 @@ func (p *processor) send(clientIP net.Addr, reqID uuid.UUID, tenantPrefix string
386385
return
387386
}
388387

389-
p.fillRequestHeaders(clientIP, reqID, tenantPrefix, tenant, req)
388+
p.fillRequestHeaders(clientIP, reqID, tenant, req)
390389

391390
if p.auth.egressHeader != nil {
392391
req.Header.SetBytesV("Authorization", p.auth.egressHeader)
@@ -410,14 +409,14 @@ func (p *processor) send(clientIP net.Addr, reqID uuid.UUID, tenantPrefix string
410409
}
411410

412411
func (p *processor) fillRequestHeaders(
413-
clientIP net.Addr, reqID uuid.UUID, tenantPrefix string, tenant string, req *fh.Request) {
412+
clientIP net.Addr, reqID uuid.UUID, tenant string, req *fh.Request) {
414413
req.Header.Set("Content-Encoding", "snappy")
415414
req.Header.Set("Content-Type", "application/x-protobuf")
416415
req.Header.Set("X-Prometheus-Remote-Write-Version", "0.1.0")
417416
req.Header.Set("X-Cortex-Tenant-Client", clientIP.String())
418417
req.Header.Set("X-Cortex-Tenant-ReqID", reqID.String())
419-
if tenantPrefix != "" {
420-
tenant = tenantPrefix + tenant
418+
if p.cfg.Tenant.Prefix != "" {
419+
tenant = p.cfg.Tenant.Prefix + tenant
421420
}
422421
req.Header.Set(p.cfg.Tenant.Header, tenant)
423422
}

processor_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ func Test_request_headers(t *testing.T) {
226226
req := fh.AcquireRequest()
227227
clientIP, _ := net.ResolveIPAddr("ip", "1.1.1.1")
228228
reqID, _ := uuid.NewRandom()
229-
p.fillRequestHeaders(clientIP, reqID, "", "my-tenant", req)
229+
p.fillRequestHeaders(clientIP, reqID, "my-tenant", req)
230230

231231
assert.Equal(t, "snappy", string(req.Header.Peek("Content-Encoding")))
232232
assert.Equal(t, "my-tenant", string(req.Header.Peek("X-Scope-OrgID")))
@@ -241,7 +241,7 @@ func Test_request_headers_with_prefix(t *testing.T) {
241241
req := fh.AcquireRequest()
242242
clientIP, _ := net.ResolveIPAddr("ip", "1.1.1.1")
243243
reqID, _ := uuid.NewRandom()
244-
p.fillRequestHeaders(clientIP, reqID, "foobar-", "my-tenant", req)
244+
p.fillRequestHeaders(clientIP, reqID, "my-tenant", req)
245245

246246
assert.Equal(t, "foobar-my-tenant", string(req.Header.Peek("X-Scope-OrgID")))
247247
}

0 commit comments

Comments
 (0)