diff --git a/origin/metrics.go b/origin/metrics.go index f7b6b1ae..a3a01a74 100644 --- a/origin/metrics.go +++ b/origin/metrics.go @@ -51,6 +51,9 @@ type TunnelMetrics struct { // oldServerLocations stores the last server the tunnel was connected to oldServerLocations map[string]string + regSuccess prometheus.Counter + regFail *prometheus.CounterVec + muxerMetrics *muxerMetrics tunnelsHA tunnelsForHA } @@ -342,6 +345,22 @@ func NewTunnelMetrics() *TunnelMetrics { ) prometheus.MustRegister(serverLocations) + registerFail := prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "tunnel_register_fail", + Help: "Count of tunnel registration errors by type", + }, + []string{"error"}, + ) + prometheus.MustRegister(registerFail) + + registerSuccess := prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "tunnel_register_success", + Help: "Count of successful tunnel registrations", + }) + prometheus.MustRegister(registerSuccess) + return &TunnelMetrics{ haConnections: haConnections, totalRequests: totalRequests, @@ -357,6 +376,8 @@ func NewTunnelMetrics() *TunnelMetrics { oldServerLocations: make(map[string]string), muxerMetrics: newMuxerMetrics(), tunnelsHA: NewTunnelsForHA(), + regSuccess: registerSuccess, + regFail: registerFail, } } diff --git a/origin/tunnel.go b/origin/tunnel.go index 57241398..22984b92 100644 --- a/origin/tunnel.go +++ b/origin/tunnel.go @@ -351,13 +351,9 @@ func RegisterTunnel( for _, logLine := range registration.LogLines { config.Logger.Info(logLine) } - if registration.Err == DuplicateConnectionError { - return dupConnRegisterTunnelError{} - } else if registration.Err != "" { - return serverRegisterTunnelError{ - cause: fmt.Errorf("Server error: %s", registration.Err), - permanent: registration.PermanentFailure, - } + + if regErr := processRegisterTunnelError(registration.Err, registration.PermanentFailure, config.Metrics); regErr != nil { + return regErr } if registration.TunnelID != "" { @@ -381,6 +377,22 @@ func RegisterTunnel( return nil } +func processRegisterTunnelError(err string, permanentFailure bool, metrics *TunnelMetrics) error { + if err == "" { + metrics.regSuccess.Inc() + return nil + } + + metrics.regFail.WithLabelValues(err).Inc() + if err == DuplicateConnectionError { + return dupConnRegisterTunnelError{} + } + return serverRegisterTunnelError{ + cause: fmt.Errorf("Server error: %s", err), + permanent: permanentFailure, + } +} + func UnregisterTunnel(muxer *h2mux.Muxer, gracePeriod time.Duration, logger *log.Logger) error { logger.Debug("initiating RPC stream to unregister") stream, err := muxer.OpenStream([]h2mux.Header{