Builds a Prometheus config.Config from a ruler.Config with just the required options to configure notifications to Alertmanager.
(rulerConfig *Config)
| 92 | // Builds a Prometheus config.Config from a ruler.Config with just the required |
| 93 | // options to configure notifications to Alertmanager. |
| 94 | func buildNotifierConfig(rulerConfig *Config) (*config.Config, error) { |
| 95 | amURLs := strings.Split(rulerConfig.AlertmanagerURL, ",") |
| 96 | validURLs := make([]*url.URL, 0, len(amURLs)) |
| 97 | |
| 98 | srvDNSregexp := regexp.MustCompile(`^_.+._.+`) |
| 99 | for _, h := range amURLs { |
| 100 | url, err := url.Parse(h) |
| 101 | if err != nil { |
| 102 | return nil, err |
| 103 | } |
| 104 | |
| 105 | if url.String() == "" { |
| 106 | continue |
| 107 | } |
| 108 | |
| 109 | // Given we only support SRV lookups as part of service discovery, we need to ensure |
| 110 | // hosts provided follow this specification: _service._proto.name |
| 111 | // e.g. _http._tcp.alertmanager.com |
| 112 | if rulerConfig.AlertmanagerDiscovery && !srvDNSregexp.MatchString(url.Host) { |
| 113 | return nil, fmt.Errorf("when alertmanager-discovery is on, host name must be of the form _portname._tcp.service.fqdn (is %q)", url.Host) |
| 114 | } |
| 115 | |
| 116 | validURLs = append(validURLs, url) |
| 117 | } |
| 118 | |
| 119 | if len(validURLs) == 0 { |
| 120 | return &config.Config{}, nil |
| 121 | } |
| 122 | amConfigs := make([]*config.AlertmanagerConfig, 0, len(validURLs)) |
| 123 | for _, url := range validURLs { |
| 124 | amConfigs = append(amConfigs, amConfigFromURL(rulerConfig, url, config.AlertmanagerAPIVersionV2)) |
| 125 | } |
| 126 | |
| 127 | promConfig := &config.Config{ |
| 128 | GlobalConfig: config.GlobalConfig{ |
| 129 | ExternalLabels: rulerConfig.ExternalLabels, |
| 130 | }, |
| 131 | AlertingConfig: config.AlertingConfig{ |
| 132 | AlertmanagerConfigs: amConfigs, |
| 133 | }, |
| 134 | } |
| 135 | |
| 136 | return promConfig, nil |
| 137 | } |
| 138 | |
| 139 | func amConfigFromURL(rulerConfig *Config, url *url.URL, apiVersion config.AlertmanagerAPIVersion) *config.AlertmanagerConfig { |
| 140 | var sdConfig discovery.Configs |