@@ -63,6 +63,7 @@ import (
6363 "github.com/openstack-k8s-operators/telemetry-operator/pkg/dashboards"
6464 metricstorage "github.com/openstack-k8s-operators/telemetry-operator/pkg/metricstorage"
6565 telemetry "github.com/openstack-k8s-operators/telemetry-operator/pkg/telemetry"
66+ utils "github.com/openstack-k8s-operators/telemetry-operator/pkg/utils"
6667 rabbitmqv1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
6768 monv1 "github.com/rhobs/obo-prometheus-operator/pkg/apis/monitoring/v1"
6869 monv1alpha1 "github.com/rhobs/obo-prometheus-operator/pkg/apis/monitoring/v1alpha1"
@@ -515,8 +516,7 @@ func (r *MetricStorageReconciler) createServiceScrapeConfig(
515516 log logr.Logger ,
516517 description string ,
517518 serviceName string ,
518- targets interface {},
519- tlsEnabled bool ,
519+ desiredScrapeConfig * monv1alpha1.ScrapeConfig ,
520520) error {
521521 scrapeConfig := & monv1alpha1.ScrapeConfig {
522522 ObjectMeta : metav1.ObjectMeta {
@@ -525,10 +525,6 @@ func (r *MetricStorageReconciler) createServiceScrapeConfig(
525525 },
526526 }
527527 op , err := controllerutil .CreateOrPatch (ctx , r .Client , scrapeConfig , func () error {
528- desiredScrapeConfig := metricstorage .ScrapeConfig (instance ,
529- serviceLabels ,
530- targets ,
531- tlsEnabled )
532528 desiredScrapeConfig .Spec .DeepCopyInto (& scrapeConfig .Spec )
533529 scrapeConfig .ObjectMeta .Labels = desiredScrapeConfig .ObjectMeta .Labels
534530 err := controllerutil .SetControllerReference (instance , scrapeConfig , r .Scheme )
@@ -562,8 +558,14 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
562558 ceilometerRoute := fmt .Sprintf ("%s-internal.%s.svc" , ceilometer .ServiceName , instance .Namespace )
563559 ceilometerTarget := []string {fmt .Sprintf ("%s:%d" , ceilometerRoute , ceilometer .CeilometerPrometheusPort )}
564560 ceilometerCfgName := fmt .Sprintf ("%s-ceilometer" , telemetry .ServiceName )
561+ desiredScrapeConfig := metricstorage .ScrapeConfig (
562+ instance ,
563+ serviceLabels ,
564+ ceilometerTarget ,
565+ instance .Spec .PrometheusTLS .Enabled (),
566+ )
565567 err = r .createServiceScrapeConfig (ctx , instance , Log , "Ceilometer" ,
566- ceilometerCfgName , ceilometerTarget , instance . Spec . PrometheusTLS . Enabled () )
568+ ceilometerCfgName , desiredScrapeConfig )
567569 if err != nil {
568570 return ctrl.Result {}, err
569571 }
@@ -572,8 +574,14 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
572574 ksmRoute := fmt .Sprintf ("%s.%s.svc" , availability .KSMServiceName , instance .Namespace )
573575 ksmTarget := []string {fmt .Sprintf ("%s:%d" , ksmRoute , availability .KSMMetricsPort )}
574576 ksmCfgName := fmt .Sprintf ("%s-ksm" , telemetry .ServiceName )
577+ desiredScrapeConfig = metricstorage .ScrapeConfig (
578+ instance ,
579+ serviceLabels ,
580+ ksmTarget ,
581+ instance .Spec .PrometheusTLS .Enabled (),
582+ )
575583 err = r .createServiceScrapeConfig (ctx , instance , Log , "kube-state-metrics" ,
576- ksmCfgName , ksmTarget , instance . Spec . PrometheusTLS . Enabled () )
584+ ksmCfgName , desiredScrapeConfig )
577585 if err != nil {
578586 return ctrl.Result {}, err
579587 }
@@ -596,8 +604,14 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
596604 rabbitTargets = append (rabbitTargets , fmt .Sprintf ("%s:%d" , rabbitServerName , metricstorage .RabbitMQPrometheusPort ))
597605 }
598606 rabbitCfgName := fmt .Sprintf ("%s-rabbitmq" , telemetry .ServiceName )
607+ desiredScrapeConfig = metricstorage .ScrapeConfig (
608+ instance ,
609+ serviceLabels ,
610+ rabbitTargets ,
611+ instance .Spec .PrometheusTLS .Enabled (),
612+ )
599613 err = r .createServiceScrapeConfig (ctx , instance , Log , "RabbitMQ" ,
600- rabbitCfgName , rabbitTargets , instance . Spec . PrometheusTLS . Enabled () )
614+ rabbitCfgName , desiredScrapeConfig )
601615 if err != nil {
602616 return ctrl.Result {}, err
603617 }
@@ -611,16 +625,28 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
611625 neTargetsTLS , neTargetsNonTLS := getNodeExporterTargets (connectionInfo )
612626 // ScrapeConfig for non-tls nodes
613627 neServiceName := fmt .Sprintf ("%s-node-exporter" , telemetry .ServiceName )
628+ desiredScrapeConfig = metricstorage .ScrapeConfig (
629+ instance ,
630+ serviceLabels ,
631+ neTargetsNonTLS ,
632+ false ,
633+ )
614634 err = r .createServiceScrapeConfig (ctx , instance , Log , "Node Exporter" ,
615- neServiceName , neTargetsNonTLS , false )
635+ neServiceName , desiredScrapeConfig )
616636 if err != nil {
617637 return ctrl.Result {}, err
618638 }
619639
620640 // ScrapeConfig for tls nodes
621641 neServiceName = fmt .Sprintf ("%s-node-exporter-tls" , telemetry .ServiceName )
642+ desiredScrapeConfig = metricstorage .ScrapeConfig (
643+ instance ,
644+ serviceLabels ,
645+ neTargetsTLS ,
646+ true ,
647+ )
622648 err = r .createServiceScrapeConfig (ctx , instance , Log , "Node Exporter" ,
623- neServiceName , neTargetsTLS , true )
649+ neServiceName , desiredScrapeConfig )
624650 if err != nil {
625651 return ctrl.Result {}, err
626652 }
@@ -640,11 +666,64 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
640666 if len (keplerEndpoints ) > 0 {
641667 // Kepler ScrapeConfig for non-tls nodes
642668 keplerServiceName := fmt .Sprintf ("%s-kepler" , telemetry .ServiceName )
669+ desiredScrapeConfig = metricstorage .ScrapeConfig (
670+ instance ,
671+ serviceLabels ,
672+ keplerEndpoints ,
673+ false ,
674+ )
643675 err = r .createServiceScrapeConfig (ctx , instance , Log , "Kepler" ,
644- keplerServiceName , keplerEndpoints , false ) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
676+ keplerServiceName , desiredScrapeConfig ) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
677+ if err != nil {
678+ return ctrl.Result {}, err
679+ }
680+ }
681+
682+ // mysqld exporter
683+ ceilometerNamespacedName := types.NamespacedName {
684+ Name : ceilometer .ServiceName ,
685+ Namespace : instance .Namespace ,
686+ }
687+ ceilometerInstance := & telemetryv1.Ceilometer {}
688+
689+ err = r .Client .Get (ctx , ceilometerNamespacedName , ceilometerInstance )
690+ if err != nil && ! k8s_errors .IsNotFound (err ) {
691+ Log .Info (fmt .Sprintf ("Cannot get ceilometer. Scrape configs not created. Error: %s" , err ))
692+ }
693+
694+ mysqldExporterCfgName := fmt .Sprintf ("%s-mysqld-exporter" , telemetry .ServiceName )
695+
696+ if ! k8s_errors .IsNotFound (err ) && len (ceilometerInstance .CeilometerStatus .MysqldExporterExportedGaleras ) > 0 {
697+ exportedGaleras := ceilometerInstance .CeilometerStatus .MysqldExporterExportedGaleras
698+ mysqldExporterTargets := []string {}
699+ for _ , galera := range exportedGaleras {
700+ // NOTE: the galera port is hardcoded in the mariadb-operator without
701+ // any declared constant we could use here
702+ mysqldExporterTargets = append (
703+ mysqldExporterTargets ,
704+ fmt .Sprintf ("%s.%s.svc:3306" , galera , instance .Namespace ),
705+ )
706+ }
707+ desiredScrapeConfig = metricstorage .ScrapeConfigMysqldExporter (
708+ instance ,
709+ serviceLabels ,
710+ mysqldExporterTargets ,
711+ ceilometerInstance .Spec .MysqldExporterTLS .Enabled (),
712+ )
713+ err = r .createServiceScrapeConfig (ctx , instance , Log , "mysqld_exporter" , mysqldExporterCfgName , desiredScrapeConfig )
645714 if err != nil {
646715 return ctrl.Result {}, err
647716 }
717+ } else {
718+ mysqldExporterScrapeConfig := & monv1alpha1.ScrapeConfig {
719+ ObjectMeta : metav1.ObjectMeta {
720+ Name : mysqldExporterCfgName ,
721+ Namespace : instance .Namespace ,
722+ },
723+ }
724+ if res , err := utils .EnsureDeleted (ctx , helper , mysqldExporterScrapeConfig ); err != nil {
725+ return res , err
726+ }
648727 }
649728
650729 instance .Status .Conditions .MarkTrue (telemetryv1 .ScrapeConfigReadyCondition , condition .ReadyMessage )
@@ -1068,7 +1147,7 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
10681147 return nil
10691148 }
10701149
1071- rabbitmqWatchFn := func (_ context.Context , o client.Object ) []reconcile.Request {
1150+ reconcileAllMetricStoragesWatchFn := func (_ context.Context , o client.Object ) []reconcile.Request {
10721151 result := []reconcile.Request {}
10731152
10741153 // get all metricstorage CRs
@@ -1145,7 +1224,12 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
11451224 ).
11461225 Watches (
11471226 & rabbitmqv1.RabbitmqCluster {},
1148- handler .EnqueueRequestsFromMapFunc (rabbitmqWatchFn ),
1227+ handler .EnqueueRequestsFromMapFunc (reconcileAllMetricStoragesWatchFn ),
1228+ ).
1229+ Watches (
1230+ & telemetryv1.Ceilometer {},
1231+ handler .EnqueueRequestsFromMapFunc (reconcileAllMetricStoragesWatchFn ),
1232+ builder .WithPredicates (predicate.ResourceVersionChangedPredicate {}),
11491233 ).
11501234 Build (r )
11511235 r .Controller = control
0 commit comments