Alerting: Limit redis pool size to 5 and make configurable (#74057)

* Limit redis pool size to 5 and expose it in config ini

* Coerce negative pool sizes to the default
This commit is contained in:
Alexander Weaver
2023-08-29 14:59:12 -05:00
committed by GitHub
parent d8fd4c2cbe
commit dfba94e052
4 changed files with 15 additions and 0 deletions
@@ -93,6 +93,7 @@ func (moa *MultiOrgAlertmanager) setupClustering(cfg *setting.Cfg) error {
password: cfg.UnifiedAlerting.HARedisPassword,
username: cfg.UnifiedAlerting.HARedisUsername,
db: cfg.UnifiedAlerting.HARedisDB,
maxConns: cfg.UnifiedAlerting.HARedisMaxConns,
}, clusterLogger, moa.metrics.Registerer, cfg.UnifiedAlerting.HAPushPullInterval)
if err != nil {
return fmt.Errorf("unable to initialize redis: %w", err)
@@ -27,6 +27,7 @@ type redisConfig struct {
db int
name string
prefix string
maxConns int
}
const (
@@ -44,6 +45,7 @@ const (
reasonRedisIssue = "redis_issue"
heartbeatInterval = time.Second * 5
heartbeatTimeout = time.Minute
defaultPoolSize = 5
// The duration we want to return the members if the network is down.
membersValidFor = time.Minute
)
@@ -84,11 +86,17 @@ func newRedisPeer(cfg redisConfig, logger log.Logger, reg prometheus.Registerer,
if cfg.name != "" {
name = cfg.name
}
// Allow zero through, since it'll fall back to go-redis's default.
poolSize := defaultPoolSize
if cfg.maxConns >= 0 {
poolSize = cfg.maxConns
}
rdb := redis.NewClient(&redis.Options{
Addr: cfg.addr,
Username: cfg.username,
Password: cfg.password,
DB: cfg.db,
PoolSize: poolSize,
})
cmd := rdb.Ping(context.Background())
if cmd.Err() != nil {
+3
View File
@@ -20,6 +20,7 @@ const (
alertmanagerDefaultGossipInterval = cluster.DefaultGossipInterval
alertmanagerDefaultPushPullInterval = cluster.DefaultPushPullInterval
alertmanagerDefaultConfigPollInterval = time.Minute
alertmanagerRedisDefaultMaxConns = 5
// To start, the alertmanager needs at least one route defined.
// TODO: we should move this to Grafana settings and define this as the default.
alertmanagerDefaultConfiguration = `{
@@ -78,6 +79,7 @@ type UnifiedAlertingSettings struct {
HARedisUsername string
HARedisPassword string
HARedisDB int
HARedisMaxConns int
MaxAttempts int64
MinInterval time.Duration
EvaluationTimeout time.Duration
@@ -240,6 +242,7 @@ func (cfg *Cfg) ReadUnifiedAlertingSettings(iniFile *ini.File) error {
uaCfg.HARedisUsername = ua.Key("ha_redis_username").MustString("")
uaCfg.HARedisPassword = ua.Key("ha_redis_password").MustString("")
uaCfg.HARedisDB = ua.Key("ha_redis_db").MustInt(0)
uaCfg.HARedisMaxConns = ua.Key("ha_redis_max_conns").MustInt(alertmanagerRedisDefaultMaxConns)
peers := ua.Key("ha_peers").MustString("")
uaCfg.HAPeers = make([]string, 0)
if peers != "" {