Browse Source

Merge pull request #9946 from gyuho/log-log

etcdserver: support zap.Logger in FD monitoring routine
Gyuho Lee 7 years ago
parent
commit
88a42d91b8
2 changed files with 18 additions and 5 deletions
  1. 17 4
      etcdserver/metrics.go
  2. 1 1
      etcdserver/server.go

+ 17 - 4
etcdserver/metrics.go

@@ -21,6 +21,7 @@ import (
 	"github.com/coreos/etcd/version"
 
 	"github.com/prometheus/client_golang/prometheus"
+	"go.uber.org/zap"
 )
 
 var (
@@ -125,22 +126,34 @@ func init() {
 	}).Set(1)
 }
 
-func monitorFileDescriptor(done <-chan struct{}) {
+func monitorFileDescriptor(lg *zap.Logger, done <-chan struct{}) {
 	ticker := time.NewTicker(5 * time.Second)
 	defer ticker.Stop()
 	for {
 		used, err := runtime.FDUsage()
 		if err != nil {
-			plog.Errorf("cannot monitor file descriptor usage (%v)", err)
+			if lg != nil {
+				lg.Warn("failed to get file descriptor usage", zap.Error(err))
+			} else {
+				plog.Errorf("cannot monitor file descriptor usage (%v)", err)
+			}
 			return
 		}
 		limit, err := runtime.FDLimit()
 		if err != nil {
-			plog.Errorf("cannot monitor file descriptor usage (%v)", err)
+			if lg != nil {
+				lg.Warn("failed to get file descriptor limit", zap.Error(err))
+			} else {
+				plog.Errorf("cannot monitor file descriptor usage (%v)", err)
+			}
 			return
 		}
 		if used >= limit/5*4 {
-			plog.Warningf("80%% of the file descriptor limit is used [used = %d, limit = %d]", used, limit)
+			if lg != nil {
+				lg.Warn("80%% of file descriptors are used", zap.Uint64("used", used), zap.Uint64("limit", limit))
+			} else {
+				plog.Warningf("80%% of the file descriptor limit is used [used = %d, limit = %d]", used, limit)
+			}
 		}
 		select {
 		case <-ticker.C:

+ 1 - 1
etcdserver/server.go

@@ -703,7 +703,7 @@ func (s *EtcdServer) Start() {
 	s.goAttach(func() { s.adjustTicks() })
 	s.goAttach(func() { s.publish(s.Cfg.ReqTimeout()) })
 	s.goAttach(s.purgeFile)
-	s.goAttach(func() { monitorFileDescriptor(s.stopping) })
+	s.goAttach(func() { monitorFileDescriptor(s.getLogger(), s.stopping) })
 	s.goAttach(s.monitorVersions)
 	s.goAttach(s.linearizableReadLoop)
 	s.goAttach(s.monitorKVHash)