Skip to content

Commit 1d362f4

Browse files
Making GCInterval Configurable
Signed-off-by: Krishna Teja Puttagunta <[email protected]>
1 parent 7b9db50 commit 1d362f4

File tree

6 files changed

+14
-6
lines changed

6 files changed

+14
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Changelog
22

33
## master / unreleased
4+
* [FEATURE] Added the flag `-alertmanager.gc-interval` to configure alert manager Garbage collection Interval. #5550
45
* [FEATURE] Ruler: Add support for Limit field on RuleGroup. #5528
56
* [FEATURE] AlertManager: Add support for Webex, Discord and Telegram Receiver. #5493
67
* [FEATURE] Ingester: added `-admin-limit-message` to customize the message contained in limit errors.#5460

docs/configuration/config-file-reference.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,10 @@ cluster:
433433
# CLI flag: -alertmanager.api-concurrency
434434
[api_concurrency: <int> | default = 0]
435435
436+
# Garbage collection Interval
437+
# CLI flag: -alertmanager.gc-interval
438+
[gc_interval: <duration> | default = 30m]
439+
436440
alertmanager_client:
437441
# Timeout for downstream alertmanagers.
438442
# CLI flag: -alertmanager.alertmanager-client.remote-timeout

pkg/alertmanager/alertmanager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ type Config struct {
8585
Store alertstore.AlertStore
8686
PersisterConfig PersisterConfig
8787
APIConcurrency int
88+
GCInterval time.Duration
8889
}
8990

9091
// An Alertmanager manages the alerts for one user.
@@ -254,8 +255,7 @@ func New(cfg *Config, reg *prometheus.Registry) (*Alertmanager, error) {
254255
if am.cfg.Limits != nil {
255256
callback = newAlertsLimiter(am.cfg.UserID, am.cfg.Limits, reg)
256257
}
257-
258-
am.alerts, err = mem.NewAlerts(context.Background(), am.marker, 30*time.Minute, callback, am.logger, am.registry)
258+
am.alerts, err = mem.NewAlerts(context.Background(), am.marker, am.cfg.GCInterval, callback, am.logger, am.registry)
259259
if err != nil {
260260
return nil, fmt.Errorf("failed to create alerts: %v", err)
261261
}

pkg/alertmanager/alertmanager_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ func createAlertmanagerAndSendAlerts(t *testing.T, alertGroups, groupsLimit, exp
4646
TenantDataDir: t.TempDir(),
4747
ExternalURL: &url.URL{Path: "/am"},
4848
ShardingEnabled: false,
49+
GCInterval: 30 * time.Minute,
4950
}, reg)
5051
require.NoError(t, err)
5152
defer am.StopAndWait()

pkg/alertmanager/multitenant.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ type MultitenantAlertmanagerConfig struct {
7878

7979
Cluster ClusterConfig `yaml:"cluster"`
8080

81-
EnableAPI bool `yaml:"enable_api"`
82-
APIConcurrency int `yaml:"api_concurrency"`
81+
EnableAPI bool `yaml:"enable_api"`
82+
APIConcurrency int `yaml:"api_concurrency"`
83+
GCInterval time.Duration `yaml:"gc_interval"`
8384

8485
// For distributor.
8586
AlertmanagerClient ClientConfig `yaml:"alertmanager_client"`
@@ -119,7 +120,7 @@ func (cfg *MultitenantAlertmanagerConfig) RegisterFlags(f *flag.FlagSet) {
119120

120121
f.BoolVar(&cfg.EnableAPI, "experimental.alertmanager.enable-api", false, "Enable the experimental alertmanager config api.")
121122
f.IntVar(&cfg.APIConcurrency, "alertmanager.api-concurrency", 0, "Maximum number of concurrent GET API requests before returning an error.")
122-
123+
f.DurationVar(&cfg.GCInterval, "alertmanager.gc-interval", 30*time.Minute, "Garbage collection Interval")
123124
f.BoolVar(&cfg.ShardingEnabled, "alertmanager.sharding-enabled", false, "Shard tenants across multiple alertmanager instances.")
124125
f.Var(&cfg.EnabledTenants, "alertmanager.enabled-tenants", "Comma separated list of tenants whose alerts this alertmanager can process. If specified, only these tenants will be handled by alertmanager, otherwise this alertmanager can process alerts from all tenants.")
125126
f.Var(&cfg.DisabledTenants, "alertmanager.disabled-tenants", "Comma separated list of tenants whose alerts this alertmanager cannot process. If specified, a alertmanager that would normally pick the specified tenant(s) for processing will ignore them instead.")
@@ -969,6 +970,7 @@ func (am *MultitenantAlertmanager) newAlertmanager(userID string, amConfig *amco
969970
PersisterConfig: am.cfg.Persister,
970971
Limits: am.limits,
971972
APIConcurrency: am.cfg.APIConcurrency,
973+
GCInterval: am.cfg.GCInterval,
972974
}, reg)
973975
if err != nil {
974976
return nil, fmt.Errorf("unable to start Alertmanager for user %v: %v", userID, err)

pkg/alertmanager/multitenant_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func mockAlertmanagerConfig(t *testing.T) *MultitenantAlertmanagerConfig {
8383
cfg.ShardingRing.InstanceAddr = "127.0.0.1"
8484
cfg.PollInterval = time.Minute
8585
cfg.ShardingRing.FinalSleep = 0
86-
86+
cfg.GCInterval = 30 * time.Minute
8787
return cfg
8888
}
8989

0 commit comments

Comments
 (0)