diff --git a/.gitignore b/.gitignore index ec7ead32..e0bfaac4 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ examples/cloud-operations/adfs/ansible/vars/vars.yaml examples/cloud-operations/adfs/ansible/gssh.sh examples/cloud-operations/multi-cluster-mesh-gke-fleet-api/ansible/vars.yaml examples/cloud-operations/multi-cluster-mesh-gke-fleet-api/ansible/gssh.sh +blueprints/cloud-operations/network-dashboard/cloud-function.zip diff --git a/blueprints/cloud-operations/network-dashboard/cloud-function/metrics.yaml b/blueprints/cloud-operations/network-dashboard/cloud-function/metrics.yaml index bc6177bc..0c5bb8cc 100644 --- a/blueprints/cloud-operations/network-dashboard/cloud-function/metrics.yaml +++ b/blueprints/cloud-operations/network-dashboard/cloud-function/metrics.yaml @@ -99,7 +99,8 @@ metrics_per_network: utilization: name: dynamic_routes_per_network_utilization description: Number of Dynamic routes per network - utilization. - static_routes_per_network: + #static routes limit is per project, but usage is per network + static_routes_per_project: usage: name: static_routes_per_project_vpc_usage description: Number of Static routes per project and network - usage. diff --git a/blueprints/cloud-operations/network-dashboard/cloud-function/metrics/routes.py b/blueprints/cloud-operations/network-dashboard/cloud-function/metrics/routes.py index cfc6f7fc..6aa3627e 100644 --- a/blueprints/cloud-operations/network-dashboard/cloud-function/metrics/routes.py +++ b/blueprints/cloud-operations/network-dashboard/cloud-function/metrics/routes.py @@ -267,7 +267,7 @@ def get_static_routes_data(config, metrics_dict, static_routes_dict, metric_labels = {"project": project_id, "network_name": network_name} metrics.append_data_to_series_buffer( - config, metrics_dict["metrics_per_network"]["static_routes_per_network"] + config, metrics_dict["metrics_per_network"]["static_routes_per_project"] ["usage"]["name"], static_routes_dict[network_link], metric_labels, timestamp=timestamp) @@ -283,11 +283,11 @@ def get_static_routes_data(config, metrics_dict, static_routes_dict, # limit and utilization are calculted by project metric_labels = {"project": project_id} metrics.append_data_to_series_buffer( - config, metrics_dict["metrics_per_network"]["static_routes_per_network"] + config, metrics_dict["metrics_per_network"]["static_routes_per_project"] ["limit"]["name"], current_quota_limit, metric_labels, timestamp=timestamp) metrics.append_data_to_series_buffer( - config, metrics_dict["metrics_per_network"]["static_routes_per_network"] + config, metrics_dict["metrics_per_network"]["static_routes_per_project"] ["utilization"]["name"], project_usage[project_id] / current_quota_limit, metric_labels, timestamp=timestamp) diff --git a/blueprints/cloud-operations/network-dashboard/dashboards/quotas-utilization.json b/blueprints/cloud-operations/network-dashboard/dashboards/quotas-utilization.json index 0e71bb7f..58958863 100644 --- a/blueprints/cloud-operations/network-dashboard/dashboards/quotas-utilization.json +++ b/blueprints/cloud-operations/network-dashboard/dashboards/quotas-utilization.json @@ -1,6 +1,6 @@ { "category": "CUSTOM", - "displayName": "quotas_utilization_updated", + "displayName": "quotas_utilization", "mosaicLayout": { "columns": 12, "tiles": [ @@ -22,13 +22,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/internal_forwarding_rules_l4_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "1800s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" } } @@ -64,13 +62,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/internal_forwarding_rules_l7_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" } } @@ -106,13 +102,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/number_of_instances_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" } } @@ -148,13 +142,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/number_of_vpc_peerings_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" } } @@ -190,13 +182,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/number_of_active_vpc_peerings_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_INTERPOLATE" } } @@ -232,13 +222,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/number_of_subnet_IP_ranges_ppg_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" } } @@ -274,13 +262,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/internal_forwarding_rules_l4_ppg_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" } } @@ -316,13 +302,11 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/internal_forwarding_rules_l7_ppg_utilization\" resource.type=\"global\"", "secondaryAggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" } } @@ -358,7 +342,6 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "3600s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_NEXT_OLDER" }, "filter": "metric.type=\"custom.googleapis.com/number_of_instances_ppg_utilization\" resource.type=\"global\"" @@ -395,7 +378,6 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" }, "filter": "metric.type=\"custom.googleapis.com/dynamic_routes_per_network_utilization\" resource.type=\"global\"" @@ -452,7 +434,7 @@ }, "width": 6, "xPos": 0, - "yPos": 24 + "yPos": 32 }, { "height": 4, @@ -492,7 +474,7 @@ }, "width": 6, "xPos": 6, - "yPos": 24 + "yPos": 32 }, { "height": 4, @@ -512,7 +494,6 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" }, "filter": "metric.type=\"custom.googleapis.com/firewall_policy_tuples_per_policy_utilization\" resource.type=\"global\"" @@ -528,7 +509,7 @@ } }, "width": 6, - "xPos": 0, + "xPos": 6, "yPos": 28 }, { @@ -549,7 +530,6 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" }, "filter": "metric.type=\"custom.googleapis.com/ip_addresses_per_subnet_utilization\" resource.type=\"global\"" @@ -586,7 +566,6 @@ "timeSeriesFilter": { "aggregation": { "alignmentPeriod": "60s", - "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_MEAN" }, "filter": "metric.type=\"custom.googleapis.com/dynamic_routes_per_peering_group_utilization\" resource.type=\"global\"" @@ -604,6 +583,125 @@ "width": 6, "xPos": 6, "yPos": 20 + }, + { + "height": 4, + "widget": { + "title": "static_routes_per_project_vpc_usage", + "xyChart": { + "chartOptions": { + "mode": "COLOR" + }, + "dataSets": [ + { + "minAlignmentPeriod": "60s", + "plotType": "STACKED_BAR", + "targetAxis": "Y1", + "timeSeriesQuery": { + "apiSource": "DEFAULT_CLOUD", + "timeSeriesFilter": { + "aggregation": { + "alignmentPeriod": "60s", + "perSeriesAligner": "ALIGN_MEAN" + }, + "filter": "metric.type=\"custom.googleapis.com/static_routes_per_project_vpc_usage\" resource.type=\"global\"" + } + } + } + ], + "thresholds": [], + "timeshiftDuration": "0s", + "yAxis": { + "label": "y1Axis", + "scale": "LINEAR" + } + } + }, + "width": 6, + "xPos": 0, + "yPos": 24 + }, + { + "height": 4, + "widget": { + "title": "static_routes_per_ppg_utilization", + "xyChart": { + "chartOptions": { + "mode": "COLOR" + }, + "dataSets": [ + { + "minAlignmentPeriod": "60s", + "plotType": "STACKED_BAR", + "targetAxis": "Y1", + "timeSeriesQuery": { + "apiSource": "DEFAULT_CLOUD", + "timeSeriesFilter": { + "aggregation": { + "alignmentPeriod": "60s", + "perSeriesAligner": "ALIGN_MEAN" + }, + "filter": "metric.type=\"custom.googleapis.com/static_routes_per_peering_group_utilization\" resource.type=\"global\"", + "secondaryAggregation": { + "alignmentPeriod": "60s", + "perSeriesAligner": "ALIGN_NONE" + } + } + } + } + ], + "thresholds": [], + "timeshiftDuration": "0s", + "yAxis": { + "label": "y1Axis", + "scale": "LINEAR" + } + } + }, + "width": 6, + "xPos": 0, + "yPos": 28 + }, + { + "height": 4, + "widget": { + "title": "static_routes_per_project_utilization", + "xyChart": { + "chartOptions": { + "mode": "COLOR" + }, + "dataSets": [ + { + "minAlignmentPeriod": "60s", + "plotType": "LINE", + "targetAxis": "Y1", + "timeSeriesQuery": { + "apiSource": "DEFAULT_CLOUD", + "timeSeriesFilter": { + "aggregation": { + "alignmentPeriod": "60s", + "perSeriesAligner": "ALIGN_MEAN" + }, + "filter": "metric.type=\"custom.googleapis.com/static_routes_per_project_utilization\" resource.type=\"global\"", + "secondaryAggregation": { + "alignmentPeriod": "60s", + "perSeriesAligner": "ALIGN_NONE" + } + } + } + } + ], + "thresholds": [], + "timeshiftDuration": "0s", + "yAxis": { + "label": "y1Axis", + "scale": "LINEAR" + } + } + }, + "width": 6, + "xPos": 6, + "yPos": 24 } ] }