mirror of
https://github.com/prometheus-operator/prometheus-operator.git
synced 2025-04-21 11:48:53 +00:00
prometheus: add additional AlertManager config
This commit is contained in:
parent
0007ae9830
commit
7a813d6dae
3 changed files with 33 additions and 9 deletions
pkg
|
@ -147,6 +147,18 @@ type PrometheusSpec struct {
|
|||
// notes to ensure that no incompatible scrape configs are going to break
|
||||
// Prometheus after the upgrade.
|
||||
AdditionalScrapeConfigs *v1.SecretKeySelector `json:"additionalScrapeConfigs,omitempty"`
|
||||
// AdditionalAlertManagerConfigs allows specifying a key of a Secret containing
|
||||
// additional Prometheus AlertManager configurations. AlertManager configurations
|
||||
// specified are appended to the configurations generated by the Prometheus
|
||||
// Operator. Job configurations specified must have the form as specified
|
||||
// in the official Prometheus documentation:
|
||||
// https://prometheus.io/docs/prometheus/latest/configuration/configuration/#<alertmanager_config>.
|
||||
// As AlertManager configs are appended, the user is responsible to make sure it
|
||||
// is valid. Note that using this feature may expose the possibility to
|
||||
// break upgrades of Prometheus. It is advised to review Prometheus release
|
||||
// notes to ensure that no incompatible AlertManager configs are going to break
|
||||
// Prometheus after the upgrade.
|
||||
AdditionalAlertManagerConfigs *v1.SecretKeySelector `json:"additionalAlertManagerConfigs,omitempty"`
|
||||
}
|
||||
|
||||
// Most recent observed status of the Prometheus cluster. Read-only. Not
|
||||
|
|
|
@ -899,18 +899,18 @@ func (c *Operator) destroyPrometheus(key string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func loadAdditionalScrapeConfigsSecret(additionalScrapeConfigs *v1.SecretKeySelector, s *v1.SecretList) ([]byte, error) {
|
||||
if additionalScrapeConfigs != nil {
|
||||
func loadAdditionalConfigsSecret(additionalConfigs *v1.SecretKeySelector, s *v1.SecretList) ([]byte, error) {
|
||||
if additionalConfigs != nil {
|
||||
for _, secret := range s.Items {
|
||||
if secret.Name == additionalScrapeConfigs.Name {
|
||||
if c, ok := secret.Data[additionalScrapeConfigs.Key]; ok {
|
||||
if secret.Name == additionalConfigs.Name {
|
||||
if c, ok := secret.Data[additionalConfigs.Key]; ok {
|
||||
return c, nil
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("key %v could not be found in Secret %v.", additionalScrapeConfigs.Key, additionalScrapeConfigs.Name)
|
||||
return nil, fmt.Errorf("key %v could not be found in Secret %v.", additionalConfigs.Key, additionalConfigs.Name)
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("secret %v could not be found.", additionalScrapeConfigs.Name)
|
||||
return nil, fmt.Errorf("secret %v could not be found.", additionalConfigs.Name)
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
@ -1017,13 +1017,17 @@ func (c *Operator) createConfig(p *monitoringv1.Prometheus, ruleFileConfigMaps [
|
|||
return err
|
||||
}
|
||||
|
||||
additionalScrapeConfigs, err := loadAdditionalScrapeConfigsSecret(p.Spec.AdditionalScrapeConfigs, listSecrets)
|
||||
additionalScrapeConfigs, err := loadAdditionalConfigsSecret(p.Spec.AdditionalScrapeConfigs, listSecrets)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "loading additional scrape configs from Secret failed")
|
||||
}
|
||||
additionalAlertManagerConfigs, err := loadAdditionalConfigsSecret(p.Spec.AdditionalAlertManagerConfigs, listSecrets)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "loading additional alert manager configs from Secret failed")
|
||||
}
|
||||
|
||||
// Update secret based on the most recent configuration.
|
||||
conf, err := generateConfig(p, smons, len(ruleFileConfigMaps), basicAuthSecrets, additionalScrapeConfigs)
|
||||
conf, err := generateConfig(p, smons, len(ruleFileConfigMaps), basicAuthSecrets, additionalScrapeConfigs, additionalAlertManagerConfigs)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "generating config failed")
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ func buildExternalLabels(p *v1.Prometheus) yaml.MapSlice {
|
|||
return stringMapToMapSlice(m)
|
||||
}
|
||||
|
||||
func generateConfig(p *v1.Prometheus, mons map[string]*v1.ServiceMonitor, ruleConfigMaps int, basicAuthSecrets map[string]BasicAuthCredentials, additionalScrapeConfigs []byte) ([]byte, error) {
|
||||
func generateConfig(p *v1.Prometheus, mons map[string]*v1.ServiceMonitor, ruleConfigMaps int, basicAuthSecrets map[string]BasicAuthCredentials, additionalScrapeConfigs []byte, additionalAlertManagerConfigs []byte) ([]byte, error) {
|
||||
versionStr := p.Spec.Version
|
||||
if versionStr == "" {
|
||||
versionStr = DefaultVersion
|
||||
|
@ -167,6 +167,14 @@ func generateConfig(p *v1.Prometheus, mons map[string]*v1.ServiceMonitor, ruleCo
|
|||
Value: append(scrapeConfigs, additionalScrapeConfigsYaml...),
|
||||
})
|
||||
|
||||
var additionalAlertManagerConfigsYaml []yaml.MapSlice
|
||||
err = yaml.Unmarshal([]byte(additionalAlertManagerConfigs), &additionalAlertManagerConfigsYaml)
|
||||
if err != nil {
|
||||
errors.Wrap(err, "unmarshalling additional alert manager configs failed")
|
||||
}
|
||||
|
||||
alertmanagerConfigs = append(alertmanagerConfigs, additionalAlertManagerConfigsYaml...)
|
||||
|
||||
var alertRelabelConfigs []yaml.MapSlice
|
||||
|
||||
// action 'labeldrop' is not supported <= v1.4.1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue