Skip to content

Commit 931e58b

Browse files
author
Miguel Lavalle
committed
Add OVS database server metrics collection support
This change adds support for collecting metrics from OVS database servers (ovsdbserver) in both northbound (NB) and southbound (SB) configurations. The implementation adds two new scrape configuration functions that discover OVS DB server metrics services using label selectors and automatically configure Prometheus to scrape them. Changes include: - New createOVSDBServerNBScrapeConfig() function for NB database metrics - New createOVSDBServerSBScrapeConfig() function for SB database metrics - Updated service watch function to trigger reconciliation when OVS DB server services change - Both functions follow existing patterns and use "ovsdbserver-nb" and "ovsdbserver-sb" service labels respectively This enables comprehensive monitoring of the OVN database layer, complementing the existing OVN Northd and Controller metrics collection. Depends-On: openstack-k8s-operators/openstack-operator#1609 Resolves: https://issues.redhat.com/browse/OSPRH-12569 Assisted-by: Claude Signed-off-by: Miguel Lavalle <[email protected]>
1 parent 18c08ce commit 931e58b

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

controllers/metricstorage_controller.go

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,18 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
873873
return ctrl.Result{}, err
874874
}
875875

876+
// ScrapeConfig for OVS DB Server NB metrics
877+
err = r.createOVSDBServerNBScrapeConfig(ctx, instance, helper, serviceLabels)
878+
if err != nil {
879+
return ctrl.Result{}, err
880+
}
881+
882+
// ScrapeConfig for OVS DB Server SB metrics
883+
err = r.createOVSDBServerSBScrapeConfig(ctx, instance, helper, serviceLabels)
884+
if err != nil {
885+
return ctrl.Result{}, err
886+
}
887+
876888
instance.Status.Conditions.MarkTrue(telemetryv1.ScrapeConfigReadyCondition, condition.ReadyMessage)
877889
return ctrl.Result{}, nil
878890
}
@@ -1049,6 +1061,44 @@ func (r *MetricStorageReconciler) createOVNControllerScrapeConfig(
10491061
)
10501062
}
10511063

1064+
// createOVSDBServerNBScrapeConfig creates a scrape configuration for OVS DB Server NB metrics
1065+
// This function discovers OVS DB Server NB metrics services using label selectors
1066+
func (r *MetricStorageReconciler) createOVSDBServerNBScrapeConfig(
1067+
ctx context.Context,
1068+
instance *telemetryv1.MetricStorage,
1069+
helper *helper.Helper,
1070+
serviceLabels map[string]string,
1071+
) error {
1072+
labelSelector := map[string]string{
1073+
"metrics": "enabled",
1074+
"service": "ovsdbserver-nb",
1075+
}
1076+
ovsdbServerNBCfgName := fmt.Sprintf("%s-ovsdbserver-nb", telemetry.ServiceName)
1077+
return r.createServiceScrapeConfigFromLabelSelector(
1078+
ctx, instance, helper, serviceLabels,
1079+
labelSelector, "metrics", ovsdbServerNBCfgName, "OVS DB server NB",
1080+
)
1081+
}
1082+
1083+
// createOVSDBServerSBScrapeConfig creates a scrape configuration for OVS DB Server SB metrics
1084+
// This function discovers OVS DB Server SB metrics services using label selectors
1085+
func (r *MetricStorageReconciler) createOVSDBServerSBScrapeConfig(
1086+
ctx context.Context,
1087+
instance *telemetryv1.MetricStorage,
1088+
helper *helper.Helper,
1089+
serviceLabels map[string]string,
1090+
) error {
1091+
labelSelector := map[string]string{
1092+
"metrics": "enabled",
1093+
"service": "ovsdbserver-sb",
1094+
}
1095+
ovsdbServerSBCfgName := fmt.Sprintf("%s-ovsdbserver-sb", telemetry.ServiceName)
1096+
return r.createServiceScrapeConfigFromLabelSelector(
1097+
ctx, instance, helper, serviceLabels,
1098+
labelSelector, "metrics", ovsdbServerSBCfgName, "OVS DB server SB",
1099+
)
1100+
}
1101+
10521102
func (r *MetricStorageReconciler) createDashboardObjects(ctx context.Context, instance *telemetryv1.MetricStorage, helper *helper.Helper, eventHandler handler.EventHandler) (ctrl.Result, error) {
10531103
Log := r.GetLogger(ctx)
10541104
uiPluginObj := &obsui.UIPlugin{
@@ -1465,7 +1515,7 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
14651515

14661516
// Watch OVN metrics services
14671517
if labels := o.GetLabels(); labels != nil {
1468-
if labels["metrics"] == "enabled" && (labels["service"] == "ovn-northd" || labels["service"] == "ovn-controller-metrics") {
1518+
if labels["metrics"] == "enabled" && (labels["service"] == "ovn-northd" || labels["service"] == "ovn-controller-metrics" || labels["service"] == "ovsdbserver-nb" || labels["service"] == "ovsdbserver-sb") {
14691519
// get all metricstorage CRs in the same namespace
14701520
metricStorages := &telemetryv1.MetricStorageList{}
14711521
listOpts := []client.ListOption{

0 commit comments

Comments
 (0)