Skip to content

Commit ba0746b

Browse files
Merge pull request #598 from paramite/podman-exporter-scrape
Add scrape config for podman exporter
2 parents dce01ed + 1b81e2b commit ba0746b

File tree

2 files changed

+67
-78
lines changed

2 files changed

+67
-78
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: 65 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -777,69 +777,6 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
777777
return ctrl.Result{}, err
778778
}
779779

780-
connectionInfo, err := getComputeNodesConnectionInfo(instance, helper, telemetry.ServiceName)
781-
if err != nil {
782-
Log.Info(fmt.Sprintf("Cannot get compute node connection info. Scrape configs not created. Error: %s", err))
783-
}
784-
785-
// ScrapeConfigs for NodeExporters
786-
neTargetsTLS, neTargetsNonTLS := getNodeExporterTargets(connectionInfo)
787-
// ScrapeConfig for non-tls nodes
788-
neServiceName := fmt.Sprintf("%s-node-exporter", telemetry.ServiceName)
789-
desiredScrapeConfig = metricstorage.ScrapeConfig(
790-
instance,
791-
serviceLabels,
792-
neTargetsNonTLS,
793-
false,
794-
)
795-
err = r.createServiceScrapeConfig(ctx, instance, Log, "Node Exporter",
796-
neServiceName, desiredScrapeConfig)
797-
if err != nil {
798-
return ctrl.Result{}, err
799-
}
800-
801-
// ScrapeConfig for tls nodes
802-
neServiceName = fmt.Sprintf("%s-node-exporter-tls", telemetry.ServiceName)
803-
desiredScrapeConfig = metricstorage.ScrapeConfig(
804-
instance,
805-
serviceLabels,
806-
neTargetsTLS,
807-
true,
808-
)
809-
err = r.createServiceScrapeConfig(ctx, instance, Log, "Node Exporter",
810-
neServiceName, desiredScrapeConfig)
811-
if err != nil {
812-
return ctrl.Result{}, err
813-
}
814-
815-
connectionInfo, err = getComputeNodesConnectionInfo(instance, helper, telemetryv1.TelemetryPowerMonitoring)
816-
if err != nil {
817-
Log.Info(fmt.Sprintf("Cannot get compute node connection info. Scrape configs not created. Error: %s", err))
818-
}
819-
820-
// kepler scrape endpoints
821-
keplerEndpoints, _ := getKeplerTargets(connectionInfo)
822-
if err != nil {
823-
Log.Info(fmt.Sprintf("Cannot get Kepler targets. Scrape configs not created. Error: %s", err))
824-
}
825-
826-
// keplerEndpoint is reported as empty slice when telemetry-power-monitoring service is not enabled
827-
if len(keplerEndpoints) > 0 {
828-
// Kepler ScrapeConfig for non-tls nodes
829-
keplerServiceName := fmt.Sprintf("%s-kepler", telemetry.ServiceName)
830-
desiredScrapeConfig = metricstorage.ScrapeConfig(
831-
instance,
832-
serviceLabels,
833-
keplerEndpoints,
834-
false,
835-
)
836-
err = r.createServiceScrapeConfig(ctx, instance, Log, "Kepler",
837-
keplerServiceName, desiredScrapeConfig) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
838-
if err != nil {
839-
return ctrl.Result{}, err
840-
}
841-
}
842-
843780
// mysqld exporter
844781
ceilometerNamespacedName := types.NamespacedName{
845782
Name: ceilometer.ServiceName,
@@ -888,16 +825,31 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
888825
}
889826
}
890827

828+
// compute nodes' exporters
829+
err = r.createComputeScrapeConfig(ctx, instance, helper, telemetry.ServiceName, "node-exporter", telemetryv1.DefaultNodeExporterPort, false)
830+
if err != nil {
831+
return ctrl.Result{}, err
832+
}
833+
err = r.createComputeScrapeConfig(ctx, instance, helper, telemetry.ServiceName, "podman-exporter", telemetryv1.DefaultPodmanExporterPort, false)
834+
if err != nil {
835+
return ctrl.Result{}, err
836+
}
837+
// Currently Kepler doesn't support TLS
838+
err = r.createComputeScrapeConfig(ctx, instance, helper, telemetryv1.TelemetryPowerMonitoring, "kepler", telemetryv1.DefaultKeplerPort, true)
839+
if err != nil {
840+
return ctrl.Result{}, err
841+
}
842+
891843
instance.Status.Conditions.MarkTrue(telemetryv1.ScrapeConfigReadyCondition, condition.ReadyMessage)
892844
return ctrl.Result{}, nil
893845
}
894846

895-
func getNodeExporterTargets(nodes []ConnectionInfo) ([]metricstorage.LabeledTarget, []metricstorage.LabeledTarget) {
847+
func getExporterTargets(nodes []ConnectionInfo, port int) ([]metricstorage.LabeledTarget, []metricstorage.LabeledTarget) {
896848
tls := []metricstorage.LabeledTarget{}
897849
nonTLS := []metricstorage.LabeledTarget{}
898850
for _, node := range nodes {
899851
target := metricstorage.LabeledTarget{
900-
IP: net.JoinHostPort(node.IP, strconv.Itoa(telemetryv1.DefaultNodeExporterPort)),
852+
IP: net.JoinHostPort(node.IP, strconv.Itoa(port)),
901853
FQDN: node.FQDN,
902854
}
903855
if node.TLS {
@@ -909,21 +861,56 @@ func getNodeExporterTargets(nodes []ConnectionInfo) ([]metricstorage.LabeledTarg
909861
return tls, nonTLS
910862
}
911863

912-
func getKeplerTargets(nodes []ConnectionInfo) ([]metricstorage.LabeledTarget, []metricstorage.LabeledTarget) {
913-
tls := []metricstorage.LabeledTarget{}
914-
nonTLS := []metricstorage.LabeledTarget{}
915-
for _, node := range nodes {
916-
target := metricstorage.LabeledTarget{
917-
IP: net.JoinHostPort(node.IP, strconv.Itoa(telemetryv1.DefaultKeplerPort)),
918-
FQDN: node.FQDN,
919-
}
920-
if node.TLS {
921-
tls = append(tls, target)
922-
} else {
923-
nonTLS = append(nonTLS, target)
864+
func (r *MetricStorageReconciler) createComputeScrapeConfig(
865+
ctx context.Context,
866+
instance *telemetryv1.MetricStorage,
867+
helper *helper.Helper,
868+
serviceName string,
869+
exporterName string,
870+
exporterPort int,
871+
suppressTLS bool,
872+
) error {
873+
Log := r.GetLogger(ctx)
874+
875+
connectionInfo, err := getComputeNodesConnectionInfo(instance, helper, serviceName)
876+
if err != nil {
877+
Log.Info(fmt.Sprintf("Cannot get compute node connection info. Scrape configs not created. Error: %s", err))
878+
}
879+
targetsTLS, targetsNonTLS := getExporterTargets(connectionInfo, exporterPort)
880+
881+
// ScrapeConfig for non-tls nodes
882+
//NOTE(mmagr): remove TLS suppression functionality once Kepler supports TLS
883+
targets := targetsNonTLS
884+
if suppressTLS {
885+
targets = targetsTLS
886+
}
887+
fullServiceName := fmt.Sprintf("%s-%s", telemetry.ServiceName, exporterName)
888+
desiredScrapeConfig := metricstorage.ScrapeConfig(
889+
instance,
890+
serviceLabels,
891+
targets,
892+
false,
893+
)
894+
err = r.createServiceScrapeConfig(ctx, instance, Log, exporterName, fullServiceName, desiredScrapeConfig)
895+
if err != nil {
896+
return err
897+
}
898+
899+
// ScrapeConfig for tls nodes
900+
if !suppressTLS {
901+
fullServiceName := fmt.Sprintf("%s-%s-tls", telemetry.ServiceName, exporterName)
902+
desiredScrapeConfig := metricstorage.ScrapeConfig(
903+
instance,
904+
serviceLabels,
905+
targetsTLS,
906+
true,
907+
)
908+
err = r.createServiceScrapeConfig(ctx, instance, Log, exporterName, fullServiceName, desiredScrapeConfig)
909+
if err != nil {
910+
return err
924911
}
925912
}
926-
return tls, nonTLS
913+
return nil
927914
}
928915

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

0 commit comments

Comments
 (0)