Skip to content

Commit 371fa38

Browse files
committed
Add scrape config for podman exporter
This PR unifies scrape config creation for compute node based exporters Partialy-Fixes: OSPRH-10788
1 parent e2a451a commit 371fa38

File tree

2 files changed

+62
-77
lines changed

2 files changed

+62
-77
lines changed

api/v1beta1/telemetry_consts.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ const (
2626
DefaultPrometheusPort = 9090
2727
// DefaultNodeExporterPort -
2828
DefaultNodeExporterPort = 9100
29+
// DefaultPodmanExporterPort -
30+
DefaultPodmanExporterPort = 9882
2931
// DefaultScrapeInterval -
3032
DefaultScrapeInterval = "30s"
3133
// PauseBetweenWatchAttempts -

controllers/metricstorage_controller.go

Lines changed: 60 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -617,69 +617,6 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
617617
return ctrl.Result{}, err
618618
}
619619

620-
connectionInfo, err := getComputeNodesConnectionInfo(instance, helper, telemetry.ServiceName)
621-
if err != nil {
622-
Log.Info(fmt.Sprintf("Cannot get compute node connection info. Scrape configs not created. Error: %s", err))
623-
}
624-
625-
// ScrapeConfigs for NodeExporters
626-
neTargetsTLS, neTargetsNonTLS := getNodeExporterTargets(connectionInfo)
627-
// ScrapeConfig for non-tls nodes
628-
neServiceName := fmt.Sprintf("%s-node-exporter", telemetry.ServiceName)
629-
desiredScrapeConfig = metricstorage.ScrapeConfig(
630-
instance,
631-
serviceLabels,
632-
neTargetsNonTLS,
633-
false,
634-
)
635-
err = r.createServiceScrapeConfig(ctx, instance, Log, "Node Exporter",
636-
neServiceName, desiredScrapeConfig)
637-
if err != nil {
638-
return ctrl.Result{}, err
639-
}
640-
641-
// ScrapeConfig for tls nodes
642-
neServiceName = fmt.Sprintf("%s-node-exporter-tls", telemetry.ServiceName)
643-
desiredScrapeConfig = metricstorage.ScrapeConfig(
644-
instance,
645-
serviceLabels,
646-
neTargetsTLS,
647-
true,
648-
)
649-
err = r.createServiceScrapeConfig(ctx, instance, Log, "Node Exporter",
650-
neServiceName, desiredScrapeConfig)
651-
if err != nil {
652-
return ctrl.Result{}, err
653-
}
654-
655-
connectionInfo, err = getComputeNodesConnectionInfo(instance, helper, telemetryv1.TelemetryPowerMonitoring)
656-
if err != nil {
657-
Log.Info(fmt.Sprintf("Cannot get compute node connection info. Scrape configs not created. Error: %s", err))
658-
}
659-
660-
// kepler scrape endpoints
661-
keplerEndpoints, _ := getKeplerTargets(connectionInfo)
662-
if err != nil {
663-
Log.Info(fmt.Sprintf("Cannot get Kepler targets. Scrape configs not created. Error: %s", err))
664-
}
665-
666-
// keplerEndpoint is reported as empty slice when telemetry-power-monitoring service is not enabled
667-
if len(keplerEndpoints) > 0 {
668-
// Kepler ScrapeConfig for non-tls nodes
669-
keplerServiceName := fmt.Sprintf("%s-kepler", telemetry.ServiceName)
670-
desiredScrapeConfig = metricstorage.ScrapeConfig(
671-
instance,
672-
serviceLabels,
673-
keplerEndpoints,
674-
false,
675-
)
676-
err = r.createServiceScrapeConfig(ctx, instance, Log, "Kepler",
677-
keplerServiceName, desiredScrapeConfig) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
678-
if err != nil {
679-
return ctrl.Result{}, err
680-
}
681-
}
682-
683620
// mysqld exporter
684621
ceilometerNamespacedName := types.NamespacedName{
685622
Name: ceilometer.ServiceName,
@@ -728,16 +665,30 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
728665
}
729666
}
730667

