Skip to content

Commit b81d78b

Browse files
committed
pkg/manifests: Add EnforcedTargetLimit for user-workload monitoring
This adds support for configuring the EnforcedTargetLimit for the user-workload Prometheus instance. This lets admins set an overall limit on the number of targets scraped.
1 parent d745a4e commit b81d78b

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## 4.9
44

55
- [#1241](https://github.com/openshift/cluster-monitoring-operator/pull/1241) Add config option to disable Grafana deployment.
6+
- [#1278](https://github.com/openshift/cluster-monitoring-operator/pull/1278) Add EnforcedTargetLimit option for user-workload Prometheus.
67

78
## 4.8
89

pkg/manifests/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ type PrometheusRestrictedConfig struct {
403403
VolumeClaimTemplate *monv1.EmbeddedPersistentVolumeClaim `json:"volumeClaimTemplate"`
404404
RemoteWrite []monv1.RemoteWriteSpec `json:"remoteWrite"`
405405
EnforcedSampleLimit *uint64 `json:"enforcedSampleLimit"`
406+
EnforcedTargetLimit *uint64 `json:"enforcedTargetLimit"`
406407
}
407408

408409
func (u *UserWorkloadConfiguration) applyDefaults() {

pkg/manifests/manifests.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,10 @@ func (f *Factory) PrometheusUserWorkload(grpcTLS *v1.Secret) (*monv1.Prometheus,
15921592
p.Spec.EnforcedSampleLimit = f.config.UserWorkloadConfiguration.Prometheus.EnforcedSampleLimit
15931593
}
15941594

1595+
if f.config.UserWorkloadConfiguration.Prometheus.EnforcedTargetLimit != nil {
1596+
p.Spec.EnforcedTargetLimit = f.config.UserWorkloadConfiguration.Prometheus.EnforcedTargetLimit
1597+
}
1598+
15951599
// end removal
15961600
if f.config.Images.Thanos != "" {
15971601
p.Spec.Thanos.Image = &f.config.Images.Thanos

test/e2e/user_workload_monitoring_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ func TestUserWorkloadMonitoring(t *testing.T) {
6060
},
6161
Data: map[string]string{
6262
"config.yaml": `prometheus:
63+
enforcedTargetLimit: 10
6364
volumeClaimTemplate:
6465
spec:
6566
resources:
@@ -92,6 +93,7 @@ func TestUserWorkloadMonitoring(t *testing.T) {
9293
{"assert tenancy model is enforced for rules", assertTenancyForRules},
9394
{"assert prometheus and alertmanager is not deployed in user namespace", assertPrometheusAlertmanagerInUserNamespace},
9495
{"assert grpc tls rotation", assertGRPCTLSRotation},
96+
{"assert enforced target limit is configured", assertEnforcedTargetLimit(10)},
9597
{"enable user workload monitoring, assert prometheus rollout", createUserWorkloadAssets(cm)},
9698
{"set VolumeClaimTemplate for prometheus CR, assert that it is created", assertVolumeClaimsConfigAndRollout(rolloutParams{
9799
namespace: f.UserWorkloadMonitoringNs,
@@ -983,3 +985,26 @@ func assertDeletedUserWorkloadAssets(cm *v1.ConfigMap) func(*testing.T) {
983985
}
984986
}
985987
}
988+
989+
func assertEnforcedTargetLimit(limit uint64) func(*testing.T) {
990+
return func(t *testing.T) {
991+
err := framework.Poll(time.Second, 5*time.Minute, func() error {
992+
prom, err := f.MonitoringClient.Prometheuses(f.UserWorkloadMonitoringNs).Get(f.Ctx, "user-workload", metav1.GetOptions{})
993+
if err != nil {
994+
return err
995+
}
996+
997+
if prom.Spec.EnforcedTargetLimit == nil {
998+
return errors.New("EnforcedTargetLimit not set")
999+
} else if *prom.Spec.EnforcedTargetLimit != limit {
1000+
return fmt.Errorf("expected EnforcedTargetLimit to be %d, but got %d", limit, *prom.Spec.EnforcedTargetLimit)
1001+
}
1002+
1003+
return nil
1004+
})
1005+
1006+
if err != nil {
1007+
t.Fatalf("Timed out waiting for EnforcedTargetLimit configuration: %v", err)
1008+
}
1009+
}
1010+
}

0 commit comments

Comments
 (0)