Adds source address logging on RPC errors.
This commit is contained in:
parent
b602aa623b
commit
92531812b6
|
@ -12,6 +12,7 @@ import (
|
||||||
"github.com/armon/go-metrics"
|
"github.com/armon/go-metrics"
|
||||||
"github.com/hashicorp/consul/consul/state"
|
"github.com/hashicorp/consul/consul/state"
|
||||||
"github.com/hashicorp/consul/consul/structs"
|
"github.com/hashicorp/consul/consul/structs"
|
||||||
|
"github.com/hashicorp/memberlist"
|
||||||
"github.com/hashicorp/net-rpc-msgpackrpc"
|
"github.com/hashicorp/net-rpc-msgpackrpc"
|
||||||
"github.com/hashicorp/yamux"
|
"github.com/hashicorp/yamux"
|
||||||
"github.com/inconshreveable/muxado"
|
"github.com/inconshreveable/muxado"
|
||||||
|
@ -69,6 +70,12 @@ func (s *Server) listen() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// logConn is a wrapper around memberlist's LogConn so that we format references
|
||||||
|
// to "from" addresses in a consistent way. This is just a shorter name.
|
||||||
|
func logConn(conn net.Conn) string {
|
||||||
|
return memberlist.LogConn(conn)
|
||||||
|
}
|
||||||
|
|
||||||
// handleConn is used to determine if this is a Raft or
|
// handleConn is used to determine if this is a Raft or
|
||||||
// Consul type RPC connection and invoke the correct handler
|
// Consul type RPC connection and invoke the correct handler
|
||||||
func (s *Server) handleConn(conn net.Conn, isTLS bool) {
|
func (s *Server) handleConn(conn net.Conn, isTLS bool) {
|
||||||
|
@ -76,7 +83,7 @@ func (s *Server) handleConn(conn net.Conn, isTLS bool) {
|
||||||
buf := make([]byte, 1)
|
buf := make([]byte, 1)
|
||||||
if _, err := conn.Read(buf); err != nil {
|
if _, err := conn.Read(buf); err != nil {
|
||||||
if err != io.EOF {
|
if err != io.EOF {
|
||||||
s.logger.Printf("[ERR] consul.rpc: failed to read byte: %v", err)
|
s.logger.Printf("[ERR] consul.rpc: failed to read byte: %v %s", err, logConn(conn))
|
||||||
}
|
}
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return
|
return
|
||||||
|
@ -84,7 +91,7 @@ func (s *Server) handleConn(conn net.Conn, isTLS bool) {
|
||||||
|
|
||||||
// Enforce TLS if VerifyIncoming is set
|
// Enforce TLS if VerifyIncoming is set
|
||||||
if s.config.VerifyIncoming && !isTLS && RPCType(buf[0]) != rpcTLS {
|
if s.config.VerifyIncoming && !isTLS && RPCType(buf[0]) != rpcTLS {
|
||||||
s.logger.Printf("[WARN] consul.rpc: Non-TLS connection attempted with VerifyIncoming set")
|
s.logger.Printf("[WARN] consul.rpc: Non-TLS connection attempted with VerifyIncoming set %s", logConn(conn))
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -103,7 +110,7 @@ func (s *Server) handleConn(conn net.Conn, isTLS bool) {
|
||||||
|
|
||||||
case rpcTLS:
|
case rpcTLS:
|
||||||
if s.rpcTLS == nil {
|
if s.rpcTLS == nil {
|
||||||
s.logger.Printf("[WARN] consul.rpc: TLS connection attempted, server not configured for TLS")
|
s.logger.Printf("[WARN] consul.rpc: TLS connection attempted, server not configured for TLS %s", logConn(conn))
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -114,7 +121,7 @@ func (s *Server) handleConn(conn net.Conn, isTLS bool) {
|
||||||
s.handleMultiplexV2(conn)
|
s.handleMultiplexV2(conn)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
s.logger.Printf("[ERR] consul.rpc: unrecognized RPC byte: %v", buf[0])
|
s.logger.Printf("[ERR] consul.rpc: unrecognized RPC byte: %v %s", buf[0], logConn(conn))
|
||||||
conn.Close()
|
conn.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -129,7 +136,7 @@ func (s *Server) handleMultiplex(conn net.Conn) {
|
||||||
sub, err := server.Accept()
|
sub, err := server.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !strings.Contains(err.Error(), "closed") {
|
if !strings.Contains(err.Error(), "closed") {
|
||||||
s.logger.Printf("[ERR] consul.rpc: multiplex conn accept failed: %v", err)
|
s.logger.Printf("[ERR] consul.rpc: multiplex conn accept failed: %v %s", err, logConn(conn))
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -148,7 +155,7 @@ func (s *Server) handleMultiplexV2(conn net.Conn) {
|
||||||
sub, err := server.Accept()
|
sub, err := server.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err != io.EOF {
|
if err != io.EOF {
|
||||||
s.logger.Printf("[ERR] consul.rpc: multiplex conn accept failed: %v", err)
|
s.logger.Printf("[ERR] consul.rpc: multiplex conn accept failed: %v %s", err, logConn(conn))
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -169,7 +176,7 @@ func (s *Server) handleConsulConn(conn net.Conn) {
|
||||||
|
|
||||||
if err := s.rpcServer.ServeRequest(rpcCodec); err != nil {
|
if err := s.rpcServer.ServeRequest(rpcCodec); err != nil {
|
||||||
if err != io.EOF && !strings.Contains(err.Error(), "closed") {
|
if err != io.EOF && !strings.Contains(err.Error(), "closed") {
|
||||||
s.logger.Printf("[ERR] consul.rpc: RPC error: %v (%v)", err, conn)
|
s.logger.Printf("[ERR] consul.rpc: RPC error: %v %s", err, logConn(conn))
|
||||||
metrics.IncrCounter([]string{"consul", "rpc", "request_error"}, 1)
|
metrics.IncrCounter([]string{"consul", "rpc", "request_error"}, 1)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue