Skip to content

Commit f4a7a7c

Browse files
authored
Do not prefix Thanos objstore client metrics and fix instrumentation in querier (#2568)
* Do not prefix Thanos objstore client metrics and fix instrumentation in querier Signed-off-by: Marco Pracucci <[email protected]> * Updated CHANGELOG Signed-off-by: Marco Pracucci <[email protected]> * Added missing file Signed-off-by: Marco Pracucci <[email protected]> * Fixed tests Signed-off-by: Marco Pracucci <[email protected]> * Moved bucket client instrumentation to factory Signed-off-by: Marco Pracucci <[email protected]> * Fixed tests Signed-off-by: Marco Pracucci <[email protected]>
1 parent 91f7470 commit f4a7a7c

File tree

10 files changed

+54
-28
lines changed

10 files changed

+54
-28
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
* [CHANGE] Slow query log has a different output now. Previously used `url` field has been replaced with `host` and `path`, and query parameters are logged as individual log fields with `qs_` prefix. #2520
2323
* [CHANGE] Experimental WAL: WAL and checkpoint compression is now disabled. #2436
2424
* [CHANGE] Update in dependency `go-kit/kit` from `v0.9.0` to `v0.10.0`. HTML escaping disabled in JSON Logger. #2535
25+
* [CHANGE] Experimental TSDB: Removed `cortex_<service>_` prefix from Thanos objstore metrics and added `component` label to distinguish which Cortex component is doing API calls to the object storage when running in single-binary mode: #2568
26+
- `cortex_<service>_thanos_objstore_bucket_operations_total` renamed to `thanos_objstore_bucket_operations_total{component="<name>"}`
27+
- `cortex_<service>_thanos_objstore_bucket_operation_failures_total` renamed to `thanos_objstore_bucket_operation_failures_total{component="<name>"}`
28+
- `cortex_<service>_thanos_objstore_bucket_operation_duration_seconds` renamed to `thanos_objstore_bucket_operation_duration_seconds{component="<name>"}`
29+
- `cortex_<service>_thanos_objstore_bucket_last_successful_upload_time` renamed to `thanos_objstore_bucket_last_successful_upload_time{component="<name>"}`
2530
* [FEATURE] Ruler: The `-ruler.evaluation-delay` flag was added to allow users to configure a default evaluation delay for all rules in cortex. The default value is 0 which is the current behavior. #2423
2631
* [FEATURE] Experimental: Added a new object storage client for OpenStack Swift. #2440
2732
* [FEATURE] Update in dependency `weaveworks/common`. TLS config options added to the Server. #2535

development/tsdb-blocks-storage-s3/config/grafana-agent.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ prometheus:
4646
- targets: ['query-frontend:8007']
4747
labels:
4848
container: 'query-frontend'
49+
- job_name: cortex-store-gateway-1
50+
static_configs:
51+
- targets: ['store-gateway-1:8008']
52+
labels:
53+
container: 'store-gateway-1'
54+
- job_name: cortex-store-gateway-2
55+
static_configs:
56+
- targets: ['store-gateway-2:8009']
57+
labels:
58+
container: 'store-gateway-2'
4959

5060
remote_write:
5161
- url: http://distributor:8001/api/prom/push

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ scrape_configs:
3939
- targets: ['query-frontend:8007']
4040
labels:
4141
container: 'query-frontend'
42+
- job_name: cortex-store-gateway-1
43+
static_configs:
44+
- targets: ['store-gateway-1:8008']
45+
labels:
46+
container: 'store-gateway-1'
47+
- job_name: cortex-store-gateway-2
48+
static_configs:
49+
- targets: ['store-gateway-2:8009']
50+
labels:
51+
container: 'store-gateway-2'
4252

4353
remote_write:
4454
- url: http://distributor:8001/api/prom/push

pkg/compactor/compactor.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,11 @@ type Compactor struct {
112112
// NewCompactor makes a new Compactor.
113113
func NewCompactor(compactorCfg Config, storageCfg cortex_tsdb.Config, logger log.Logger, registerer prometheus.Registerer) (*Compactor, error) {
114114
createBucketClientAndTsdbCompactor := func(ctx context.Context) (objstore.Bucket, tsdb.Compactor, error) {
115-
bucketClient, err := cortex_tsdb.NewBucketClient(ctx, storageCfg, "compactor", logger)
115+
bucketClient, err := cortex_tsdb.NewBucketClient(ctx, storageCfg, "compactor", logger, registerer)
116116
if err != nil {
117117
return nil, nil, errors.Wrap(err, "failed to create the bucket client")
118118
}
119119

120-
if registerer != nil {
121-
bucketClient = objstore.BucketWithMetrics( /* bucket label value */ "", bucketClient, prometheus.WrapRegistererWithPrefix("cortex_compactor_", registerer))
122-
}
123-
124120
compactor, err := tsdb.NewLeveledCompactor(ctx, registerer, logger, compactorCfg.BlockRanges.ToMilliseconds(), downsample.NewPool())
125121
return bucketClient, compactor, err
126122
}

pkg/ingester/ingester_v2.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,11 @@ type TSDBState struct {
8282
// NewV2 returns a new Ingester that uses prometheus block storage instead of chunk storage
8383
func NewV2(cfg Config, clientConfig client.Config, limits *validation.Overrides, registerer prometheus.Registerer) (*Ingester, error) {
8484
util.WarnExperimentalUse("Blocks storage engine")
85-
bucketClient, err := cortex_tsdb.NewBucketClient(context.Background(), cfg.TSDBConfig, "cortex", util.Logger)
85+
bucketClient, err := cortex_tsdb.NewBucketClient(context.Background(), cfg.TSDBConfig, "ingester", util.Logger, registerer)
8686
if err != nil {
8787
return nil, errors.Wrap(err, "failed to create the bucket client")
8888
}
8989

90-
if registerer != nil {
91-
bucketClient = objstore.BucketWithMetrics( /* bucket label value */ "", bucketClient, prometheus.WrapRegistererWithPrefix("cortex_ingester_", registerer))
92-
}
93-
9490
i := &Ingester{
9591
cfg: cfg,
9692
clientConfig: clientConfig,

pkg/querier/block.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/prometheus/prometheus/promql"
1212
"github.com/prometheus/prometheus/storage"
1313
"github.com/prometheus/prometheus/tsdb/chunkenc"
14-
"github.com/thanos-io/thanos/pkg/objstore"
1514
"github.com/thanos-io/thanos/pkg/store/storepb"
1615
"github.com/weaveworks/common/logging"
1716
"github.com/weaveworks/common/user"
@@ -33,15 +32,11 @@ type BlockQueryable struct {
3332
// NewBlockQueryable returns a client to query a block store
3433
func NewBlockQueryable(cfg tsdb.Config, logLevel logging.Level, registerer prometheus.Registerer) (*BlockQueryable, error) {
3534
util.WarnExperimentalUse("Blocks storage engine")
36-
bucketClient, err := tsdb.NewBucketClient(context.Background(), cfg, "cortex-bucket-stores", util.Logger)
35+
bucketClient, err := tsdb.NewBucketClient(context.Background(), cfg, "querier", util.Logger, registerer)
3736
if err != nil {
3837
return nil, err
3938
}
4039

41-
if registerer != nil {
42-
bucketClient = objstore.BucketWithMetrics( /* bucket label value */ "", bucketClient, prometheus.WrapRegistererWithPrefix("cortex_querier_", registerer))
43-
}
44-
4540
us, err := NewBucketStoresService(cfg, bucketClient, logLevel, util.Logger, registerer)
4641
if err != nil {
4742
return nil, err

pkg/querier/blocks_store_queryable.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func NewBlocksStoreQueryable(stores BlocksStoreSet, finder BlocksFinder, reg pro
9696
func NewBlocksStoreQueryableFromConfig(querierCfg Config, gatewayCfg storegateway.Config, storageCfg cortex_tsdb.Config, logger log.Logger, reg prometheus.Registerer) (*BlocksStoreQueryable, error) {
9797
var stores BlocksStoreSet
9898

99-
bucketClient, err := cortex_tsdb.NewBucketClient(context.Background(), storageCfg, "querier", logger)
99+
bucketClient, err := cortex_tsdb.NewBucketClient(context.Background(), storageCfg, "querier", logger, reg)
100100
if err != nil {
101101
return nil, errors.Wrap(err, "failed to create bucket client")
102102
}

pkg/storage/tsdb/bucket_client.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55

66
"github.com/go-kit/kit/log"
7+
"github.com/prometheus/client_golang/prometheus"
78
"github.com/thanos-io/thanos/pkg/objstore"
89

910
"github.com/cortexproject/cortex/pkg/storage/backend/azure"
@@ -13,17 +14,34 @@ import (
1314
)
1415

1516
// NewBucketClient creates a new bucket client based on the configured backend
16-
func NewBucketClient(ctx context.Context, cfg Config, name string, logger log.Logger) (objstore.Bucket, error) {
17+
func NewBucketClient(ctx context.Context, cfg Config, name string, logger log.Logger, reg prometheus.Registerer) (client objstore.Bucket, err error) {
1718
switch cfg.Backend {
1819
case BackendS3:
19-
return s3.NewBucketClient(cfg.S3, name, logger)
20+
client, err = s3.NewBucketClient(cfg.S3, name, logger)
2021
case BackendGCS:
21-
return gcs.NewBucketClient(ctx, cfg.GCS, name, logger)
22+
client, err = gcs.NewBucketClient(ctx, cfg.GCS, name, logger)
2223
case BackendAzure:
23-
return azure.NewBucketClient(cfg.Azure, name, logger)
24+
client, err = azure.NewBucketClient(cfg.Azure, name, logger)
2425
case BackendFilesystem:
25-
return filesystem.NewBucketClient(cfg.Filesystem)
26+
client, err = filesystem.NewBucketClient(cfg.Filesystem)
2627
default:
2728
return nil, errUnsupportedStorageBackend
2829
}
30+
31+
if err != nil {
32+
return nil, err
33+
}
34+
35+
return bucketWithMetrics(client, name, reg), nil
36+
}
37+
38+
func bucketWithMetrics(bucketClient objstore.Bucket, name string, reg prometheus.Registerer) objstore.Bucket {
39+
if reg == nil {
40+
return bucketClient
41+
}
42+
43+
return objstore.BucketWithMetrics(
44+
"", // bucket label value
45+
bucketClient,
46+
prometheus.WrapRegistererWith(prometheus.Labels{"component": name}, reg))
2947
}

pkg/storage/tsdb/bucket_client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func TestNewBucketClient(t *testing.T) {
8686
require.NoError(t, err)
8787

8888
// Instance a new bucket client from the config
89-
bucketClient, err := NewBucketClient(context.Background(), cfg, "test", util.Logger)
89+
bucketClient, err := NewBucketClient(context.Background(), cfg, "test", util.Logger, nil)
9090
require.Equal(t, testData.expectedErr, err)
9191

9292
if testData.expectedErr == nil {

pkg/storegateway/gateway.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -304,14 +304,10 @@ func (g *StoreGateway) OnRingInstanceHeartbeat(_ *ring.BasicLifecycler, _ *ring.
304304
}
305305

306306
func createBucketClient(cfg cortex_tsdb.Config, logger log.Logger, reg prometheus.Registerer) (objstore.Bucket, error) {
307-
bucketClient, err := cortex_tsdb.NewBucketClient(context.Background(), cfg, "cortex-bucket-stores", logger)
307+
bucketClient, err := cortex_tsdb.NewBucketClient(context.Background(), cfg, "store-gateway", logger, reg)
308308
if err != nil {
309309
return nil, errors.Wrap(err, "create bucket client")
310310
}
311311

312-
if reg != nil {
313-
bucketClient = objstore.BucketWithMetrics( /* bucket label value */ "", bucketClient, prometheus.WrapRegistererWithPrefix("cortex_storegateway_", reg))
314-
}
315-
316312
return bucketClient, nil
317313
}

0 commit comments

Comments
 (0)