@@ -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+
10101053func (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