TUN-1613: improved cloudflared RegisterTunnel fail metrics

This commit is contained in:
Adam Chalmers 2019-03-15 18:46:53 -05:00
parent eafc89bf73
commit 541cf68608
2 changed files with 20 additions and 3 deletions

View File

@ -53,6 +53,7 @@ type TunnelMetrics struct {
regSuccess prometheus.Counter regSuccess prometheus.Counter
regFail *prometheus.CounterVec regFail *prometheus.CounterVec
rpcFail *prometheus.CounterVec
muxerMetrics *muxerMetrics muxerMetrics *muxerMetrics
tunnelsHA tunnelsForHA tunnelsHA tunnelsForHA
@ -345,6 +346,15 @@ func NewTunnelMetrics() *TunnelMetrics {
) )
prometheus.MustRegister(serverLocations) prometheus.MustRegister(serverLocations)
rpcFail := prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "tunnel_rpc_fail",
Help: "Count of RPC connection errors by type",
},
[]string{"error"},
)
prometheus.MustRegister(rpcFail)
registerFail := prometheus.NewCounterVec( registerFail := prometheus.NewCounterVec(
prometheus.CounterOpts{ prometheus.CounterOpts{
Name: "tunnel_register_fail", Name: "tunnel_register_fail",
@ -378,6 +388,7 @@ func NewTunnelMetrics() *TunnelMetrics {
tunnelsHA: NewTunnelsForHA(), tunnelsHA: NewTunnelsForHA(),
regSuccess: registerSuccess, regSuccess: registerSuccess,
regFail: registerFail, regFail: registerFail,
rpcFail: rpcFail,
} }
} }

View File

@ -24,6 +24,7 @@ import (
raven "github.com/getsentry/raven-go" raven "github.com/getsentry/raven-go"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus"
_ "github.com/prometheus/client_golang/prometheus" _ "github.com/prometheus/client_golang/prometheus"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"golang.org/x/sync/errgroup" "golang.org/x/sync/errgroup"
@ -105,6 +106,11 @@ type clientRegisterTunnelError struct {
cause error cause error
} }
func newClientRegisterTunnelError(cause error, counter *prometheus.CounterVec) clientRegisterTunnelError {
counter.WithLabelValues(cause.Error()).Inc()
return clientRegisterTunnelError{cause: cause}
}
func (e clientRegisterTunnelError) Error() string { func (e clientRegisterTunnelError) Error() string {
return e.cause.Error() return e.cause.Error()
} }
@ -323,11 +329,11 @@ func RegisterTunnel(
}, nil) }, nil)
if err != nil { if err != nil {
// RPC stream open error // RPC stream open error
return clientRegisterTunnelError{cause: err} return newClientRegisterTunnelError(err, config.Metrics.rpcFail)
} }
if !IsRPCStreamResponse(stream.Headers) { if !IsRPCStreamResponse(stream.Headers) {
// stream response error // stream response error
return clientRegisterTunnelError{cause: err} return newClientRegisterTunnelError(err, config.Metrics.rpcFail)
} }
conn := rpc.NewConn( conn := rpc.NewConn(
tunnelrpc.NewTransportLogger(config.TransportLogger.WithField("subsystem", "rpc-register"), rpc.StreamTransport(stream)), tunnelrpc.NewTransportLogger(config.TransportLogger.WithField("subsystem", "rpc-register"), rpc.StreamTransport(stream)),
@ -349,7 +355,7 @@ func RegisterTunnel(
LogServerInfo(serverInfoPromise.Result(), connectionID, config.Metrics, config.Logger) LogServerInfo(serverInfoPromise.Result(), connectionID, config.Metrics, config.Logger)
if err != nil { if err != nil {
// RegisterTunnel RPC failure // RegisterTunnel RPC failure
return clientRegisterTunnelError{cause: err} return newClientRegisterTunnelError(err, config.Metrics.regFail)
} }
for _, logLine := range registration.LogLines { for _, logLine := range registration.LogLines {
config.Logger.Info(logLine) config.Logger.Info(logLine)