From 57ec2226cc02c97605a3c73554d80e4e05957d39 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Fri, 20 Jul 2018 14:59:03 -0700 Subject: [PATCH] etcdserver: support zap.Logger in FD monitoring routine Keep replacing capnslog Signed-off-by: Gyuho Lee --- etcdserver/metrics.go | 21 +++++++++++++++++---- etcdserver/server.go | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/etcdserver/metrics.go b/etcdserver/metrics.go index 733de4741..41624c93d 100644 --- a/etcdserver/metrics.go +++ b/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: diff --git a/etcdserver/server.go b/etcdserver/server.go index 5f6110bbf..7da7c1365 100644 --- a/etcdserver/server.go +++ b/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)