668+
// compute nodes' exporters
669+
err = r.createComputeScrapeConfig(ctx, instance, helper, telemetry.ServiceName, "node-exporter", telemetryv1.DefaultNodeExporterPort, true)
670+
if err != nil {
671+
return ctrl.Result{}, err
672+
}
673+
err = r.createComputeScrapeConfig(ctx, instance, helper, telemetry.ServiceName, "podman-exporter", telemetryv1.DefaultPodmanExporterPort, true)
674+
if err != nil {
675+
return ctrl.Result{}, err
676+
}
677+
err = r.createComputeScrapeConfig(ctx, instance, helper, telemetryv1.TelemetryPowerMonitoring, "kepler", telemetryv1.DefaultKeplerPort, false) // Currently Kepler doesn't support TLS
678+
if err != nil {
679+
return ctrl.Result{}, err
680+
}
681+
731682
instance.Status.Conditions.MarkTrue(telemetryv1.ScrapeConfigReadyCondition, condition.ReadyMessage)
732683
return ctrl.Result{}, nil
733684
}
734685

735-
func getNodeExporterTargets(nodes []ConnectionInfo) ([]metricstorage.LabeledTarget, []metricstorage.LabeledTarget) {
686+
func getExporterTargets(nodes []ConnectionInfo, port int) ([]metricstorage.LabeledTarget, []metricstorage.LabeledTarget) {
736687
tls := []metricstorage.LabeledTarget{}
737688
nonTLS := []metricstorage.LabeledTarget{}
738689
for _, node := range nodes {
739690
target := metricstorage.LabeledTarget{
740-
IP: net.JoinHostPort(node.IP, strconv.Itoa(telemetryv1.DefaultNodeExporterPort)),
691+
IP: net.JoinHostPort(node.IP, strconv.Itoa(port)),
741692
FQDN: node.FQDN,
742693
}
743694
if node.TLS {
@@ -749,21 +700,53 @@ func getNodeExporterTargets(nodes []ConnectionInfo) ([]metricstorage.LabeledTarg
749700
return tls, nonTLS
750701
}
751702

752-
func getKeplerTargets(nodes []ConnectionInfo) ([]metricstorage.LabeledTarget, []metricstorage.LabeledTarget) {
753-
tls := []metricstorage.LabeledTarget{}
754-
nonTLS := []metricstorage.LabeledTarget{}
755-
for _, node := range nodes {
756-
target := metricstorage.LabeledTarget{
757-
IP: net.JoinHostPort(node.IP, strconv.Itoa(telemetryv1.DefaultKeplerPort)),
758-
FQDN: node.FQDN,
703+
func (r *MetricStorageReconciler) createComputeScrapeConfig(
704+
ctx context.Context,
705+
instance *telemetryv1.MetricStorage,
706+
helper *helper.Helper,
707+
serviceName string,
708+
exporterName string,
709+
exporterPort int,
710+
tls bool,
711+
) error {
712+
Log := r.GetLogger(ctx)
713+
714+
connectionInfo, err := getComputeNodesConnectionInfo(instance, helper, serviceName)
715+
if err != nil {
716+
Log.Info(fmt.Sprintf("Cannot get compute node connection info. Scrape configs not created. Error: %s", err))
717+
}
718+
targetsTLS, targetsNonTLS := getExporterTargets(connectionInfo, exporterPort)
719+
720+
// ScrapeConfig for non-tls nodes
721+
if len(targetsNonTLS) > 0 {
722+
fullServiceName := fmt.Sprintf("%s-%s", telemetry.ServiceName, exporterName)
723+
desiredScrapeConfig := metricstorage.ScrapeConfig(
724+
instance,
725+
serviceLabels,
726+
targetsNonTLS,
727+
false,
728+
)
729+
err = r.createServiceScrapeConfig(ctx, instance, Log, exporterName, fullServiceName, desiredScrapeConfig)
730+
if err != nil {
731+
return err
759732
}
760-
if node.TLS {
761-
tls = append(tls, target)
762-
} else {
763-
nonTLS = append(nonTLS, target)
733+
}
734+
735+
// ScrapeConfig for tls nodes
736+
if tls && len(targetsTLS) > 0 {
737+
fullServiceName := fmt.Sprintf("%s-%s-tls", telemetry.ServiceName, exporterName)
738+
desiredScrapeConfig := metricstorage.ScrapeConfig(
739+
instance,
740+
serviceLabels,
741+
targetsTLS,
742+
true,
743+
)
744+
err = r.createServiceScrapeConfig(ctx, instance, Log, exporterName, fullServiceName, desiredScrapeConfig)
745+
if err != nil {
746+
return err
764747
}
765748
}
766-
return tls, nonTLS
749+
return nil
767750
}
768751

769752
func (r *MetricStorageReconciler) createDashboardObjects(ctx context.Context, instance *telemetryv1.MetricStorage, helper *helper.Helper, eventHandler handler.EventHandler) (ctrl.Result, error) {

0 commit comments

Comments
 (0)