mirror of https://github.com/grafana/grafana.git
				
				
				
			Alertmanager: Support limits for silences (#90826)
* Alertmanager: support limits for silences * update grafana/alerting to latest main
This commit is contained in:
		
							parent
							
								
									7180f8a7d1
								
							
						
					
					
						commit
						b79b38f02c
					
				|  | @ -1199,6 +1199,12 @@ admin_config_poll_interval = 60s | |||
| # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. | ||||
| alertmanager_config_poll_interval = 60s | ||||
| 
 | ||||
| # Maximum number of active and pending silences that a tenant can have at once. Default: 0 (no limit). | ||||
| alertmanager_max_silences_count = | ||||
| 
 | ||||
| # Maximum silence size in bytes. Default: 0 (no limit). | ||||
| alertmanager_max_silence_size_bytes = | ||||
| 
 | ||||
| # Set to true when using redis in cluster mode. | ||||
| ha_redis_cluster_mode_enabled = false | ||||
| 
 | ||||
|  |  | |||
|  | @ -1185,6 +1185,13 @@ | |||
| # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. | ||||
| ;alertmanager_config_poll_interval = 60s | ||||
| 
 | ||||
| 
 | ||||
| # Maximum number of active and pending silences that a tenant can have at once. Default: 0 (no limit). | ||||
| ;alertmanager_max_silences_count = | ||||
| 
 | ||||
| # Maximum silence size in bytes. Default: 0 (no limit). | ||||
| ;alertmanager_max_silence_size_bytes = | ||||
| 
 | ||||
| # Set to true when using redis in cluster mode. | ||||
| ;ha_redis_cluster_mode_enabled = false | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										2
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										2
									
								
								go.mod
								
								
								
								
							|  | @ -74,7 +74,7 @@ require ( | |||
| 	github.com/googleapis/gax-go/v2 v2.12.3 // @grafana/grafana-backend-group | ||||
| 	github.com/gorilla/mux v1.8.1 // @grafana/grafana-backend-group | ||||
| 	github.com/gorilla/websocket v1.5.0 // @grafana/grafana-app-platform-squad | ||||
| 	github.com/grafana/alerting v0.0.0-20240712142914-5558735b4462 // @grafana/alerting-backend | ||||
| 	github.com/grafana/alerting v0.0.0-20240723124849-f2ab7c7b8f7d // @grafana/alerting-backend | ||||
| 	github.com/grafana/authlib v0.0.0-20240711083030-f139ff397f7b // @grafana/identity-access-team | ||||
| 	github.com/grafana/codejen v0.0.3 // @grafana/dataviz-squad | ||||
| 	github.com/grafana/cuetsy v0.1.11 // @grafana/grafana-as-code | ||||
|  |  | |||
							
								
								
									
										4
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										4
									
								
								go.sum
								
								
								
								
							|  | @ -2303,8 +2303,8 @@ github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad | |||
| github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||||
| github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= | ||||
| github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||||
| github.com/grafana/alerting v0.0.0-20240712142914-5558735b4462 h1:MWpvVoPcSej4YfxSIuAllr9vg0UgVEG5CQifD5fK+ps= | ||||
| github.com/grafana/alerting v0.0.0-20240712142914-5558735b4462/go.mod h1:DLj8frbtCaITljC2jc0L85JQViPF3mPfOSiYhm1osso= | ||||
| github.com/grafana/alerting v0.0.0-20240723124849-f2ab7c7b8f7d h1:d2NZeTs+zBPVMd8uOOV5+6lyfs0BCDKxtiNxIMjnPNA= | ||||
| github.com/grafana/alerting v0.0.0-20240723124849-f2ab7c7b8f7d/go.mod h1:DLj8frbtCaITljC2jc0L85JQViPF3mPfOSiYhm1osso= | ||||
| github.com/grafana/authlib v0.0.0-20240711083030-f139ff397f7b h1:gSVS/MIIP3C9ZbGaboOCtzDm3D5roR4m6NDkxyAMjyI= | ||||
| github.com/grafana/authlib v0.0.0-20240711083030-f139ff397f7b/go.mod h1:+MjD5sxxgLOIvw0ox18wJmjBzz8tOECo7quiiZAmgJY= | ||||
| github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw= | ||||
|  |  | |||
|  | @ -396,11 +396,11 @@ github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= | |||
| github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= | ||||
| github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= | ||||
| github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= | ||||
| github.com/grafana/alerting v0.0.0-20240712142914-5558735b4462 h1:MWpvVoPcSej4YfxSIuAllr9vg0UgVEG5CQifD5fK+ps= | ||||
| github.com/grafana/alerting v0.0.0-20240712142914-5558735b4462/go.mod h1:DLj8frbtCaITljC2jc0L85JQViPF3mPfOSiYhm1osso= | ||||
| github.com/grafana/authlib v0.0.0-20240611075137-331cbe4e840f/go.mod h1:+MjD5sxxgLOIvw0ox18wJmjBzz8tOECo7quiiZAmgJY= | ||||
| github.com/grafana/e2e v0.1.1 h1:/b6xcv5BtoBnx8cZnCiey9DbjEc8z7gXHO5edoeRYxc= | ||||
| github.com/grafana/e2e v0.1.1/go.mod h1:RpNLgae5VT+BUHvPE+/zSypmOXKwEu4t+tnEMS1ATaE= | ||||
| github.com/grafana/grafana-cloud-migration-snapshot v1.2.0 h1:FCUWASPPzGGbF2jTutR5i3rmoQdmnC4bypwJswdW3fI= | ||||
| github.com/grafana/grafana-cloud-migration-snapshot v1.2.0/go.mod h1:bd6Cm06EK0MzRO5ahUpbDz1SxNOKu+fzladbaRPHZPY= | ||||
| github.com/grafana/grafana/pkg/apimachinery v0.0.0-20240701135906-559738ce6ae1/go.mod h1:DkxMin+qOh1Fgkxfbt+CUfBqqsCQJMG9op8Os/irBPA= | ||||
| github.com/grafana/grafana-azure-sdk-go/v2 v2.1.0 h1:lajVqTWaE96MpbjZToj7EshvqgRWOfYNkD4MbIZizaY= | ||||
| github.com/grafana/grafana-azure-sdk-go/v2 v2.1.0/go.mod h1:aKlFPE36IDa8qccRg3KbgZX3MQ5xymS3RelT4j6kkVU= | ||||
|  | @ -843,6 +843,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go. | |||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= | ||||
| google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= | ||||
| google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= | ||||
| google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= | ||||
| google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= | ||||
|  |  | |||
|  | @ -64,7 +64,7 @@ require ( | |||
| 	golang.org/x/tools v0.22.0 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect | ||||
| 	google.golang.org/grpc v1.64.0 // indirect | ||||
| 	google.golang.org/grpc v1.64.1 // indirect | ||||
| 	google.golang.org/protobuf v1.34.2 // indirect | ||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||
|  |  | |||
|  | @ -85,7 +85,7 @@ golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= | |||
| google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= | ||||
| google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= | ||||
| google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= | ||||
| google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= | ||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||
| gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ require ( | |||
| 	golang.org/x/time v0.5.0 // indirect; @grafana/grafana-backend-group | ||||
| 	golang.org/x/tools v0.22.0 // indirect; @grafana/grafana-as-code | ||||
| 	google.golang.org/api v0.176.0 // @grafana/grafana-backend-group | ||||
| 	google.golang.org/grpc v1.64.0 // indirect; @grafana/plugins-platform-backend | ||||
| 	google.golang.org/grpc v1.64.1 // indirect; @grafana/plugins-platform-backend | ||||
| 	google.golang.org/protobuf v1.34.2 // indirect; @grafana/plugins-platform-backend | ||||
| 	gopkg.in/yaml.v3 v3.0.1 // @grafana/alerting-backend | ||||
| ) | ||||
|  |  | |||
|  | @ -345,8 +345,7 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ | |||
| google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= | ||||
| google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= | ||||
| google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= | ||||
| google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= | ||||
| google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= | ||||
| google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= | ||||
| google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= | ||||
| google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= | ||||
| google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ module github.com/grafana/grafana/pkg/promlib | |||
| go 1.21.10 | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/grafana/grafana-plugin-sdk-go v0.238.0 | ||||
| 	github.com/grafana/grafana-plugin-sdk-go v0.240.0 | ||||
| 	github.com/json-iterator/go v1.1.12 | ||||
| 	github.com/patrickmn/go-cache v2.1.0+incompatible | ||||
| 	github.com/prometheus/client_golang v1.19.1 | ||||
|  | @ -117,7 +117,7 @@ require ( | |||
| 	gonum.org/v1/gonum v0.14.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect | ||||
| 	google.golang.org/grpc v1.64.0 // indirect | ||||
| 	google.golang.org/grpc v1.64.1 // indirect | ||||
| 	google.golang.org/protobuf v1.34.2 // indirect | ||||
| 	gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect | ||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||
|  |  | |||
|  | @ -94,8 +94,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1 | |||
| github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= | ||||
| github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= | ||||
| github.com/grafana/grafana-plugin-sdk-go v0.238.0 h1:+LPuhUCBiQJEd571+ymA4WsJiiafbRECdX67B6YYN64= | ||||
| github.com/grafana/grafana-plugin-sdk-go v0.238.0/go.mod h1:4TgwJYqX8N27PIwEpa2gBEQyWsUW4rIQYGsrkhcgOgY= | ||||
| github.com/grafana/grafana-plugin-sdk-go v0.240.0 h1:jhv2TqfBWoi5ZTksg/fdY5Mi8FDsaE8XGxjS1Rgi6nk= | ||||
| github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8= | ||||
| github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls= | ||||
| github.com/grafana/pyroscope-go/godeltaprof v0.1.7 h1:C11j63y7gymiW8VugJ9ZW0pWfxTZugdSJyC48olk5KY= | ||||
|  | @ -347,8 +346,7 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1: | |||
| google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= | ||||
| google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= | ||||
| google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= | ||||
| google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= | ||||
| google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= | ||||
| google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
|  |  | |||
|  | @ -127,6 +127,10 @@ func NewAlertmanager(ctx context.Context, orgID int64, cfg *setting.Cfg, store A | |||
| 		PeerTimeout:        cfg.UnifiedAlerting.HAPeerTimeout, | ||||
| 		Silences:           silencesOptions, | ||||
| 		Nflog:              nflogOptions, | ||||
| 		Limits: alertingNotify.Limits{ | ||||
| 			MaxSilences:         cfg.UnifiedAlerting.AlertmanagerMaxSilencesCount, | ||||
| 			MaxSilenceSizeBytes: cfg.UnifiedAlerting.AlertmanagerMaxSilenceSizeBytes, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	l := log.New("ngalert.notifier.alertmanager", "org", orgID) | ||||
|  |  | |||
|  | @ -68,35 +68,37 @@ const ( | |||
| ) | ||||
| 
 | ||||
| type UnifiedAlertingSettings struct { | ||||
| 	AdminConfigPollInterval        time.Duration | ||||
| 	AlertmanagerConfigPollInterval time.Duration | ||||
| 	HAListenAddr                   string | ||||
| 	HAAdvertiseAddr                string | ||||
| 	HAPeers                        []string | ||||
| 	HAPeerTimeout                  time.Duration | ||||
| 	HAGossipInterval               time.Duration | ||||
| 	HAReconnectTimeout             time.Duration | ||||
| 	HAPushPullInterval             time.Duration | ||||
| 	HALabel                        string | ||||
| 	HARedisClusterModeEnabled      bool | ||||
| 	HARedisAddr                    string | ||||
| 	HARedisPeerName                string | ||||
| 	HARedisPrefix                  string | ||||
| 	HARedisUsername                string | ||||
| 	HARedisPassword                string | ||||
| 	HARedisDB                      int | ||||
| 	HARedisMaxConns                int | ||||
| 	HARedisTLSEnabled              bool | ||||
| 	HARedisTLSConfig               dstls.ClientConfig | ||||
| 	MaxAttempts                    int64 | ||||
| 	MinInterval                    time.Duration | ||||
| 	EvaluationTimeout              time.Duration | ||||
| 	EvaluationResultLimit          int | ||||
| 	DisableJitter                  bool | ||||
| 	ExecuteAlerts                  bool | ||||
| 	DefaultConfiguration           string | ||||
| 	Enabled                        *bool // determines whether unified alerting is enabled. If it is nil then user did not define it and therefore its value will be determined during migration. Services should not use it directly.
 | ||||
| 	DisabledOrgs                   map[int64]struct{} | ||||
| 	AdminConfigPollInterval         time.Duration | ||||
| 	AlertmanagerConfigPollInterval  time.Duration | ||||
| 	AlertmanagerMaxSilenceSizeBytes int | ||||
| 	AlertmanagerMaxSilencesCount    int | ||||
| 	HAListenAddr                    string | ||||
| 	HAAdvertiseAddr                 string | ||||
| 	HAPeers                         []string | ||||
| 	HAPeerTimeout                   time.Duration | ||||
| 	HAGossipInterval                time.Duration | ||||
| 	HAReconnectTimeout              time.Duration | ||||
| 	HAPushPullInterval              time.Duration | ||||
| 	HALabel                         string | ||||
| 	HARedisClusterModeEnabled       bool | ||||
| 	HARedisAddr                     string | ||||
| 	HARedisPeerName                 string | ||||
| 	HARedisPrefix                   string | ||||
| 	HARedisUsername                 string | ||||
| 	HARedisPassword                 string | ||||
| 	HARedisDB                       int | ||||
| 	HARedisMaxConns                 int | ||||
| 	HARedisTLSEnabled               bool | ||||
| 	HARedisTLSConfig                dstls.ClientConfig | ||||
| 	MaxAttempts                     int64 | ||||
| 	MinInterval                     time.Duration | ||||
| 	EvaluationTimeout               time.Duration | ||||
| 	EvaluationResultLimit           int | ||||
| 	DisableJitter                   bool | ||||
| 	ExecuteAlerts                   bool | ||||
| 	DefaultConfiguration            string | ||||
| 	Enabled                         *bool // determines whether unified alerting is enabled. If it is nil then user did not define it and therefore its value will be determined during migration. Services should not use it directly.
 | ||||
| 	DisabledOrgs                    map[int64]struct{} | ||||
| 	// BaseInterval interval of time the scheduler updates the rules and evaluates rules.
 | ||||
| 	// Only for internal use and not user configuration.
 | ||||
| 	BaseInterval time.Duration | ||||
|  | @ -229,6 +231,8 @@ func (cfg *Cfg) ReadUnifiedAlertingSettings(iniFile *ini.File) error { | |||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	uaCfg.AlertmanagerMaxSilenceSizeBytes = ua.Key("alertmanager_max_silence_size_bytes").MustInt(0) | ||||
| 	uaCfg.AlertmanagerMaxSilencesCount = ua.Key("alertmanager_max_silences_count").MustInt(0) | ||||
| 	uaCfg.HAPeerTimeout, err = gtime.ParseDuration(valueAsString(ua, "ha_peer_timeout", (alertmanagerDefaultPeerTimeout).String())) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue