Skip to content

Commit 3fcd369

Browse files
authored
Bump prometheus-operator to v0.80.1 (#3831)
* Bump prometheus-operator to v0.80.1 # Conflicts: # go.sum * Set default scrape protocols to pre-3.0 values
1 parent 844b8a9 commit 3fcd369

File tree

11 files changed

+230
-532
lines changed

11 files changed

+230
-532
lines changed

cmd/otel-allocator/benchmark_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"strings"
1212
"testing"
1313

14-
gokitlog "github.com/go-kit/log"
1514
"github.com/go-logr/logr"
1615
"github.com/prometheus/client_golang/prometheus"
1716
"github.com/prometheus/common/model"
@@ -23,6 +22,7 @@ import (
2322
"sigs.k8s.io/controller-runtime/pkg/log"
2423

2524
"github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/internal/allocation"
25+
"github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/internal/config"
2626
"github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/internal/prehook"
2727
"github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/internal/server"
2828
"github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/internal/target"
@@ -181,7 +181,7 @@ func createTestDiscoverer(allocationStrategy string, prehookConfig map[string][]
181181
}
182182
registry := prometheus.NewRegistry()
183183
sdMetrics, _ := discovery.CreateAndRegisterSDMetrics(registry)
184-
discoveryManager := discovery.NewManager(ctx, gokitlog.NewNopLogger(), registry, sdMetrics)
184+
discoveryManager := discovery.NewManager(ctx, config.NopLogger, registry, sdMetrics)
185185
targetDiscoverer := target.NewDiscoverer(logger, discoveryManager, allocatorPrehook, srv, allocator.SetTargets)
186186
return targetDiscoverer
187187
}

cmd/otel-allocator/internal/config/config.go

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"errors"
1010
"fmt"
1111
"io/fs"
12+
"log/slog"
13+
"math"
1214
"os"
1315
"reflect"
1416
"time"
@@ -38,6 +40,17 @@ const (
3840
DefaultCollectorNotReadyGracePeriod = 0 * time.Second
3941
)
4042

43+
// By default, scrape protocols include PrometheusText1_0_0, which only Prometheus >=3.0 supports.
44+
// Manually exclude this protocol until several versions of the Otel Collector support it.
45+
var DefaultScrapeProtocols = []promconfig.ScrapeProtocol{
46+
promconfig.OpenMetricsText1_0_0,
47+
promconfig.OpenMetricsText0_0_1,
48+
promconfig.PrometheusText0_0_4,
49+
}
50+
51+
// logger which discards all messages written to it. Replace this with slog.DiscardHandler after we require Go 1.24.
52+
var NopLogger = slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.Level(math.MaxInt)}))
53+
4154
type Config struct {
4255
ListenAddr string `yaml:"listen_addr,omitempty"`
4356
KubeConfigFilePath string `yaml:"kube_config_file_path,omitempty"`
@@ -116,7 +129,12 @@ func MapToPromConfig() mapstructure.DecodeHookFuncType {
116129

117130
pConfig := &promconfig.Config{}
118131

119-
mb, err := yaml.Marshal(data.(map[any]any))
132+
dataMap := data.(map[any]any)
133+
err := ApplyPromConfigDefaults(dataMap)
134+
if err != nil {
135+
return nil, err
136+
}
137+
mb, err := yaml.Marshal(dataMap)
120138
if err != nil {
121139
return nil, err
122140
}
@@ -129,6 +147,32 @@ func MapToPromConfig() mapstructure.DecodeHookFuncType {
129147
}
130148
}
131149

150+
// applyPromConfigDefaults applies our own defaults to the Prometheus configuration. The unmarshalling process for
151+
// Prometheus config is quite involved, and as a result, we need to apply our own defaults before it happens.
152+
func ApplyPromConfigDefaults(promcCfgMap map[any]any) error {
153+
// use our own struct definition here because we don't want Prometheus unmarshalling logic to apply here
154+
promCfg := struct {
155+
GlobalConfig struct {
156+
ScrapeProtocols []promconfig.ScrapeProtocol `mapstructure:"scrape_protocols"`
157+
Rest map[any]any `mapstructure:",remain"`
158+
} `mapstructure:"global"`
159+
Rest map[any]any `mapstructure:",remain"`
160+
}{}
161+
err := mapstructure.Decode(promcCfgMap, &promCfg)
162+
if err != nil {
163+
return err
164+
}
165+
// apply defaults here
166+
promCfg.GlobalConfig.ScrapeProtocols = DefaultScrapeProtocols
167+
168+
// decode back into the map
169+
err = mapstructure.Decode(promCfg, &promcCfgMap)
170+
if err != nil {
171+
return err
172+
}
173+
return nil
174+
}
175+
132176
// MapToLabelSelector returns a DecodeHookFuncType that
133177
// provides a mechanism for decoding both matchLabels and matchExpressions from camelcase to lowercase
134178
// because we use yaml unmarshaling that supports lowercase field names if no `yaml` tag is defined

cmd/otel-allocator/internal/config/config_test.go

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@ import (
2020
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2121
)
2222

23-
var defaultScrapeProtocols = []promconfig.ScrapeProtocol{
24-
promconfig.OpenMetricsText1_0_0,
25-
promconfig.OpenMetricsText0_0_1,
26-
promconfig.PrometheusText0_0_4,
27-
}
28-
2923
func TestLoad(t *testing.T) {
3024
type args struct {
3125
file string
@@ -69,7 +63,7 @@ func TestLoad(t *testing.T) {
6963
PromConfig: &promconfig.Config{
7064
GlobalConfig: promconfig.GlobalConfig{
7165
ScrapeInterval: model.Duration(60 * time.Second),
72-
ScrapeProtocols: defaultScrapeProtocols,
66+
ScrapeProtocols: DefaultScrapeProtocols,
7367
ScrapeTimeout: model.Duration(10 * time.Second),
7468
EvaluationInterval: model.Duration(60 * time.Second),
7569
},
@@ -80,7 +74,7 @@ func TestLoad(t *testing.T) {
8074
EnableCompression: true,
8175
HonorTimestamps: true,
8276
ScrapeInterval: model.Duration(60 * time.Second),
83-
ScrapeProtocols: defaultScrapeProtocols,
77+
ScrapeProtocols: DefaultScrapeProtocols,
8478
ScrapeTimeout: model.Duration(10 * time.Second),
8579
MetricsPath: "/metrics",
8680
Scheme: "http",
@@ -156,7 +150,7 @@ func TestLoad(t *testing.T) {
156150
PromConfig: &promconfig.Config{
157151
GlobalConfig: promconfig.GlobalConfig{
158152
ScrapeInterval: model.Duration(60 * time.Second),
159-
ScrapeProtocols: defaultScrapeProtocols,
153+
ScrapeProtocols: DefaultScrapeProtocols,
160154
ScrapeTimeout: model.Duration(10 * time.Second),
161155
EvaluationInterval: model.Duration(60 * time.Second),
162156
},
@@ -167,7 +161,7 @@ func TestLoad(t *testing.T) {
167161
EnableCompression: true,
168162
HonorTimestamps: true,
169163
ScrapeInterval: model.Duration(60 * time.Second),
170-
ScrapeProtocols: defaultScrapeProtocols,
164+
ScrapeProtocols: DefaultScrapeProtocols,
171165
ScrapeTimeout: model.Duration(10 * time.Second),
172166
MetricsPath: "/metrics",
173167
Scheme: "http",
@@ -231,7 +225,7 @@ func TestLoad(t *testing.T) {
231225
PromConfig: &promconfig.Config{
232226
GlobalConfig: promconfig.GlobalConfig{
233227
ScrapeInterval: model.Duration(60 * time.Second),
234-
ScrapeProtocols: defaultScrapeProtocols,
228+
ScrapeProtocols: DefaultScrapeProtocols,
235229
ScrapeTimeout: model.Duration(10 * time.Second),
236230
EvaluationInterval: model.Duration(60 * time.Second),
237231
},
@@ -242,7 +236,7 @@ func TestLoad(t *testing.T) {
242236
EnableCompression: true,
243237
HonorTimestamps: true,
244238
ScrapeInterval: model.Duration(60 * time.Second),
245-
ScrapeProtocols: defaultScrapeProtocols,
239+
ScrapeProtocols: DefaultScrapeProtocols,
246240
ScrapeTimeout: model.Duration(10 * time.Second),
247241
MetricsPath: "/metrics",
248242
Scheme: "http",
@@ -330,7 +324,7 @@ func TestLoad(t *testing.T) {
330324
PromConfig: &promconfig.Config{
331325
GlobalConfig: promconfig.GlobalConfig{
332326
ScrapeInterval: model.Duration(60 * time.Second),
333-
ScrapeProtocols: defaultScrapeProtocols,
327+
ScrapeProtocols: DefaultScrapeProtocols,
334328
ScrapeTimeout: model.Duration(10 * time.Second),
335329
EvaluationInterval: model.Duration(60 * time.Second),
336330
},
@@ -341,7 +335,7 @@ func TestLoad(t *testing.T) {
341335
EnableCompression: true,
342336
HonorTimestamps: true,
343337
ScrapeInterval: model.Duration(60 * time.Second),
344-
ScrapeProtocols: defaultScrapeProtocols,
338+
ScrapeProtocols: DefaultScrapeProtocols,
345339
ScrapeTimeout: model.Duration(10 * time.Second),
346340
MetricsPath: "/metrics",
347341
Scheme: "http",
@@ -429,7 +423,7 @@ func TestLoad(t *testing.T) {
429423
PromConfig: &promconfig.Config{
430424
GlobalConfig: promconfig.GlobalConfig{
431425
ScrapeInterval: model.Duration(60 * time.Second),
432-
ScrapeProtocols: defaultScrapeProtocols,
426+
ScrapeProtocols: DefaultScrapeProtocols,
433427
ScrapeTimeout: model.Duration(10 * time.Second),
434428
EvaluationInterval: model.Duration(60 * time.Second),
435429
},
@@ -440,7 +434,7 @@ func TestLoad(t *testing.T) {
440434
EnableCompression: true,
441435
HonorTimestamps: true,
442436
ScrapeInterval: model.Duration(60 * time.Second),
443-
ScrapeProtocols: defaultScrapeProtocols,
437+
ScrapeProtocols: DefaultScrapeProtocols,
444438
ScrapeTimeout: model.Duration(10 * time.Second),
445439
MetricsPath: "/metrics",
446440
Scheme: "http",

cmd/otel-allocator/internal/target/discovery_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"testing"
1212
"time"
1313

14-
gokitlog "github.com/go-kit/log"
1514
"github.com/prometheus/client_golang/prometheus"
1615
commonconfig "github.com/prometheus/common/config"
1716
"github.com/prometheus/common/model"
@@ -61,7 +60,7 @@ func TestDiscovery(t *testing.T) {
6160
registry := prometheus.NewRegistry()
6261
sdMetrics, err := discovery.CreateAndRegisterSDMetrics(registry)
6362
require.NoError(t, err)
64-
d := discovery.NewManager(ctx, gokitlog.NewNopLogger(), registry, sdMetrics)
63+
d := discovery.NewManager(ctx, config.NopLogger, registry, sdMetrics)
6564
results := make(chan []string)
6665
manager := NewDiscoverer(ctrl.Log.WithName("test"), d, nil, scu, func(targets []*Item) {
6766
var result []string
@@ -309,7 +308,7 @@ func TestDiscovery_ScrapeConfigHashing(t *testing.T) {
309308
registry := prometheus.NewRegistry()
310309
sdMetrics, err := discovery.CreateAndRegisterSDMetrics(registry)
311310
require.NoError(t, err)
312-
d := discovery.NewManager(ctx, gokitlog.NewNopLogger(), registry, sdMetrics)
311+
d := discovery.NewManager(ctx, config.NopLogger, registry, sdMetrics)
313312
manager := NewDiscoverer(ctrl.Log.WithName("test"), d, nil, scu, nil)
314313

315314
for _, tc := range tests {
@@ -348,7 +347,7 @@ func TestDiscovery_NoConfig(t *testing.T) {
348347
registry := prometheus.NewRegistry()
349348
sdMetrics, err := discovery.CreateAndRegisterSDMetrics(registry)
350349
require.NoError(t, err)
351-
d := discovery.NewManager(ctx, gokitlog.NewNopLogger(), registry, sdMetrics)
350+
d := discovery.NewManager(ctx, config.NopLogger, registry, sdMetrics)
352351
manager := NewDiscoverer(ctrl.Log.WithName("test"), d, nil, scu, nil)
353352
defer close(manager.close)
354353
defer cancelFunc()
@@ -398,7 +397,7 @@ func BenchmarkApplyScrapeConfig(b *testing.B) {
398397
registry := prometheus.NewRegistry()
399398
sdMetrics, err := discovery.CreateAndRegisterSDMetrics(registry)
400399
require.NoError(b, err)
401-
d := discovery.NewManager(ctx, gokitlog.NewNopLogger(), registry, sdMetrics)
400+
d := discovery.NewManager(ctx, config.NopLogger, registry, sdMetrics)
402401
manager := NewDiscoverer(ctrl.Log.WithName("test"), d, nil, scu, nil)
403402

404403
b.ResetTimer()

cmd/otel-allocator/internal/watcher/promOperator.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ const (
3939
minEventInterval = time.Second * 5
4040
)
4141

42+
var DefaultScrapeProtocols = []monitoringv1.ScrapeProtocol{
43+
monitoringv1.OpenMetricsText1_0_0,
44+
monitoringv1.OpenMetricsText0_0_1,
45+
monitoringv1.PrometheusText0_0_4,
46+
}
47+
4248
func NewPrometheusCRWatcher(ctx context.Context, logger logr.Logger, cfg allocatorconfig.Config) (*PrometheusCRWatcher, error) {
4349
promLogger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelWarn}))
4450
slogger := slog.New(logr.ToSlogHandler(logger))
@@ -82,6 +88,8 @@ func NewPrometheusCRWatcher(ctx context.Context, logger logr.Logger, cfg allocat
8288
ProbeSelector: cfg.PrometheusCR.ProbeSelector,
8389
ProbeNamespaceSelector: cfg.PrometheusCR.ProbeNamespaceSelector,
8490
ServiceDiscoveryRole: &serviceDiscoveryRole,
91+
Version: "2.55.1", // fix Prometheus version 2 to avoid generating incompatible config
92+
ScrapeProtocols: DefaultScrapeProtocols,
8593
},
8694
EvaluationInterval: monitoringv1.Duration("30s"),
8795
},
@@ -384,6 +392,11 @@ func (w *PrometheusCRWatcher) LoadConfig(ctx context.Context) (*promconfig.Confi
384392
return nil, err
385393
}
386394

395+
generatedConfig, err = applyPromConfigDefaults(generatedConfig)
396+
if err != nil {
397+
return nil, err
398+
}
399+
387400
unmarshalErr := yaml.Unmarshal(generatedConfig, promCfg)
388401
if unmarshalErr != nil {
389402
return nil, unmarshalErr
@@ -443,3 +456,18 @@ func (w *PrometheusCRWatcher) WaitForNamedCacheSync(controllerName string, inf c
443456

444457
return ok
445458
}
459+
460+
// applyPromConfigDefaults applies our own defaults to the Prometheus configuration. The unmarshalling process for
461+
// Prometheus config is quite involved, and as a result, we need to apply our own defaults before it happens.
462+
func applyPromConfigDefaults(configBytes []byte) ([]byte, error) {
463+
var configMap map[any]any
464+
err := yaml.Unmarshal(configBytes, &configMap)
465+
if err != nil {
466+
return nil, err
467+
}
468+
err = allocatorconfig.ApplyPromConfigDefaults(configMap)
469+
if err != nil {
470+
return nil, err
471+
}
472+
return yaml.Marshal(configMap)
473+
}

0 commit comments

Comments
 (0)