rpc: swap out timer metrics to histograms (#25044)

This commit is contained in:
Daniel Liu 2024-12-13 14:00:12 +08:00
parent 7b0a7e4593
commit 2e34afe400
2 changed files with 21 additions and 10 deletions

View file

@ -340,12 +340,12 @@ func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage
if callb != h.unsubscribeCb { if callb != h.unsubscribeCb {
rpcRequestGauge.Inc(1) rpcRequestGauge.Inc(1)
if answer.Error != nil { if answer.Error != nil {
failedReqeustGauge.Inc(1) failedRequestGauge.Inc(1)
} else { } else {
successfulRequestGauge.Inc(1) successfulRequestGauge.Inc(1)
} }
rpcServingTimer.UpdateSince(start) rpcServingTimer.UpdateSince(start)
newRPCServingTimer(msg.Method, answer.Error == nil).UpdateSince(start) updateServeTimeHistogram(msg.Method, answer.Error == nil, time.Since(start))
} }
return answer return answer
} }

View file

@ -18,6 +18,7 @@ package rpc
import ( import (
"fmt" "fmt"
"time"
"github.com/XinFinOrg/XDPoSChain/metrics" "github.com/XinFinOrg/XDPoSChain/metrics"
) )
@ -25,15 +26,25 @@ import (
var ( var (
rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", nil) rpcRequestGauge = metrics.NewRegisteredGauge("rpc/requests", nil)
successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", nil) successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", nil)
failedReqeustGauge = metrics.NewRegisteredGauge("rpc/failure", nil) failedRequestGauge = metrics.NewRegisteredGauge("rpc/failure", nil)
rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil)
// serveTimeHistName is the prefix of the per-request serving time histograms.
serveTimeHistName = "rpc/duration"
rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil)
) )
func newRPCServingTimer(method string, valid bool) metrics.Timer { // updateServeTimeHistogram tracks the serving time of a remote RPC call.
flag := "success" func updateServeTimeHistogram(method string, success bool, elapsed time.Duration) {
if !valid { note := "success"
flag = "failure" if !success {
note = "failure"
} }
m := fmt.Sprintf("rpc/duration/%s/%s", method, flag) h := fmt.Sprintf("%s/%s/%s", serveTimeHistName, method, note)
return metrics.GetOrRegisterTimer(m, nil) sampler := func() metrics.Sample {
return metrics.ResettingSample(
metrics.NewExpDecaySample(1028, 0.015),
)
}
metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(elapsed.Microseconds())
} }