@@ -62,6 +62,7 @@ import (
6262 "github.com/openstack-k8s-operators/telemetry-operator/pkg/dashboards"
6363 metricstorage "github.com/openstack-k8s-operators/telemetry-operator/pkg/metricstorage"
6464 telemetry "github.com/openstack-k8s-operators/telemetry-operator/pkg/telemetry"
65+ utils "github.com/openstack-k8s-operators/telemetry-operator/pkg/utils"
6566 rabbitmqv1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
6667 monv1 "github.com/rhobs/obo-prometheus-operator/pkg/apis/monitoring/v1"
6768 monv1alpha1 "github.com/rhobs/obo-prometheus-operator/pkg/apis/monitoring/v1alpha1"
@@ -514,8 +515,7 @@ func (r *MetricStorageReconciler) createServiceScrapeConfig(
514515 log logr.Logger ,
515516 description string ,
516517 serviceName string ,
517- targets interface {},
518- tlsEnabled bool ,
518+ desiredScrapeConfig * monv1alpha1.ScrapeConfig ,
519519) error {
520520 scrapeConfig := & monv1alpha1.ScrapeConfig {
521521 ObjectMeta : metav1.ObjectMeta {
@@ -524,10 +524,6 @@ func (r *MetricStorageReconciler) createServiceScrapeConfig(
524524 },
525525 }
526526 op , err := controllerutil .CreateOrPatch (ctx , r .Client , scrapeConfig , func () error {
527- desiredScrapeConfig := metricstorage .ScrapeConfig (instance ,
528- serviceLabels ,
529- targets ,
530- tlsEnabled )
531527 desiredScrapeConfig .Spec .DeepCopyInto (& scrapeConfig .Spec )
532528 scrapeConfig .ObjectMeta .Labels = desiredScrapeConfig .ObjectMeta .Labels
533529 err := controllerutil .SetControllerReference (instance , scrapeConfig , r .Scheme )
@@ -561,8 +557,14 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
561557 ceilometerRoute := fmt .Sprintf ("%s-internal.%s.svc" , ceilometer .ServiceName , instance .Namespace )
562558 ceilometerTarget := []string {fmt .Sprintf ("%s:%d" , ceilometerRoute , ceilometer .CeilometerPrometheusPort )}
563559 ceilometerCfgName := fmt .Sprintf ("%s-ceilometer" , telemetry .ServiceName )
560+ desiredScrapeConfig := metricstorage .ScrapeConfig (
561+ instance ,
562+ serviceLabels ,
563+ ceilometerTarget ,
564+ instance .Spec .PrometheusTLS .Enabled (),
565+ )
564566 err = r .createServiceScrapeConfig (ctx , instance , Log , "Ceilometer" ,
565- ceilometerCfgName , ceilometerTarget , instance . Spec . PrometheusTLS . Enabled () )
567+ ceilometerCfgName , desiredScrapeConfig )
566568 if err != nil {
567569 return ctrl.Result {}, err
568570 }
@@ -571,8 +573,14 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
571573 ksmRoute := fmt .Sprintf ("%s.%s.svc" , availability .KSMServiceName , instance .Namespace )
572574 ksmTarget := []string {fmt .Sprintf ("%s:%d" , ksmRoute , availability .KSMMetricsPort )}
573575 ksmCfgName := fmt .Sprintf ("%s-ksm" , telemetry .ServiceName )
576+ desiredScrapeConfig = metricstorage .ScrapeConfig (
577+ instance ,
578+ serviceLabels ,
579+ ksmTarget ,
580+ instance .Spec .PrometheusTLS .Enabled (),
581+ )
574582 err = r .createServiceScrapeConfig (ctx , instance , Log , "kube-state-metrics" ,
575- ksmCfgName , ksmTarget , instance . Spec . PrometheusTLS . Enabled () )
583+ ksmCfgName , desiredScrapeConfig )
576584 if err != nil {
577585 return ctrl.Result {}, err
578586 }
@@ -595,8 +603,14 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
595603 rabbitTargets = append (rabbitTargets , fmt .Sprintf ("%s:%d" , rabbitServerName , metricstorage .RabbitMQPrometheusPort ))
596604 }
597605 rabbitCfgName := fmt .Sprintf ("%s-rabbitmq" , telemetry .ServiceName )
606+ desiredScrapeConfig = metricstorage .ScrapeConfig (
607+ instance ,
608+ serviceLabels ,
609+ rabbitTargets ,
610+ instance .Spec .PrometheusTLS .Enabled (),
611+ )
598612 err = r .createServiceScrapeConfig (ctx , instance , Log , "RabbitMQ" ,
599- rabbitCfgName , rabbitTargets , instance . Spec . PrometheusTLS . Enabled () )
613+ rabbitCfgName , desiredScrapeConfig )
600614 if err != nil {
601615 return ctrl.Result {}, err
602616 }
@@ -610,16 +624,28 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
610624 neTargetsTLS , neTargetsNonTLS := getNodeExporterTargets (connectionInfo )
611625 // ScrapeConfig for non-tls nodes
612626 neServiceName := fmt .Sprintf ("%s-node-exporter" , telemetry .ServiceName )
627+ desiredScrapeConfig = metricstorage .ScrapeConfig (
628+ instance ,
629+ serviceLabels ,
630+ neTargetsNonTLS ,
631+ false ,
632+ )
613633 err = r .createServiceScrapeConfig (ctx , instance , Log , "Node Exporter" ,
614- neServiceName , neTargetsNonTLS , false )
634+ neServiceName , desiredScrapeConfig )
615635 if err != nil {
616636 return ctrl.Result {}, err
617637 }
618638
619639 // ScrapeConfig for tls nodes
620640 neServiceName = fmt .Sprintf ("%s-node-exporter-tls" , telemetry .ServiceName )
641+ desiredScrapeConfig = metricstorage .ScrapeConfig (
642+ instance ,
643+ serviceLabels ,
644+ neTargetsTLS ,
645+ true ,
646+ )
621647 err = r .createServiceScrapeConfig (ctx , instance , Log , "Node Exporter" ,
622- neServiceName , neTargetsTLS , true )
648+ neServiceName , desiredScrapeConfig )
623649 if err != nil {
624650 return ctrl.Result {}, err
625651 }
@@ -639,11 +665,64 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
639665 if len (keplerEndpoints ) > 0 {
640666 // Kepler ScrapeConfig for non-tls nodes
641667 keplerServiceName := fmt .Sprintf ("%s-kepler" , telemetry .ServiceName )
668+ desiredScrapeConfig = metricstorage .ScrapeConfig (
669+ instance ,
670+ serviceLabels ,
671+ keplerEndpoints ,
672+ false ,
673+ )
642674 err = r .createServiceScrapeConfig (ctx , instance , Log , "Kepler" ,
643- keplerServiceName , keplerEndpoints , false ) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
675+ keplerServiceName , desiredScrapeConfig ) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
676+ if err != nil {
677+ return ctrl.Result {}, err
678+ }
679+ }
680+
681+ // mysqld exporter
682+ ceilometerNamespacedName := types.NamespacedName {
683+ Name : ceilometer .ServiceName ,
684+ Namespace : instance .Namespace ,
685+ }
686+ ceilometerInstance := & telemetryv1.Ceilometer {}
687+
688+ err = r .Client .Get (ctx , ceilometerNamespacedName , ceilometerInstance )
689+ if err != nil && ! k8s_errors .IsNotFound (err ) {
690+ Log .Info (fmt .Sprintf ("Cannot get ceilometer. Scrape configs not created. Error: %s" , err ))
691+ }
692+
693+ mysqldExporterCfgName := fmt .Sprintf ("%s-mysqld-exporter" , telemetry .ServiceName )
694+
695+ if ! k8s_errors .IsNotFound (err ) && len (ceilometerInstance .CeilometerStatus .MysqldExporterExportedGaleras ) > 0 {
696+ exportedGaleras := ceilometerInstance .CeilometerStatus .MysqldExporterExportedGaleras
697+ mysqldExporterTargets := []string {}
698+ for _ , galera := range exportedGaleras {
699+ // NOTE: the galera port is hardcoded in the mariadb-operator without
700+ // any declared constant we could use here
701+ mysqldExporterTargets = append (
702+ mysqldExporterTargets ,
703+ fmt .Sprintf ("%s.%s.svc:3306" , galera , instance .Namespace ),
704+ )
705+ }
706+ desiredScrapeConfig = metricstorage .ScrapeConfigMysqldExporter (
707+ instance ,
708+ serviceLabels ,
709+ mysqldExporterTargets ,
710+ ceilometerInstance .Spec .MysqldExporterTLS .Enabled (),
711+ )
712+ err = r .createServiceScrapeConfig (ctx , instance , Log , "mysqld_exporter" , mysqldExporterCfgName , desiredScrapeConfig )
644713 if err != nil {
645714 return ctrl.Result {}, err
646715 }
716+ } else {
717+ mysqldExporterScrapeConfig := & monv1alpha1.ScrapeConfig {
718+ ObjectMeta : metav1.ObjectMeta {
719+ Name : mysqldExporterCfgName ,
720+ Namespace : instance .Namespace ,
721+ },
722+ }
723+ if res , err := utils .EnsureDeleted (ctx , helper , mysqldExporterScrapeConfig ); err != nil {
724+ return res , err
725+ }
647726 }
648727
649728 instance .Status .Conditions .MarkTrue (telemetryv1 .ScrapeConfigReadyCondition , condition .ReadyMessage )
@@ -1046,7 +1125,7 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
10461125 return nil
10471126 }
10481127
1049- rabbitmqWatchFn := func (_ context.Context , o client.Object ) []reconcile.Request {
1128+ reconcileAllMetricStoragesWatchFn := func (_ context.Context , o client.Object ) []reconcile.Request {
10501129 result := []reconcile.Request {}
10511130
10521131 // get all metricstorage CRs
@@ -1123,7 +1202,12 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
11231202 ).
11241203 Watches (
11251204 & rabbitmqv1.RabbitmqCluster {},
1126- handler .EnqueueRequestsFromMapFunc (rabbitmqWatchFn ),
1205+ handler .EnqueueRequestsFromMapFunc (reconcileAllMetricStoragesWatchFn ),
1206+ ).
1207+ Watches (
1208+ & telemetryv1.Ceilometer {},
1209+ handler .EnqueueRequestsFromMapFunc (reconcileAllMetricStoragesWatchFn ),
1210+ builder .WithPredicates (predicate.ResourceVersionChangedPredicate {}),
11271211 ).
11281212 Build (r )
11291213 r .Controller = control
0 commit comments