mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-15 06:01:50 +00:00
Better kubelet logging for probes
Log when we actually run probes and event when they fail. Print the output of a probe, too.
This commit is contained in:
@@ -31,12 +31,12 @@ func New() TCPProber {
|
||||
}
|
||||
|
||||
type TCPProber interface {
|
||||
Probe(host string, port int, timeout time.Duration) (probe.Result, error)
|
||||
Probe(host string, port int, timeout time.Duration) (probe.Result, string, error)
|
||||
}
|
||||
|
||||
type tcpProber struct{}
|
||||
|
||||
func (pr tcpProber) Probe(host string, port int, timeout time.Duration) (probe.Result, error) {
|
||||
func (pr tcpProber) Probe(host string, port int, timeout time.Duration) (probe.Result, string, error) {
|
||||
return DoTCPProbe(net.JoinHostPort(host, strconv.Itoa(port)), timeout)
|
||||
}
|
||||
|
||||
@@ -44,14 +44,15 @@ func (pr tcpProber) Probe(host string, port int, timeout time.Duration) (probe.R
|
||||
// If the socket can be opened, it returns Success
|
||||
// If the socket fails to open, it returns Failure.
|
||||
// This is exported because some other packages may want to do direct TCP probes.
|
||||
func DoTCPProbe(addr string, timeout time.Duration) (probe.Result, error) {
|
||||
func DoTCPProbe(addr string, timeout time.Duration) (probe.Result, string, error) {
|
||||
conn, err := net.DialTimeout("tcp", addr, timeout)
|
||||
if err != nil {
|
||||
return probe.Failure, nil
|
||||
// Convert errors to failures to handle timeouts.
|
||||
return probe.Failure, err.Error(), nil
|
||||
}
|
||||
err = conn.Close()
|
||||
if err != nil {
|
||||
glog.Errorf("unexpected error closing health check socket: %v (%#v)", err, err)
|
||||
glog.Errorf("Unexpected error closing TCP probe socket: %v (%#v)", err, err)
|
||||
}
|
||||
return probe.Success, nil
|
||||
return probe.Success, "", nil
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@ import (
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -34,10 +35,11 @@ func TestTcpHealthChecker(t *testing.T) {
|
||||
expectedStatus probe.Result
|
||||
usePort bool
|
||||
expectError bool
|
||||
output string
|
||||
}{
|
||||
// The probe will be filled in below. This is primarily testing that a connection is made.
|
||||
{probe.Success, true, false},
|
||||
{probe.Failure, false, false},
|
||||
{probe.Success, true, false, ""},
|
||||
{probe.Failure, false, false, "tcp: unknown port"},
|
||||
}
|
||||
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -60,7 +62,7 @@ func TestTcpHealthChecker(t *testing.T) {
|
||||
if !test.usePort {
|
||||
p = -1
|
||||
}
|
||||
status, err := prober.Probe(host, p, 1*time.Second)
|
||||
status, output, err := prober.Probe(host, p, 1*time.Second)
|
||||
if status != test.expectedStatus {
|
||||
t.Errorf("expected: %v, got: %v", test.expectedStatus, status)
|
||||
}
|
||||
@@ -70,5 +72,8 @@ func TestTcpHealthChecker(t *testing.T) {
|
||||
if err == nil && test.expectError {
|
||||
t.Errorf("unexpected non-error.")
|
||||
}
|
||||
if !strings.Contains(output, test.output) {
|
||||
t.Errorf("expected %s, got %s", test.output, output)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user