@@ -21,6 +21,7 @@ package prometheus
21
21
22
22
import (
23
23
"context"
24
+ "fmt"
24
25
"os"
25
26
"os/signal"
26
27
"runtime"
@@ -101,8 +102,6 @@ func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan
101
102
cfg .configFile = configFilePath
102
103
103
104
logger := promlog .New (& cfg .promlogConfig )
104
- //stdlog.SetOutput(log.NewStdlibAdapter(logger))
105
- //stdlog.Println("redirect std log")
106
105
107
106
klog .SetLogger (klogr .New ().WithName ("k8s_client_runtime" ).V (6 ))
108
107
@@ -116,8 +115,19 @@ func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan
116
115
ctxScrape , cancelScrape = context .WithCancel (context .Background ())
117
116
sdMetrics , _ = discovery .CreateAndRegisterSDMetrics (prometheus .DefaultRegisterer )
118
117
discoveryManagerScrape = discovery .NewManager (ctxScrape , log .With (logger , "component" , "discovery manager scrape" ), prometheus .DefaultRegisterer , sdMetrics , discovery .Name ("scrape" ))
119
- scrapeManager , _ = scrape .NewManager (& scrape.Options {}, log .With (logger , "component" , "scrape manager" ), receiver , prometheus .DefaultRegisterer )
118
+
119
+ scrapeManager , _ = scrape .NewManager (& scrape.Options {}, log .With (logger , "component" , "scrape manager" ), receiver , prometheus .DefaultRegisterer )
120
+ taManager = createTargetAllocatorManager (configFilePath , log .With (logger , "component" , "ta manager" ), logLevel , scrapeManager , discoveryManagerScrape )
121
+ )
122
+
123
+ level .Info (logger ).Log ("msg" , fmt .Sprintf ("Target Allocator is %t" , taManager .enabled ))
124
+ //Setup Target Allocator Scrape Post Process Handler
125
+ taManager .AttachReloadConfigHandler (
126
+ func (prometheusConfig * config.Config ) {
127
+ relabelScrapeConfigs (prometheusConfig , logger )
128
+ },
120
129
)
130
+
121
131
mth .SetScrapeManager (scrapeManager )
122
132
123
133
var reloaders = []func (cfg * config.Config ) error {
@@ -151,7 +161,6 @@ func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan
151
161
close (reloadReady .C )
152
162
})
153
163
}
154
-
155
164
var g run.Group
156
165
{
157
166
// Termination handler.
@@ -179,12 +188,13 @@ func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan
179
188
// Scrape discovery manager.
180
189
g .Add (
181
190
func () error {
191
+ level .Info (logger ).Log ("msg" , "Scrape discovery manager starting" )
182
192
err := discoveryManagerScrape .Run ()
183
- level .Info (logger ).Log ("msg" , "Scrape discovery manager stopped" )
193
+ level .Info (logger ).Log ("msg" , "Scrape discovery manager stopped" , "error" , err )
184
194
return err
185
195
},
186
196
func (err error ) {
187
- level .Info (logger ).Log ("msg" , "Stopping scrape discovery manager..." )
197
+ level .Info (logger ).Log ("msg" , "Stopping scrape discovery manager..." , "error" , err )
188
198
cancelScrape ()
189
199
},
190
200
)
@@ -201,17 +211,35 @@ func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan
201
211
202
212
level .Info (logger ).Log ("msg" , "start discovery" )
203
213
err := scrapeManager .Run (discoveryManagerScrape .SyncCh ())
204
- level .Info (logger ).Log ("msg" , "Scrape manager stopped" )
214
+ level .Info (logger ).Log ("msg" , "Scrape manager stopped" , "error" , err )
205
215
return err
206
216
},
207
217
func (err error ) {
208
218
// Scrape manager needs to be stopped before closing the local TSDB
209
219
// so that it doesn't try to write samples to a closed storage.
210
- level .Info (logger ).Log ("msg" , "Stopping scrape manager..." )
220
+ level .Info (logger ).Log ("msg" , "Stopping scrape manager..." , "error" , err )
211
221
scrapeManager .Stop ()
212
222
},
213
223
)
214
224
}
225
+ {
226
+ // Target Allocator manager.
227
+ if taManager .enabled {
228
+ g .Add (
229
+ func () error {
230
+ // we wait until the config is fully loaded.
231
+ level .Info (logger ).Log ("msg" , "start ta manager" )
232
+ err := taManager .Run ()
233
+ level .Info (logger ).Log ("msg" , "ta manager stopped" , "error" , err )
234
+ return err
235
+ },
236
+ func (err error ) {
237
+ level .Info (logger ).Log ("msg" , "Stopping ta manager..." , "error" , err )
238
+ taManager .Shutdown ()
239
+ },
240
+ )
241
+ }
242
+ }
215
243
{
216
244
// Reload handler.
217
245
@@ -227,7 +255,7 @@ func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan
227
255
for {
228
256
select {
229
257
case <- hup :
230
- if err := reloadConfig (cfg .configFile , logger , reloaders ... ); err != nil {
258
+ if err := reloadConfig (cfg .configFile , logger , taManager , reloaders ... ); err != nil {
231
259
level .Error (logger ).Log ("msg" , "Error reloading config" , "err" , err )
232
260
}
233
261
@@ -257,9 +285,11 @@ func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan
257
285
258
286
default :
259
287
}
260
-
288
+ if taManager .enabled {
289
+ <- taManager .taReadyCh
290
+ }
261
291
level .Info (logger ).Log ("msg" , "handling config file" )
262
- if err := reloadConfig (cfg .configFile , logger , reloaders ... ); err != nil {
292
+ if err := reloadConfig (cfg .configFile , logger , taManager , reloaders ... ); err != nil {
263
293
return errors .Wrapf (err , "error loading config from %q" , cfg .configFile )
264
294
}
265
295
level .Info (logger ).Log ("msg" , "finish handling config file" )
@@ -288,30 +318,11 @@ const (
288
318
savedScrapeNameLabel = "cwagent_saved_scrape_name" // just arbitrary name that end user won't override in relabel config
289
319
)
290
320
291
- func reloadConfig (filename string , logger log.Logger , rls ... func (* config.Config ) error ) (err error ) {
292
- level .Info (logger ).Log ("msg" , "Loading configuration file" , "filename" , filename )
293
- content , _ := os .ReadFile (filename )
294
- text := string (content )
295
- level .Debug (logger ).Log ("msg" , "Prometheus configuration file" , "value" , text )
296
-
297
- defer func () {
298
- if err == nil {
299
- configSuccess .Set (1 )
300
- configSuccessTime .SetToCurrentTime ()
301
- } else {
302
- configSuccess .Set (0 )
303
- }
304
- }()
305
-
306
- conf , err := config .LoadFile (filename , false , false , logger )
307
- if err != nil {
308
- return errors .Wrapf (err , "couldn't load configuration (--config.file=%q)" , filename )
309
- }
310
-
321
+ func relabelScrapeConfigs (prometheusConfig * config.Config , logger log.Logger ) {
311
322
// For saving name before relabel
312
323
// - __name__ https://github.com/aws/amazon-cloudwatch-agent/issues/190
313
324
// - job and instance https://github.com/aws/amazon-cloudwatch-agent/issues/193
314
- for _ , sc := range conf .ScrapeConfigs {
325
+ for _ , sc := range prometheusConfig .ScrapeConfigs {
315
326
relabelConfigs := []* relabel.Config {
316
327
// job
317
328
{
@@ -331,13 +342,38 @@ func reloadConfig(filename string, logger log.Logger, rls ...func(*config.Config
331
342
},
332
343
}
333
344
334
- level .Info (logger ).Log ("msg" , "Add extra relabel_configs and metric_relabel_configs to save job, instance and __name__ before user relabel" )
345
+ level .Debug (logger ).Log ("msg" , "Add extra relabel_configs and metric_relabel_configs to save job, instance and __name__ before user relabel" )
335
346
336
347
sc .RelabelConfigs = append (relabelConfigs , sc .RelabelConfigs ... )
337
348
sc .MetricRelabelConfigs = append (metricNameRelabelConfigs , sc .MetricRelabelConfigs ... )
338
-
339
349
}
350
+ }
351
+ func reloadConfig (filename string , logger log.Logger , taManager * TargetAllocatorManager , rls ... func (* config.Config ) error ) (err error ) {
352
+ level .Info (logger ).Log ("msg" , "Loading configuration file" , "filename" , filename )
353
+ content , _ := os .ReadFile (filename )
354
+ text := string (content )
355
+ level .Debug (logger ).Log ("msg" , "Prometheus configuration file" , "value" , text )
340
356
357
+ defer func () {
358
+ if err == nil {
359
+ configSuccess .Set (1 )
360
+ configSuccessTime .SetToCurrentTime ()
361
+ } else {
362
+ configSuccess .Set (0 )
363
+ }
364
+ }()
365
+ // Check for TA
366
+ var conf * config.Config
367
+ if taManager .enabled {
368
+ level .Info (logger ).Log ("msg" , "Target Allocator is enabled" )
369
+ conf = (* config .Config )(taManager .config .PrometheusConfig )
370
+ } else {
371
+ conf , err = config .LoadFile (filename , false , false , logger )
372
+ if err != nil {
373
+ return errors .Wrapf (err , "couldn't load configuration (--config.file=%q)" , filename )
374
+ }
375
+ }
376
+ relabelScrapeConfigs (conf , logger )
341
377
failed := false
342
378
for _ , rl := range rls {
343
379
if err := rl (conf ); err != nil {
0 commit comments