Skip to content

Commit 3c8e5e6

Browse files
Merge pull request #750 from karelyatin/OSPRH-12563
Add OVN Controller metric scrape config
2 parents 34a9f04 + 8a8a59d commit 3c8e5e6

File tree

1 file changed

+66
-23
lines changed

1 file changed

+66
-23
lines changed

controllers/metricstorage_controller.go

Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,12 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
868868
return ctrl.Result{}, err
869869
}
870870

871+
// ScrapeConfig for OVN Controller metrics
872+
err = r.createOVNControllerScrapeConfig(ctx, instance, helper, serviceLabels)
873+
if err != nil {
874+
return ctrl.Result{}, err
875+
}
876+
871877
instance.Status.Conditions.MarkTrue(telemetryv1.ScrapeConfigReadyCondition, condition.ReadyMessage)
872878
return ctrl.Result{}, nil
873879
}
@@ -941,72 +947,109 @@ func (r *MetricStorageReconciler) createComputeScrapeConfig(
941947
return nil
942948
}
943949

944-
func (r *MetricStorageReconciler) createOVNNorthdScrapeConfig(
950+
func (r *MetricStorageReconciler) createServiceScrapeConfigFromLabelSelector(
945951
ctx context.Context,
946952
instance *telemetryv1.MetricStorage,
947953
helper *helper.Helper,
948954
serviceLabels map[string]string,
955+
labelSelector map[string]string,
956+
portName string,
957+
scrapeConfigName string,
958+
description string,
949959
) error {
950960
Log := r.GetLogger(ctx)
951961

952-
// Discover OVN Northd metrics services using label selectors
953-
// This matches the labels set in controllers/ovnnorthd_controller.go:647-649
962+
// Discover metrics services using label selectors
954963
serviceList := &corev1.ServiceList{}
955964
listOpts := []client.ListOption{
956965
client.InNamespace(instance.Namespace),
957-
client.MatchingLabels{
958-
"type": "metrics",
959-
"service": "ovn-northd",
960-
},
966+
client.MatchingLabels(labelSelector),
961967
}
962968
err := helper.GetClient().List(ctx, serviceList, listOpts...)
963969
if err != nil {
964-
Log.Info(fmt.Sprintf("Cannot get OVN Northd metrics services. Scrape configs not created. Error: %s", err))
970+
Log.Info(fmt.Sprintf("Cannot get %s metrics services. Scrape configs not created. Error: %s", description, err))
965971
return nil
966972
}
967973

968974
if len(serviceList.Items) == 0 {
969-
Log.Info("No OVN Northd metrics services found")
975+
Log.Info(fmt.Sprintf("No %s metrics services found", description))
970976
return nil
971977
}
972978

973979
// Create targets from discovered services
974-
var ovnNorthdTargets []string
980+
var targets []string
975981
for _, svc := range serviceList.Items {
976-
// Find the metrics port (should be named "metrics" with port 1981)
982+
// Find the specified port
977983
for _, port := range svc.Spec.Ports {
978-
if port.Name == "metrics" {
984+
if port.Name == portName {
979985
serviceRoute := fmt.Sprintf("%s.%s.svc", svc.Name, svc.Namespace)
980986
target := net.JoinHostPort(serviceRoute, strconv.Itoa(int(port.Port)))
981-
ovnNorthdTargets = append(ovnNorthdTargets, target)
982-
Log.Info(fmt.Sprintf("Found OVN Northd metrics service: %s", target))
987+
targets = append(targets, target)
988+
Log.Info(fmt.Sprintf("Found %s metrics service: %s", description, target))
983989
break
984990
}
985991
}
986992
}
987993

988-
if len(ovnNorthdTargets) == 0 {
989-
Log.Info("No valid OVN Northd metrics targets found")
994+
if len(targets) == 0 {
995+
Log.Info(fmt.Sprintf("No valid %s metrics targets found", description))
990996
return nil
991997
}
992998

993-
// Create scrape config for OVN Northd metrics
994-
ovnNorthdCfgName := fmt.Sprintf("%s-ovn-northd", telemetry.ServiceName)
999+
// Create scrape config for metrics
9951000
desiredScrapeConfig := metricstorage.ScrapeConfig(
9961001
instance,
9971002
serviceLabels,
998-
ovnNorthdTargets,
1003+
targets,
9991004
instance.Spec.PrometheusTLS.Enabled(),
10001005
)
1001-
err = r.createServiceScrapeConfig(ctx, instance, Log, "OVN Northd",
1002-
ovnNorthdCfgName, desiredScrapeConfig)
1006+
err = r.createServiceScrapeConfig(ctx, instance, Log, description,
1007+
scrapeConfigName, desiredScrapeConfig)
10031008
if err != nil {
10041009
return err
10051010
}
10061011

10071012
return nil
10081013
}
10091014

1015+
// createOVNNorthdScrapeConfig creates a scrape configuration for OVN Northd metrics
1016+
// This function discovers OVN Northd metrics services using label selectors
1017+
func (r *MetricStorageReconciler) createOVNNorthdScrapeConfig(
1018+
ctx context.Context,
1019+
instance *telemetryv1.MetricStorage,
1020+
helper *helper.Helper,
1021+
serviceLabels map[string]string,
1022+
) error {
1023+
labelSelector := map[string]string{
1024+
"type": "metrics",
1025+
"service": "ovn-northd",
1026+
}
1027+
ovnNorthdCfgName := fmt.Sprintf("%s-ovn-northd", telemetry.ServiceName)
1028+
return r.createServiceScrapeConfigFromLabelSelector(
1029+
ctx, instance, helper, serviceLabels,
1030+
labelSelector, "metrics", ovnNorthdCfgName, "OVN Northd",
1031+
)
1032+
}
1033+
1034+
// createOVNControllerScrapeConfig creates a scrape configuration for OVN Controller metrics
1035+
// This function discovers OVN Controller metrics services using label selectors
1036+
func (r *MetricStorageReconciler) createOVNControllerScrapeConfig(
1037+
ctx context.Context,
1038+
instance *telemetryv1.MetricStorage,
1039+
helper *helper.Helper,
1040+
serviceLabels map[string]string,
1041+
) error {
1042+
labelSelector := map[string]string{
1043+
"type": "metrics",
1044+
"service": "ovn-controller-metrics",
1045+
}
1046+
ovnControllerCfgName := fmt.Sprintf("%s-ovn-controller", telemetry.ServiceName)
1047+
return r.createServiceScrapeConfigFromLabelSelector(
1048+
ctx, instance, helper, serviceLabels,
1049+
labelSelector, "metrics", ovnControllerCfgName, "OVN Controller",
1050+
)
1051+
}
1052+
10101053
func (r *MetricStorageReconciler) createDashboardObjects(ctx context.Context, instance *telemetryv1.MetricStorage, helper *helper.Helper, eventHandler handler.EventHandler) (ctrl.Result, error) {
10111054
Log := r.GetLogger(ctx)
10121055
uiPluginObj := &obsui.UIPlugin{
@@ -1423,9 +1466,9 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
14231466
ovnMetricsServiceWatchFn := func(_ context.Context, o client.Object) []reconcile.Request {
14241467
result := []reconcile.Request{}
14251468

1426-
// Only watch OVN northd metrics services
1469+
// Watch OVN metrics services
14271470
if labels := o.GetLabels(); labels != nil {
1428-
if labels["type"] == "metrics" && labels["service"] == "ovn-northd" {
1471+
if labels["type"] == "metrics" && (labels["service"] == "ovn-northd" || labels["service"] == "ovn-controller-metrics") {
14291472
// get all metricstorage CRs in the same namespace
14301473
metricStorages := &telemetryv1.MetricStorageList{}
14311474
listOpts := []client.ListOption{

0 commit comments

Comments
 (0)