Skip to content

Commit

Permalink
Merge pull request #115369 from jkh52/release-1.26-fix-metrics
Browse files Browse the repository at this point in the history
apiserver cluster egress metrics: backport to release-1.26

Kubernetes-commit: 3822e40d5c98655bc3be7d81ac9f67ced1b47a33
  • Loading branch information
k8s-publishing-bot committed Feb 10, 2023
2 parents 05e39c7 + 2f64d97 commit 6051105
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 14 deletions.
12 changes: 6 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ require (
google.golang.org/protobuf v1.28.1
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/square/go-jose.v2 v2.2.2
k8s.io/api v0.0.0-20230210143906-1c6bd7031bcf
k8s.io/api v0.0.0-20230210143907-2e857c1304dd
k8s.io/apimachinery v0.0.0-20230210142156-eabbfd57b6c3
k8s.io/client-go v0.0.0-20230210153645-2e3434888bb3
k8s.io/component-base v0.0.0-20230210155927-2dcbf9413284
k8s.io/client-go v0.0.0-20230210225413-e6bc0bccc209
k8s.io/component-base v0.0.0-20230210230553-60956b60efbe
k8s.io/klog/v2 v2.80.1
k8s.io/kms v0.0.0-20230210162116-4dbde34ed1c6
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280
Expand Down Expand Up @@ -122,9 +122,9 @@ require (
)

replace (
k8s.io/api => k8s.io/api v0.0.0-20230210143906-1c6bd7031bcf
k8s.io/api => k8s.io/api v0.0.0-20230210143907-2e857c1304dd
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20230210142156-eabbfd57b6c3
k8s.io/client-go => k8s.io/client-go v0.0.0-20230210153645-2e3434888bb3
k8s.io/component-base => k8s.io/component-base v0.0.0-20230210155927-2dcbf9413284
k8s.io/client-go => k8s.io/client-go v0.0.0-20230210225413-e6bc0bccc209
k8s.io/component-base => k8s.io/component-base v0.0.0-20230210230553-60956b60efbe
k8s.io/kms => k8s.io/kms v0.0.0-20230210162116-4dbde34ed1c6
)
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -986,14 +986,14 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.0.0-20230210143906-1c6bd7031bcf h1:9xPQVVAQ6dBWeQhmtmP4oNF0X7bC6ei5Ek7RrFzyBnQ=
k8s.io/api v0.0.0-20230210143906-1c6bd7031bcf/go.mod h1:nbJ6QmNQBibrap0HTOvWFJKxGK/BrzYLsHxUzTeQVmk=
k8s.io/api v0.0.0-20230210143907-2e857c1304dd h1:Ax0FoVBkvM2NSSPl+nojstYihb6gu2/9pb2MDA6OWuQ=
k8s.io/api v0.0.0-20230210143907-2e857c1304dd/go.mod h1:nbJ6QmNQBibrap0HTOvWFJKxGK/BrzYLsHxUzTeQVmk=
k8s.io/apimachinery v0.0.0-20230210142156-eabbfd57b6c3 h1:RN3IQSPP01c+YjfkiCORSIyDxHiZ5MnjUJEczkgihis=
k8s.io/apimachinery v0.0.0-20230210142156-eabbfd57b6c3/go.mod h1:HWHg+XOdXb6/tSnEPcCnHox2Q9pEHVBOoy/uDTqdD2U=
k8s.io/client-go v0.0.0-20230210153645-2e3434888bb3 h1:ULD2jmZv0ad5l+sY40V19QSmSIJo8g/1vd8zz9yuX8c=
k8s.io/client-go v0.0.0-20230210153645-2e3434888bb3/go.mod h1:F0c5iAdVOmjB4/PrZUBO53STxj5j3DE6g4xOn/o/WUY=
k8s.io/component-base v0.0.0-20230210155927-2dcbf9413284 h1:Wyx2zUTgx24uE38TvovTGFw+bGhQQXsOyIHeur5/pT8=
k8s.io/component-base v0.0.0-20230210155927-2dcbf9413284/go.mod h1:3Vr9lpWind8jJlqQjSNyw43+mk5QmPcLmDFJnxtIvGc=
k8s.io/client-go v0.0.0-20230210225413-e6bc0bccc209 h1:GteeuWJpm6aqwjZ7M2R70Vx6tQL2jE7EzPBvQYo6Wx4=
k8s.io/client-go v0.0.0-20230210225413-e6bc0bccc209/go.mod h1:GHp3yazyBPG+z9sMbUZ54whCIlmGpMtE/KE1+hAvKno=
k8s.io/component-base v0.0.0-20230210230553-60956b60efbe h1:AAg/B0IjVPoXQma/wssWjZ7yMr9D6oc/9la0LNEXjBE=
k8s.io/component-base v0.0.0-20230210230553-60956b60efbe/go.mod h1:8dj4E30eBn4GmAuoOkmGB7qej7YZJj8q+CCjIN/+pgs=
k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/kms v0.0.0-20230210162116-4dbde34ed1c6 h1:9xslyqSMagcgKRC8qpDC0/chyq0jwYDC4FjDEdAHul8=
Expand Down
4 changes: 2 additions & 2 deletions pkg/server/egressselector/egress_selector.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import (
utilnet "k8s.io/apimachinery/pkg/util/net"
"k8s.io/apiserver/pkg/apis/apiserver"
egressmetrics "k8s.io/apiserver/pkg/server/egressselector/metrics"
compbasemetrics "k8s.io/component-base/metrics"
"k8s.io/component-base/metrics/legacyregistry"
"k8s.io/component-base/tracing"
"k8s.io/klog/v2"
client "sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client"
Expand All @@ -45,7 +45,7 @@ import (
var directDialer utilnet.DialFunc = http.DefaultTransport.(*http.Transport).DialContext

func init() {
client.Metrics.RegisterMetrics(compbasemetrics.NewKubeRegistry().Registerer())
client.Metrics.RegisterMetrics(legacyregistry.Registerer())
}

// EgressSelector is the map of network context type to context dialer, for network egress.
Expand Down
69 changes: 69 additions & 0 deletions pkg/server/egressselector/egress_selector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package egressselector

import (
"context"
"errors"
"fmt"
"net"
"strings"
Expand All @@ -31,6 +32,9 @@ import (
"k8s.io/component-base/metrics/legacyregistry"
"k8s.io/component-base/metrics/testutil"
testingclock "k8s.io/utils/clock/testing"
clientmetrics "sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/metrics"
ccmetrics "sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/common/metrics"
"sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client"
)

type fakeEgressSelection struct {
Expand Down Expand Up @@ -272,5 +276,70 @@ func TestMetrics(t *testing.T) {
}
})
}
}

func TestKonnectivityClientMetrics(t *testing.T) {
testcases := []struct {
name string
metrics []string
trigger func()
want string
}{
{
name: "stream packets",
metrics: []string{"konnectivity_network_proxy_client_stream_packets_total"},
trigger: func() {
clientmetrics.Metrics.ObservePacket(ccmetrics.SegmentFromClient, client.PacketType_DIAL_REQ)
},
want: `
# HELP konnectivity_network_proxy_client_stream_packets_total Count of packets processed, by segment and packet type (example: from_client, DIAL_REQ)
# TYPE konnectivity_network_proxy_client_stream_packets_total counter
konnectivity_network_proxy_client_stream_packets_total{packet_type="DIAL_REQ",segment="from_client"} 1
`,
},
{
name: "stream errors",
metrics: []string{"konnectivity_network_proxy_client_stream_errors_total"},
trigger: func() {
clientmetrics.Metrics.ObserveStreamError(ccmetrics.SegmentToClient, errors.New("example"), client.PacketType_DIAL_RSP)
},
want: `
# HELP konnectivity_network_proxy_client_stream_errors_total Count of gRPC stream errors, by segment, grpc Code, packet type. (example: from_agent, Code.Unavailable, DIAL_RSP)
# TYPE konnectivity_network_proxy_client_stream_errors_total counter
konnectivity_network_proxy_client_stream_errors_total{code="Unknown",packet_type="DIAL_RSP",segment="to_client"} 1
`,
},
{
name: "dial failure",
metrics: []string{"konnectivity_network_proxy_client_dial_failure_total"},
trigger: func() {
clientmetrics.Metrics.ObserveDialFailure(clientmetrics.DialFailureTimeout)
},
want: `
# HELP konnectivity_network_proxy_client_dial_failure_total Number of dial failures observed, by reason (example: remote endpoint error)
# TYPE konnectivity_network_proxy_client_dial_failure_total counter
konnectivity_network_proxy_client_dial_failure_total{reason="timeout"} 1
`,
},
{
name: "client connections",
metrics: []string{"konnectivity_network_proxy_client_client_connections"},
trigger: func() {
clientmetrics.Metrics.GetClientConnectionsMetric().WithLabelValues("dialing").Inc()
},
want: `
# HELP konnectivity_network_proxy_client_client_connections Number of open client connections, by status (Example: dialing)
# TYPE konnectivity_network_proxy_client_client_connections gauge
konnectivity_network_proxy_client_client_connections{status="dialing"} 1
`,
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
tc.trigger()
if err := testutil.GatherAndCompare(legacyregistry.DefaultGatherer, strings.NewReader(tc.want), tc.metrics...); err != nil {
t.Errorf("GatherAndCompare error: %v", err)
}
})
}
}

0 comments on commit 6051105

Please sign in to comment.