| 71 | } |
| 72 | |
| 73 | func NewDefaultMultiTenantManager(cfg Config, limits RulesLimits, managerFactory ManagerFactory, evalMetrics *RuleEvalMetrics, reg prometheus.Registerer, logger log.Logger) (*DefaultMultiTenantManager, error) { |
| 74 | ncfg, err := buildNotifierConfig(&cfg) |
| 75 | if err != nil { |
| 76 | return nil, err |
| 77 | } |
| 78 | |
| 79 | userManagerMetrics := NewManagerMetrics(cfg.DisableRuleGroupLabel) |
| 80 | if reg != nil { |
| 81 | reg.MustRegister(userManagerMetrics) |
| 82 | } |
| 83 | |
| 84 | discoveryMetricRegister := reg |
| 85 | if discoveryMetricRegister == nil { |
| 86 | discoveryMetricRegister = prometheus.DefaultRegisterer |
| 87 | } |
| 88 | |
| 89 | notifiersDiscoveryMetrics, err := discovery.CreateAndRegisterSDMetrics(discoveryMetricRegister) |
| 90 | |
| 91 | if err != nil { |
| 92 | level.Error(logger).Log("msg", "failed to register service discovery metrics", "err", err) |
| 93 | os.Exit(1) |
| 94 | } |
| 95 | |
| 96 | m := &DefaultMultiTenantManager{ |
| 97 | cfg: cfg, |
| 98 | notifierCfg: ncfg, |
| 99 | managerFactory: managerFactory, |
| 100 | frontendPool: newFrontendPool(cfg, logger, reg), |
| 101 | ruleEvalMetrics: evalMetrics, |
| 102 | notifiers: map[string]*rulerNotifier{}, |
| 103 | userExternalLabels: newUserExternalLabels(cfg.ExternalLabels, limits), |
| 104 | notifiersDiscoveryMetrics: notifiersDiscoveryMetrics, |
| 105 | mapper: newMapper(cfg.RulePath, logger), |
| 106 | userManagers: map[string]RulesManager{}, |
| 107 | userManagerMetrics: userManagerMetrics, |
| 108 | ruleCache: map[string][]*promRules.Group{}, |
| 109 | managersTotal: promauto.With(reg).NewGauge(prometheus.GaugeOpts{ |
| 110 | Namespace: "cortex", |
| 111 | Name: "ruler_managers_total", |
| 112 | Help: "Total number of managers registered and running in the ruler", |
| 113 | }), |
| 114 | lastReloadSuccessful: promauto.With(reg).NewGaugeVec(prometheus.GaugeOpts{ |
| 115 | Namespace: "cortex", |
| 116 | Name: "ruler_config_last_reload_successful", |
| 117 | Help: "Boolean set to 1 whenever the last configuration reload attempt was successful.", |
| 118 | }, []string{"user"}), |
| 119 | lastReloadSuccessfulTimestamp: promauto.With(reg).NewGaugeVec(prometheus.GaugeOpts{ |
| 120 | Namespace: "cortex", |
| 121 | Name: "ruler_config_last_reload_successful_seconds", |
| 122 | Help: "Timestamp of the last successful configuration reload.", |
| 123 | }, []string{"user"}), |
| 124 | configUpdatesTotal: promauto.With(reg).NewCounterVec(prometheus.CounterOpts{ |
| 125 | Namespace: "cortex", |
| 126 | Name: "ruler_config_updates_total", |
| 127 | Help: "Total number of config updates triggered by a user", |
| 128 | }, []string{"user"}), |
| 129 | registry: reg, |
| 130 | logger: logger, |