@@ -25,9 +25,9 @@ import (
2525)
2626
2727const (
28- getPromNone = iota
29- getPromOK
30- getPromFail
28+ readResultNone = iota
29+ readResultOK
30+ readResultFail
3131)
3232
3333type PromInfoFetcher interface {
@@ -54,7 +54,7 @@ type DefaultMetricsReader struct {
5454 lg * zap.Logger
5555 cfg * config.HealthCheck
5656 lastID uint64
57- getPromRes int
57+ readResult int
5858}
5959
6060func NewDefaultMetricsReader (lg * zap.Logger , promFetcher PromInfoFetcher , cfg * config.HealthCheck ) * DefaultMetricsReader {
@@ -79,11 +79,21 @@ func (dmr *DefaultMetricsReader) Start(ctx context.Context) {
7979 defer ticker .Stop ()
8080 for childCtx .Err () == nil {
8181 if results , err := dmr .readMetrics (childCtx ); err != nil {
82- dmr .lg .Warn ("read metrics failed" , zap .Error (err ))
83- } else if len (results ) > 0 {
84- dmr .Lock ()
85- dmr .queryResults = results
86- dmr .Unlock ()
82+ // If there are successive errors, only log it once.
83+ if dmr .readResult != readResultFail {
84+ dmr .readResult = readResultFail
85+ dmr .lg .Warn ("read metrics failed" , zap .Error (err ))
86+ }
87+ } else {
88+ if dmr .readResult != readResultOK {
89+ dmr .readResult = readResultOK
90+ dmr .lg .Debug ("read metrics succeed" )
91+ }
92+ if len (results ) > 0 {
93+ dmr .Lock ()
94+ dmr .queryResults = results
95+ dmr .Unlock ()
96+ }
8797 }
8898 select {
8999 case <- ticker .C :
@@ -98,24 +108,16 @@ func (dmr *DefaultMetricsReader) Start(ctx context.Context) {
98108func (dmr * DefaultMetricsReader ) getPromAPI (ctx context.Context ) (promv1.API , error ) {
99109 promInfo , err := dmr .promFetcher .GetPromInfo (ctx )
100110 if promInfo == nil {
101- if dmr .getPromRes != getPromFail {
102- dmr .getPromRes = getPromFail
103- }
104111 if err == nil {
105112 err = errors .New ("no prometheus info found" )
106113 }
107- dmr .lg .Warn ("get prometheus address fails" , zap .Error (err ))
108114 return nil , err
109115 }
110116 if err != nil {
111117 return nil , err
112118 }
113119 // TODO: support TLS and authentication.
114120 promAddr := fmt .Sprintf ("http://%s" , net .JoinHostPort (promInfo .IP , strconv .Itoa (promInfo .Port )))
115- if dmr .getPromRes != getPromOK {
116- dmr .getPromRes = getPromOK
117- dmr .lg .Info ("get prometheus address succeeds" , zap .String ("addr" , promAddr ))
118- }
119121 promClient , err := api .NewClient (api.Config {
120122 Address : promAddr ,
121123 })
0 commit comments