Skip to content

Commit

Permalink
fix(kuma-cp): use stable hashes for outbound cluster names (#8081)
Browse files Browse the repository at this point in the history
Signed-off-by: Mike Beaumont <mjboamail@gmail.com>
  • Loading branch information
michaelbeaumont authored Oct 23, 2023
1 parent 39f99ff commit 7659385
Show file tree
Hide file tree
Showing 38 changed files with 301 additions and 379 deletions.
41 changes: 17 additions & 24 deletions app/kuma-dp/pkg/dataplane/metrics/merge.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@ func MergeClusters(in io.Reader, out io.Writer) error {
func handleClusterMetric(metricFamily *io_prometheus_client.MetricFamily) error {
// metricsByClusterNames returns the data in the following format:
// 'cluster_name' ->
// - metric1{envoy_cluster_name="cluster_name-_0_",label1="value1"} 10
// - metric1{envoy_cluster_name="cluster_name-_1_",label1="value1"} 20
// - metric1{envoy_cluster_name="cluster_name-_2_",label1="value1"} 30
// - metric1{envoy_cluster_name="cluster_name-5fb50345cfb50345",label1="value1"} 10
// - metric1{envoy_cluster_name="cluster_name-cfb50345409aedd1",label1="value1"} 20
// - metric1{envoy_cluster_name="cluster_name-409aedd15fb50345",label1="value1"} 30
// 'another_cluster_name' ->
// - metric1{envoy_cluster_name="another_cluster_name-_0_",response_code="200"} 10
// - metric1{envoy_cluster_name="another_cluster_name-_0_",response_code="401"} 20
// - metric1{envoy_cluster_name="another_cluster_name-_1_",response_code="200"} 30
// - metric1{envoy_cluster_name="another_cluster_name-_2_",response_code="503"} 40
// - metric1{envoy_cluster_name="another_cluster_name-5fb50345cfb50345",response_code="200"} 10
// - metric1{envoy_cluster_name="another_cluster_name-5fb50345cfb50345",response_code="401"} 20
// - metric1{envoy_cluster_name="another_cluster_name-cfb50345409aedd1",response_code="200"} 30
// - metric1{envoy_cluster_name="another_cluster_name-409aedd15fb50345",response_code="503"} 40
metricsByClusterName, err := metricsByClusterNames(metricFamily.Metric)
if err != nil {
return err
Expand Down Expand Up @@ -331,28 +331,21 @@ func getHttpPrefix(metric *io_prometheus_client.Metric) (string, bool) {
return "", false
}

// splitClusterMatch marches cluster names generated by envoy_names.GetSplitClusterName.
var splitClusterMatch = regexp.MustCompile(`(?P<prefix>.*)-_[0-9]+_$`)

// gwClusterMatch marches cluster names generated by DestinationClusterName.
var gwClusterMatch = regexp.MustCompile(`(?P<prefix>.*)-[[:xdigit:]]+$`)
// clusterMatch matches cluster names generated by DestinationClusterName.
var clusterMatch = regexp.MustCompile(`(?P<prefix>.*)-[[:xdigit:]]{16}$`)

// isMergeableClusterName cracks the given cluster name and returns the
// prefix if it is mergeable.
func isMergeableClusterName(clusterName string) (string, bool) {
for _, re := range []*regexp.Regexp{splitClusterMatch, gwClusterMatch} {
matches := re.FindStringSubmatch(clusterName)
if matches == nil {
continue
}

prefixIndex := re.SubexpIndex("prefix")
if prefixIndex == -1 {
continue
}
matches := clusterMatch.FindStringSubmatch(clusterName)
if matches == nil {
return "", false
}

return matches[prefixIndex], true
prefixIndex := clusterMatch.SubexpIndex("prefix")
if prefixIndex == -1 {
return "", false
}

return "", false
return matches[prefixIndex], true
}
3 changes: 1 addition & 2 deletions app/kuma-dp/pkg/dataplane/metrics/merge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
. "github.com/onsi/gomega"

mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
envoy_names "github.com/kumahq/kuma/pkg/xds/envoy/names"
envoy "github.com/kumahq/kuma/pkg/xds/envoy/tags"
)

Expand Down Expand Up @@ -83,7 +82,7 @@ var _ = Describe("Merge", func() {

var _ = Describe("Detect mergable clusters", func() {
It("should crack split cluster names", func() {
clusterName := envoy_names.GetSplitClusterName("foo-service", 99)
clusterName := "foo-service-5bac935803abcdd1"
Expect(clusterName).ToNot(BeEmpty())

name, ok := isMergeableClusterName(clusterName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ envoy_tcp_downstream_cx_rx_bytes_buffered{envoy_tcp_prefix="outbound_passthrough
envoy_cluster_assignment_stale{envoy_cluster_name="access_log_sink"} 11
envoy_cluster_assignment_stale{envoy_cluster_name="ads_cluster"} 12
envoy_cluster_assignment_stale{envoy_cluster_name="demo-client"} 13
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_0_"} 101
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_1_"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_2_"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-369bce2d30623ffb"} 101
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-fe04929f294bcdea"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv4"} 14
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv6"} 15
envoy_cluster_assignment_stale{envoy_cluster_name="kuma_envoy_admin"} 16
Expand All @@ -36,9 +36,9 @@ envoy_cluster_assignment_stale{envoy_cluster_name="outbound_passthrough_ipv6"} 1
envoy_cluster_assignment_timeout_received{envoy_cluster_name="access_log_sink"} 1
envoy_cluster_assignment_timeout_received{envoy_cluster_name="ads_cluster"} 2
envoy_cluster_assignment_timeout_received{envoy_cluster_name="demo-client"} 3
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_0_"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_1_"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_2_"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-369bce2d30623ffb"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-fe04929f294bcdea"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv4"} 4
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv6"} 5
envoy_cluster_assignment_timeout_received{envoy_cluster_name="kuma_envoy_admin"} 6
Expand Down
14 changes: 7 additions & 7 deletions app/kuma-dp/pkg/dataplane/metrics/testdata/counter-sparse.in
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
envoy_cluster_assignment_stale{envoy_cluster_name="access_log_sink"} 11
envoy_cluster_assignment_stale{envoy_cluster_name="ads_cluster"} 12
envoy_cluster_assignment_stale{envoy_cluster_name="demo-client"} 13
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_1_"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_4_"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_7_"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_9_"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-369bce2d30623ffb"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-fe04929f294bcdea"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-94bcdea309bceaff"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv4"} 14
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv6"} 15
envoy_cluster_assignment_stale{envoy_cluster_name="kuma_envoy_admin"} 16
Expand All @@ -17,9 +17,9 @@ envoy_cluster_assignment_stale{envoy_cluster_name="outbound_passthrough_ipv6"} 1
envoy_cluster_assignment_timeout_received{envoy_cluster_name="access_log_sink"} 1
envoy_cluster_assignment_timeout_received{envoy_cluster_name="ads_cluster"} 2
envoy_cluster_assignment_timeout_received{envoy_cluster_name="demo-client"} 3
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_10_"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_11_"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_20_"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-94bcdea309bceaff"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-fe04929f294bcdea"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv4"} 4
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv6"} 5
envoy_cluster_assignment_timeout_received{envoy_cluster_name="kuma_envoy_admin"} 6
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# TYPE envoy_cluster_external_upstream_rq counter
envoy_cluster_external_upstream_rq{envoy_response_code="200",envoy_cluster_name="backend_kuma-demo_svc_3001-_0_"} 14
envoy_cluster_external_upstream_rq{envoy_response_code="404",envoy_cluster_name="backend_kuma-demo_svc_3001-_0_"} 2
envoy_cluster_external_upstream_rq{envoy_response_code="200",envoy_cluster_name="backend_kuma-demo_svc_3001-_1_"} 24
envoy_cluster_external_upstream_rq{envoy_response_code="404",envoy_cluster_name="backend_kuma-demo_svc_3001-_1_"} 12
envoy_cluster_external_upstream_rq{envoy_response_code="200",envoy_cluster_name="backend_kuma-demo_svc_3001-0382aaf295add2eb"} 14
envoy_cluster_external_upstream_rq{envoy_response_code="404",envoy_cluster_name="backend_kuma-demo_svc_3001-0382aaf295add2eb"} 2
envoy_cluster_external_upstream_rq{envoy_response_code="200",envoy_cluster_name="backend_kuma-demo_svc_3001-fe04929f294bcdea"} 24
envoy_cluster_external_upstream_rq{envoy_response_code="404",envoy_cluster_name="backend_kuma-demo_svc_3001-fe04929f294bcdea"} 12
envoy_cluster_external_upstream_rq{envoy_response_code="200",envoy_cluster_name="kuma_envoy_admin"} 255
44 changes: 22 additions & 22 deletions app/kuma-dp/pkg/dataplane/metrics/testdata/counter-with-labels.in
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
envoy_cluster_assignment_stale{envoy_cluster_name="access_log_sink",custom_label="value1"} 11
envoy_cluster_assignment_stale{envoy_cluster_name="ads_cluster",custom_label="value1"} 12
envoy_cluster_assignment_stale{envoy_cluster_name="demo-client",custom_label="value1"} 13
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_0_",custom_label="value1"} 101
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_1_",custom_label="value1"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_2_",custom_label="value1"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb",custom_label="value1"} 101
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-369bce2d30623ffb",custom_label="value1"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-94bcdea309bceaff",custom_label="value1"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv4",custom_label="value1"} 14
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv6",custom_label="value1"} 15
envoy_cluster_assignment_stale{envoy_cluster_name="kuma_envoy_admin",custom_label="value1"} 16
Expand All @@ -16,9 +16,9 @@ envoy_cluster_assignment_stale{envoy_cluster_name="outbound_passthrough_ipv6",cu
envoy_cluster_assignment_timeout_received{envoy_cluster_name="access_log_sink",custom_label="value2"} 1
envoy_cluster_assignment_timeout_received{envoy_cluster_name="ads_cluster",custom_label="value2"} 2
envoy_cluster_assignment_timeout_received{envoy_cluster_name="demo-client",custom_label="value2"} 3
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_0_",custom_label="value2"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_1_",custom_label="value2"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_2_",custom_label="value2"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb",custom_label="value2"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-369bce2d30623ffb",custom_label="value2"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-94bcdea309bceaff",custom_label="value2"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv4",custom_label="value2"} 4
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv6",custom_label="value2"} 5
envoy_cluster_assignment_timeout_received{envoy_cluster_name="kuma_envoy_admin",custom_label="value2"} 6
Expand All @@ -27,21 +27,21 @@ envoy_cluster_assignment_timeout_received{envoy_cluster_name="outbound_passthrou
envoy_cluster_assignment_timeout_received{envoy_cluster_name="outbound_passthrough_ipv6",custom_label="value2"} 9

# TYPE response_codes counter
response_codes{response_code="200",envoy_cluster_name="backend-_0_"} 1
response_codes{response_code="404",envoy_cluster_name="backend-_0_"} 2
response_codes{response_code="500",envoy_cluster_name="backend-_0_"} 3
response_codes{response_code="503",envoy_cluster_name="backend-_0_"} 4
response_codes{response_code="200",envoy_cluster_name="backend-_1_"} 10
response_codes{response_code="404",envoy_cluster_name="backend-_1_"} 20
response_codes{response_code="500",envoy_cluster_name="backend-_1_"} 30
response_codes{response_code="401",envoy_cluster_name="backend-_1_"} 40
response_codes{response_code="200",envoy_cluster_name="frontend-_1_"} 300
response_codes{response_code="401",envoy_cluster_name="frontend-_2_"} 400
response_codes{response_code="200",envoy_cluster_name="backend-fe04929f294bcdea"} 1
response_codes{response_code="404",envoy_cluster_name="backend-fe04929f294bcdea"} 2
response_codes{response_code="500",envoy_cluster_name="backend-fe04929f294bcdea"} 3
response_codes{response_code="503",envoy_cluster_name="backend-fe04929f294bcdea"} 4
response_codes{response_code="200",envoy_cluster_name="backend-0382aaf295add2eb"} 10
response_codes{response_code="404",envoy_cluster_name="backend-0382aaf295add2eb"} 20
response_codes{response_code="500",envoy_cluster_name="backend-0382aaf295add2eb"} 30
response_codes{response_code="401",envoy_cluster_name="backend-0382aaf295add2eb"} 40
response_codes{response_code="200",envoy_cluster_name="frontend-0382aaf295add2eb"} 300
response_codes{response_code="401",envoy_cluster_name="frontend-0382aaf295add2eb"} 400

# TYPE several_labels counter
several_labels{envoy_cluster_name="backend-_0_",l1="v11",l2="v12",l3="v13"} 1
several_labels{envoy_cluster_name="backend-_0_",l1="v21",l2="v22",l3="v23"} 2
several_labels{envoy_cluster_name="backend-_0_",l1="v31",l2="v32",l3="v33"} 3
several_labels{envoy_cluster_name="backend-_1_",l1="v11",l2="v12",l3="v13"} 10
several_labels{envoy_cluster_name="backend-_1_",l1="v21",l2="v22",l3="v23"} 20
several_labels{envoy_cluster_name="backend-_1_",l1="v31",l2="v32",l3="v33"} 30
several_labels{envoy_cluster_name="backend-fe04929f294bcdea",l1="v11",l2="v12",l3="v13"} 1
several_labels{envoy_cluster_name="backend-fe04929f294bcdea",l1="v21",l2="v22",l3="v23"} 2
several_labels{envoy_cluster_name="backend-fe04929f294bcdea",l1="v31",l2="v32",l3="v33"} 3
several_labels{envoy_cluster_name="backend-0382aaf295add2eb",l1="v11",l2="v12",l3="v13"} 10
several_labels{envoy_cluster_name="backend-0382aaf295add2eb",l1="v21",l2="v22",l3="v23"} 20
several_labels{envoy_cluster_name="backend-0382aaf295add2eb",l1="v31",l2="v32",l3="v33"} 30
12 changes: 6 additions & 6 deletions app/kuma-dp/pkg/dataplane/metrics/testdata/counter.in
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
envoy_cluster_assignment_stale{envoy_cluster_name="access_log_sink"} 11
envoy_cluster_assignment_stale{envoy_cluster_name="ads_cluster"} 12
envoy_cluster_assignment_stale{envoy_cluster_name="demo-client"} 13
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_0_"} 101
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_1_"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-_2_"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-94bcdea309bceaff"} 101
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb"} 102
envoy_cluster_assignment_stale{envoy_cluster_name="echo-server_kuma-test_svc_8080-fe04929f294bcdea"} 103
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv4"} 14
envoy_cluster_assignment_stale{envoy_cluster_name="inbound_passthrough_ipv6"} 15
envoy_cluster_assignment_stale{envoy_cluster_name="kuma_envoy_admin"} 16
Expand All @@ -19,9 +19,9 @@ envoy_http_downstream_rq_total{envoy_http_conn_manager_prefix="default_gateway"}
envoy_cluster_assignment_timeout_received{envoy_cluster_name="access_log_sink"} 1
envoy_cluster_assignment_timeout_received{envoy_cluster_name="ads_cluster"} 2
envoy_cluster_assignment_timeout_received{envoy_cluster_name="demo-client"} 3
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_0_"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_1_"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-_2_"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-94bcdea309bceaff"} 201
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-0382aaf295add2eb"} 202
envoy_cluster_assignment_timeout_received{envoy_cluster_name="echo-server_kuma-test_svc_8080-fe04929f294bcdea"} 203
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv4"} 4
envoy_cluster_assignment_timeout_received{envoy_cluster_name="inbound_passthrough_ipv6"} 5
envoy_cluster_assignment_timeout_received{envoy_cluster_name="kuma_envoy_admin"} 6
Expand Down
Loading

0 comments on commit 7659385

Please sign in to comment.