Skip to content

Commit e9dd635

Browse files
authored
Fixed ruler to run with blocks storage (cortexproject#2101)
* Fixed ruler to run with blocks storage Signed-off-by: Marco Pracucci <marco@pracucci.com>
1 parent 748b5c1 commit e9dd635

File tree

7 files changed

+107
-15
lines changed

7 files changed

+107
-15
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
* `-server.grpc.keepalive.timeout`
2929
* [ENHANCEMENT] PostgreSQL: Bump up `github.com/lib/pq` from `v1.0.0` to `v1.3.0` to support PostgreSQL SCRAM-SHA-256 authentication. #2097
3030
* [BUGFIX] Experimental TSDB: fixed `/all_user_stats` and `/api/prom/user_stats` endpoints when using the experimental TSDB blocks storage. #2042
31+
* [BUGFIX] Experimental TSDB: fixed ruler to correctly work with the experimental TSDB blocks storage. #2101
3132
* [BUGFIX] Azure Blob ChunkStore: Fixed issue causing `invalid chunk checksum` errors. #2074
3233

3334
Cortex 0.4.0 is the last version that can *write* denormalised tokens. Cortex 0.5.0 and above always write normalised tokens.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"since": 2,
3+
"configs": {
4+
"fake": {
5+
"id": 1,
6+
"config": {
7+
"rule_format_version": "2",
8+
"rules_files": {
9+
"test": "groups:\n - name: group-1\n rules:\n - record: avalanche_metric_mmmmm_0_0:count\n expr: count(avalanche_metric_mmmmm_0_0)\n - name: group-2\n rules:\n - record: avalanche_metric_mmmmm_0:count\n expr: |\n count(avalanche_metric_mmmmm_0_0) +\n count(avalanche_metric_mmmmm_0_1)\n - alert: alert-1\n expr: |\n count(avalanche_metric_mmmmm_0_0) > 1000\n - alert: alert-2\n expr: count(avalanche_metric_mmmmm_0_0) > 100\n for: 5m\n labels:\n label1: value1\n label2: value2\n annotations:\n annotation1: value1\n annotation2: value2\n"
10+
}
11+
}
12+
}
13+
}
14+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
groups:
2+
- name: group-1
3+
rules:
4+
- record: avalanche_metric_mmmmm_0_0:count
5+
expr: count(avalanche_metric_mmmmm_0_0)
6+
- name: group-2
7+
rules:
8+
- record: avalanche_metric_mmmmm_0:count
9+
expr: |
10+
count(avalanche_metric_mmmmm_0_0) +
11+
count(avalanche_metric_mmmmm_0_1)
12+
- alert: alert-1
13+
expr: |
14+
count(avalanche_metric_mmmmm_0_0) > 1000
15+
- alert: alert-2
16+
expr: count(avalanche_metric_mmmmm_0_0) > 100
17+
for: 5m
18+
labels:
19+
label1: value1
20+
label2: value2
21+
annotations:
22+
annotation1: value1
23+
annotation2: value2

development/tsdb-blocks-storage-s3/config/cortex.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,12 @@ tsdb:
4646
secret_access_key: supersecret
4747
insecure: true
4848

49+
ruler:
50+
enable_api: true
51+
storeconfig:
52+
type: configdb
53+
configdb:
54+
configsapiurl: http://configstore:80/
55+
4956
storage:
5057
engine: tsdb

development/tsdb-blocks-storage-s3/docker-compose.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ services:
1818
volumes:
1919
- .data-minio:/data:delegated
2020

21+
configstore:
22+
image: nginx
23+
volumes:
24+
- .data-configstore:/usr/share/nginx/html/private:ro
25+
2126
distributor:
2227
build:
2328
context: .
@@ -75,3 +80,17 @@ services:
7580
- 8004:8004
7681
volumes:
7782
- ./config:/cortex/config
83+
84+
ruler:
85+
build:
86+
context: .
87+
dockerfile: dev.dockerfile
88+
image: cortex
89+
command: ["sh", "-c", "sleep 3 && exec ./cortex -config.file=./config/cortex.yaml -target=ruler -server.http-listen-port=8005 -server.grpc-listen-port=9005"]
90+
depends_on:
91+
- consul
92+
- minio
93+
ports:
94+
- 8005:8005
95+
volumes:
96+
- ./config:/cortex/config

pkg/cortex/cortex.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ type Cortex struct {
176176
configDB db.DB
177177
alertmanager *alertmanager.MultitenantAlertmanager
178178
compactor *compactor.Compactor
179+
180+
// The chunk store that the querier should use to query the long
181+
// term storage. It depends on the storage engine used.
182+
querierChunkStore querier.ChunkStore
179183
}
180184

181185
// New makes a new Cortex.

pkg/cortex/modules.go

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ const (
4848
Distributor
4949
Ingester
5050
Querier
51+
QuerierChunkStore
5152
QueryFrontend
5253
Store
5354
TableManager
@@ -76,6 +77,8 @@ func (m moduleName) String() string {
7677
return "ingester"
7778
case Querier:
7879
return "querier"
80+
case QuerierChunkStore:
81+
return "querier-chunk-store"
7982
case QueryFrontend:
8083
return "query-frontend"
8184
case TableManager:
@@ -118,6 +121,9 @@ func (m *moduleName) Set(s string) error {
118121
case "querier":
119122
*m = Querier
120123
return nil
124+
case "querier-chunk-store":
125+
*m = QuerierChunkStore
126+
return nil
121127
case "query-frontend":
122128
*m = QueryFrontend
123129
return nil
@@ -226,18 +232,7 @@ func (t *Cortex) stopDistributor() (err error) {
226232
}
227233

228234
func (t *Cortex) initQuerier(cfg *Config) (err error) {
229-
var store querier.ChunkStore
230-
231-
if cfg.Storage.Engine == storage.StorageEngineTSDB {
232-
store, err = querier.NewBlockQuerier(cfg.TSDB, cfg.Server.LogLevel, prometheus.DefaultRegisterer)
233-
if err != nil {
234-
return err
235-
}
236-
} else {
237-
store = t.store
238-
}
239-
240-
queryable, engine := querier.New(cfg.Querier, t.distributor, store)
235+
queryable, engine := querier.New(cfg.Querier, t.distributor, t.querierChunkStore)
241236
api := v1.NewAPI(
242237
engine,
243238
queryable,
@@ -286,6 +281,29 @@ func (t *Cortex) stopQuerier() error {
286281
return nil
287282
}
288283

284+
func (t *Cortex) initQuerierChunkStore(cfg *Config) error {
285+
if cfg.Storage.Engine == storage.StorageEngineChunks {
286+
t.querierChunkStore = t.store
287+
return nil
288+
}
289+
290+
if cfg.Storage.Engine == storage.StorageEngineTSDB {
291+
store, err := querier.NewBlockQuerier(cfg.TSDB, cfg.Server.LogLevel, prometheus.DefaultRegisterer)
292+
if err != nil {
293+
return err
294+
}
295+
296+
t.querierChunkStore = store
297+
return nil
298+
}
299+
300+
return fmt.Errorf("unknown storage engine '%s'", cfg.Storage.Engine)
301+
}
302+
303+
func (t *Cortex) stopQuerierChunkStore() error {
304+
return nil
305+
}
306+
289307
func (t *Cortex) initIngester(cfg *Config) (err error) {
290308
cfg.Ingester.LifecyclerConfig.RingConfig.KVStore.Multi.ConfigProvider = multiClientRuntimeConfigChannel(t.runtimeConfig)
291309
cfg.Ingester.LifecyclerConfig.ListenPort = &cfg.Server.GRPCListenPort
@@ -413,7 +431,7 @@ func (t *Cortex) stopTableManager() error {
413431

414432
func (t *Cortex) initRuler(cfg *Config) (err error) {
415433
cfg.Ruler.Ring.ListenPort = cfg.Server.GRPCListenPort
416-
queryable, engine := querier.New(cfg.Querier, t.distributor, t.store)
434+
queryable, engine := querier.New(cfg.Querier, t.distributor, t.querierChunkStore)
417435

418436
t.ruler, err = ruler.NewRuler(cfg.Ruler, engine, queryable, t.distributor, prometheus.DefaultRegisterer, util.Logger)
419437
if err != nil {
@@ -527,11 +545,17 @@ var modules = map[moduleName]module{
527545
},
528546

529547
Querier: {
530-
deps: []moduleName{Distributor, Store, Ring, Server},
548+
deps: []moduleName{Distributor, Store, Ring, Server, QuerierChunkStore},
531549
init: (*Cortex).initQuerier,
532550
stop: (*Cortex).stopQuerier,
533551
},
534552

553+
QuerierChunkStore: {
554+
deps: []moduleName{Store},
555+
init: (*Cortex).initQuerierChunkStore,
556+
stop: (*Cortex).stopQuerierChunkStore,
557+
},
558+
535559
QueryFrontend: {
536560
deps: []moduleName{Server, Overrides},
537561
init: (*Cortex).initQueryFrontend,
@@ -545,7 +569,7 @@ var modules = map[moduleName]module{
545569
},
546570

547571
Ruler: {
548-
deps: []moduleName{Distributor, Store},
572+
deps: []moduleName{Distributor, Store, QuerierChunkStore},
549573
init: (*Cortex).initRuler,
550574
stop: (*Cortex).stopRuler,
551575
},

0 commit comments

Comments
 (0)