Skip to content

Commit 6120bc5

Browse files
cluster: support retention by size for prometheus
1 parent fab52bf commit 6120bc5

File tree

5 files changed

+77
-16
lines changed

5 files changed

+77
-16
lines changed

embed/templates/scripts/run_prometheus.sh.tpl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,10 @@ exec bin/prometheus/prometheus \
5555
{{- end}}
5656
{{- end}}
5757
{{- if not .EnablePromAgentMode}}
58-
--storage.tsdb.retention="{{.Retention}}"
58+
{{- if .RetentionSize}}
59+
--storage.tsdb.retention.size="{{.RetentionSize}}"
60+
{{- end}}
61+
{{- if .RetentionTime}}
62+
--storage.tsdb.retention.time="{{.RetentionTime}}"
63+
{{- end}}
5964
{{- end}}

pkg/cluster/spec/monitoring.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ type PrometheusSpec struct {
5555
RemoteConfig Remote `yaml:"remote_config,omitempty" validate:"remote_config:ignore"`
5656
ExternalAlertmanagers []ExternalAlertmanager `yaml:"external_alertmanagers" validate:"external_alertmanagers:ignore"`
5757
PushgatewayAddrs []string `yaml:"pushgateway_addrs,omitempty" validate:"pushgateway_addrs:ignore"`
58-
Retention string `yaml:"storage_retention,omitempty" validate:"storage_retention:editable"`
58+
Retention string `yaml:"storage_retention,omitempty" validate:"storage_retention:editable"` // deprecated
59+
RetentionSize string `yaml:"storage_retention_size,omitempty" validate:"storage_retention_size:editable"`
60+
RetentionTime string `yaml:"storage_retention_time,omitempty" validate:"storage_retention_time:editable"`
5961
ResourceControl meta.ResourceControl `yaml:"resource_control,omitempty" validate:"resource_control:editable"`
6062
Arch string `yaml:"arch,omitempty"`
6163
OS string `yaml:"os,omitempty"`
@@ -276,7 +278,6 @@ func (i *MonitorInstance) InitConfig(
276278
cfg := &scripts.PrometheusScript{
277279
Port: spec.Port,
278280
WebExternalURL: fmt.Sprintf("http://%s", utils.JoinHostPort(spec.Host, spec.Port)),
279-
Retention: getRetention(spec.Retention),
280281
EnableNG: spec.NgPort > 0,
281282
EnablePromAgentMode: spec.EnablePromAgentMode, // Get from spec directly
282283

@@ -288,6 +289,13 @@ func (i *MonitorInstance) InitConfig(
288289

289290
AdditionalArgs: spec.AdditionalArgs,
290291
}
292+
// Set retention policy
293+
if spec.RetentionTime == "" {
294+
cfg.RetentionTime = getRetentionTime(spec.Retention)
295+
} else {
296+
cfg.RetentionTime = getRetentionTime(spec.RetentionTime)
297+
}
298+
cfg.RetentionSize = getRetentionSize(spec.RetentionSize)
291299

292300
// Check if agent mode is enabled in additional arguments
293301
if !cfg.EnablePromAgentMode {
@@ -681,7 +689,17 @@ func mergeAdditionalScrapeConf(source string, addition map[string]any) error {
681689
return utils.WriteFile(source, bytes, 0644)
682690
}
683691

684-
func getRetention(retention string) string {
692+
func getRetentionSize(retention string) string {
693+
retention = strings.ToUpper(strings.TrimSpace(retention))
694+
valid, _ := regexp.MatchString("^[1-9]\\d*(B|KB|MB|GB|TB|PB|EB)$", retention)
695+
if retention == "" || !valid {
696+
return ""
697+
}
698+
return retention
699+
}
700+
701+
func getRetentionTime(retention string) string {
702+
retention = strings.TrimSpace(retention)
685703
valid, _ := regexp.MatchString("^[1-9]\\d*d$", retention)
686704
if retention == "" || !valid {
687705
return "30d"

pkg/cluster/spec/monitoring_test.go

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -229,32 +229,68 @@ scrape_configs:
229229

230230
func TestGetRetention(t *testing.T) {
231231
var val string
232-
val = getRetention("-1d")
232+
val = getRetentionTime("-1d")
233233
assert.EqualValues(t, "30d", val)
234234

235-
val = getRetention("0d")
235+
val = getRetentionTime("0d")
236236
assert.EqualValues(t, "30d", val)
237237

238-
val = getRetention("01d")
238+
val = getRetentionTime("01d")
239239
assert.EqualValues(t, "30d", val)
240240

241-
val = getRetention("1dd")
241+
val = getRetentionTime("1dd")
242242
assert.EqualValues(t, "30d", val)
243243

244-
val = getRetention("*1d")
244+
val = getRetentionTime("*1d")
245245
assert.EqualValues(t, "30d", val)
246246

247-
val = getRetention("1d ")
248-
assert.EqualValues(t, "30d", val)
247+
val = getRetentionTime("1d ")
248+
assert.EqualValues(t, "1d", val)
249+
250+
val = getRetentionTime(" 1d")
251+
assert.EqualValues(t, "1d", val)
249252

250-
val = getRetention("ddd")
253+
val = getRetentionTime("ddd")
251254
assert.EqualValues(t, "30d", val)
252255

253-
val = getRetention("60d")
256+
val = getRetentionTime("60d")
254257
assert.EqualValues(t, "60d", val)
255258

256-
val = getRetention("999d")
259+
val = getRetentionTime("999d")
257260
assert.EqualValues(t, "999d", val)
261+
262+
val = getRetentionSize("-1MB")
263+
assert.EqualValues(t, "", val)
264+
265+
val = getRetentionSize("30d")
266+
assert.EqualValues(t, "", val)
267+
268+
val = getRetentionSize("1k")
269+
assert.EqualValues(t, "", val)
270+
271+
val = getRetentionSize("01G")
272+
assert.EqualValues(t, "", val)
273+
274+
val = getRetentionSize("233mb")
275+
assert.EqualValues(t, "233MB", val)
276+
277+
val = getRetentionSize("*1GB")
278+
assert.EqualValues(t, "", val)
279+
280+
val = getRetentionSize("20GB ")
281+
assert.EqualValues(t, "20GB", val)
282+
283+
val = getRetentionSize(" 20GB")
284+
assert.EqualValues(t, "20GB", val)
285+
286+
val = getRetentionSize("3TB")
287+
assert.EqualValues(t, "3TB", val)
288+
289+
val = getRetentionSize("30GB")
290+
assert.EqualValues(t, "30GB", val)
291+
292+
val = getRetentionSize("1EB")
293+
assert.EqualValues(t, "1EB", val)
258294
}
259295

260296
// TestHandleRemoteWrite verifies that remote write configurations are properly handled

pkg/cluster/template/scripts/monitoring.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ import (
2626
type PrometheusScript struct {
2727
Port int
2828
WebExternalURL string
29-
Retention string
29+
RetentionSize string
30+
RetentionTime string
3031
EnableNG bool
3132
EnablePromAgentMode bool
3233

pkg/cluster/template/scripts/monitoring_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ func TestPrometheusScriptWithAgentMode(t *testing.T) {
3232
script := &PrometheusScript{
3333
Port: 9090,
3434
WebExternalURL: "http://localhost:9090",
35-
Retention: "30d",
35+
RetentionTime: "30d",
36+
RetentionSize: "100GB",
3637
EnableNG: false,
3738
EnablePromAgentMode: true,
3839
DeployDir: "/deploy",

0 commit comments

Comments
 (0)