Skip to content

Commit 95def88

Browse files
authored
metricsreader: only report error once if Prometheus is not deployed (#579)
1 parent 3e7fdce commit 95def88

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

pkg/balance/metricsreader/metrics_reader.go

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ import (
2525
)
2626

2727
const (
28-
getPromNone = iota
29-
getPromOK
30-
getPromFail
28+
readResultNone = iota
29+
readResultOK
30+
readResultFail
3131
)
3232

3333
type 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

6060
func 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) {
98108
func (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
})

pkg/balance/metricsreader/metrics_reader_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ func TestNoPromAddr(t *testing.T) {
208208
return nil, nil
209209
},
210210
}
211-
lg, _ := logger.CreateLoggerForTest(t)
211+
lg, text := logger.CreateLoggerForTest(t)
212212
cfg := newHealthCheckConfigForTest()
213213
mr := NewDefaultMetricsReader(lg, mpf, cfg)
214214
promInfo, err := mr.getPromAPI(context.Background())
@@ -225,6 +225,7 @@ func TestNoPromAddr(t *testing.T) {
225225
time.Sleep(10 * cfg.MetricsInterval)
226226
qr := mr.GetQueryResult(id)
227227
require.True(t, qr.Empty())
228+
require.Equal(t, 1, strings.Count(text.String(), "no prometheus info found"))
228229
}
229230

230231
func setupTypicalMetricsReader(t *testing.T) (*mockHttpHandler, MetricsReader) {

0 commit comments

Comments
 (0)