Skip to content

Commit 6eea187

Browse files
authored
Add options to add prefix/suffix for Thanos alerts (#230)
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
1 parent 8beb6bd commit 6eea187

File tree

1 file changed

+42
-26
lines changed

1 file changed

+42
-26
lines changed

pkg/rules/thanos/thanos.go

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ type ThanosRulesConfig struct {
8080
RuleDashboardURL string
8181

8282
ServiceLabelValue string
83+
ServiceSelectorPrefix string
84+
ServiceSelectorSuffix string
8385
ReceiveRouterServiceSelector string
8486
ReceiveIngesterServiceSelector string
8587
RulerServiceSelector string
@@ -105,56 +107,50 @@ func WithServiceLabelValue(serviceLabelValue string) ThanosRulesConfigOption {
105107
}
106108
}
107109

110+
func WithServiceSelectorPrefix(serviceSelectorPrefix string) ThanosRulesConfigOption {
111+
return func(thanosRulesConfig *ThanosRulesConfig) {
112+
thanosRulesConfig.ServiceSelectorPrefix = serviceSelectorPrefix
113+
}
114+
}
115+
116+
func WithServiceSelectorSuffix(serviceSelectorSuffix string) ThanosRulesConfigOption {
117+
return func(thanosRulesConfig *ThanosRulesConfig) {
118+
thanosRulesConfig.ServiceSelectorSuffix = serviceSelectorSuffix
119+
}
120+
}
121+
108122
func WithReceiveRouterServiceSelector(receiveRouterServiceSelector string) ThanosRulesConfigOption {
109123
return func(thanosRulesConfig *ThanosRulesConfig) {
110-
if receiveRouterServiceSelector == "" {
111-
receiveRouterServiceSelector = "thanos-receive-router.*"
112-
}
113124
thanosRulesConfig.ReceiveRouterServiceSelector = receiveRouterServiceSelector
114125
}
115126
}
116127

117128
func WithReceiveIngesterServiceSelector(receiveIngesterServiceSelector string) ThanosRulesConfigOption {
118129
return func(thanosRulesConfig *ThanosRulesConfig) {
119-
if receiveIngesterServiceSelector == "" {
120-
receiveIngesterServiceSelector = "thanos-receive-ingester.*"
121-
}
122130
thanosRulesConfig.ReceiveIngesterServiceSelector = receiveIngesterServiceSelector
123131
}
124132
}
125133

126134
func WithRulerServiceSelector(rulerServiceSelector string) ThanosRulesConfigOption {
127135
return func(thanosRulesConfig *ThanosRulesConfig) {
128-
if rulerServiceSelector == "" {
129-
rulerServiceSelector = "thanos-ruler.*"
130-
}
131136
thanosRulesConfig.RulerServiceSelector = rulerServiceSelector
132137
}
133138
}
134139

135140
func WithStoreServiceSelector(storeServiceSelector string) ThanosRulesConfigOption {
136141
return func(thanosRulesConfig *ThanosRulesConfig) {
137-
if storeServiceSelector == "" {
138-
storeServiceSelector = "thanos-store.*"
139-
}
140142
thanosRulesConfig.StoreServiceSelector = storeServiceSelector
141143
}
142144
}
143145

144146
func WithCompactServiceSelector(compactServiceSelector string) ThanosRulesConfigOption {
145147
return func(thanosRulesConfig *ThanosRulesConfig) {
146-
if compactServiceSelector == "" {
147-
compactServiceSelector = "thanos-compact.*"
148-
}
149148
thanosRulesConfig.CompactServiceSelector = compactServiceSelector
150149
}
151150
}
152151

153152
func WithQueryServiceSelector(queryServiceSelector string) ThanosRulesConfigOption {
154153
return func(thanosRulesConfig *ThanosRulesConfig) {
155-
if queryServiceSelector == "" {
156-
queryServiceSelector = "thanos-query.*"
157-
}
158154
thanosRulesConfig.QueryServiceSelector = queryServiceSelector
159155
}
160156
}
@@ -201,25 +197,45 @@ func WithRuleDashboardURL(ruleDashboardURL string) ThanosRulesConfigOption {
201197
}
202198
}
203199

200+
// buildServiceSelector constructs a service selector regex pattern with optional prefix and suffix.
201+
// For example, with baseComponent="thanos-compact", prefix="my-", suffix="-dev",
202+
// it returns "my-thanos-compact-dev.*"
203+
func buildServiceSelector(baseComponent, prefix, suffix string) string {
204+
return prefix + baseComponent + suffix + ".*"
205+
}
206+
204207
// NewThanosRulesBuilder creates a new Thanos rules builder.
205208
func NewThanosRulesBuilder(
206209
namespace string,
207210
labels map[string]string,
208211
annotations map[string]string,
209212
options ...ThanosRulesConfigOption,
210213
) (promtheusrule.Builder, error) {
211-
thanosRulesConfig := ThanosRulesConfig{
212-
ReceiveRouterServiceSelector: "thanos-receive-router.*",
213-
ReceiveIngesterServiceSelector: "thanos-receive-ingester.*",
214-
RulerServiceSelector: "thanos-ruler.*",
215-
StoreServiceSelector: "thanos-store.*",
216-
CompactServiceSelector: "thanos-compact.*",
217-
QueryServiceSelector: "thanos-query.*",
218-
}
214+
thanosRulesConfig := ThanosRulesConfig{}
219215
for _, option := range options {
220216
option(&thanosRulesConfig)
221217
}
222218

219+
// Apply defaults with prefix/suffix if selectors are not explicitly set
220+
if thanosRulesConfig.ReceiveRouterServiceSelector == "" {
221+
thanosRulesConfig.ReceiveRouterServiceSelector = buildServiceSelector("thanos-receive-router", thanosRulesConfig.ServiceSelectorPrefix, thanosRulesConfig.ServiceSelectorSuffix)
222+
}
223+
if thanosRulesConfig.ReceiveIngesterServiceSelector == "" {
224+
thanosRulesConfig.ReceiveIngesterServiceSelector = buildServiceSelector("thanos-receive-ingester", thanosRulesConfig.ServiceSelectorPrefix, thanosRulesConfig.ServiceSelectorSuffix)
225+
}
226+
if thanosRulesConfig.RulerServiceSelector == "" {
227+
thanosRulesConfig.RulerServiceSelector = buildServiceSelector("thanos-ruler", thanosRulesConfig.ServiceSelectorPrefix, thanosRulesConfig.ServiceSelectorSuffix)
228+
}
229+
if thanosRulesConfig.StoreServiceSelector == "" {
230+
thanosRulesConfig.StoreServiceSelector = buildServiceSelector("thanos-store", thanosRulesConfig.ServiceSelectorPrefix, thanosRulesConfig.ServiceSelectorSuffix)
231+
}
232+
if thanosRulesConfig.CompactServiceSelector == "" {
233+
thanosRulesConfig.CompactServiceSelector = buildServiceSelector("thanos-compact", thanosRulesConfig.ServiceSelectorPrefix, thanosRulesConfig.ServiceSelectorSuffix)
234+
}
235+
if thanosRulesConfig.QueryServiceSelector == "" {
236+
thanosRulesConfig.QueryServiceSelector = buildServiceSelector("thanos-query", thanosRulesConfig.ServiceSelectorPrefix, thanosRulesConfig.ServiceSelectorSuffix)
237+
}
238+
223239
promRule, err := promtheusrule.New(
224240
"thanos-rules",
225241
namespace,

0 commit comments

Comments
 (0)