From 7a6d33620f79e35ae731a3273a7e6fdf5fe1c3d3 Mon Sep 17 00:00:00 2001 From: Hitoshi Mitake Date: Thu, 20 Aug 2015 10:58:29 +0900 Subject: [PATCH] snap: export durations of marshalling cost during snapshot save Currently, total duration of snapshot saving is exported for prometheus. For more detailed analysis, this commit let etcd export durations of marshalling for prometheus. --- snap/metrics.go | 9 ++++++++- snap/snapshotter.go | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/snap/metrics.go b/snap/metrics.go index ee20bf6b6..72758499a 100644 --- a/snap/metrics.go +++ b/snap/metrics.go @@ -18,15 +18,22 @@ import "github.com/coreos/etcd/Godeps/_workspace/src/github.com/prometheus/clien var ( // TODO: save_fsync latency? - // TODO: save_encoding latency? saveDurations = prometheus.NewSummary(prometheus.SummaryOpts{ Namespace: "etcd", Subsystem: "snapshot", Name: "save_total_durations_microseconds", Help: "The total latency distributions of save called by snapshot.", }) + + marshallingDurations = prometheus.NewSummary(prometheus.SummaryOpts{ + Namespace: "etcd", + Subsystem: "snapshot", + Name: "save_marshalling_durations_microseconds", + Help: "The marshalling cost distributions of save called by snapshot.", + }) ) func init() { prometheus.MustRegister(saveDurations) + prometheus.MustRegister(marshallingDurations) } diff --git a/snap/snapshotter.go b/snap/snapshotter.go index 57d7d320c..4f9eb9ed8 100644 --- a/snap/snapshotter.go +++ b/snap/snapshotter.go @@ -73,7 +73,10 @@ func (s *Snapshotter) save(snapshot *raftpb.Snapshot) error { d, err := snap.Marshal() if err != nil { return err + } else { + marshallingDurations.Observe(float64(time.Since(start).Nanoseconds() / int64(time.Microsecond))) } + err = ioutil.WriteFile(path.Join(s.dir, fname), d, 0666) if err == nil { saveDurations.Observe(float64(time.Since(start).Nanoseconds() / int64(time.Microsecond)))