2525 spark metrics independs on prometheus

Signed-off-by: Hossein Torabi <blcksrx@pm.me>
This commit is contained in:
Hossein 2025-05-08 22:03:35 +02:00 committed by Hossein Torabi
parent 851668f7ca
commit d376bcc39c
No known key found for this signature in database
GPG Key ID: 061A6461BF82CD4A
3 changed files with 44 additions and 18 deletions

View File

@ -35,7 +35,7 @@ import (
func configPrometheusMonitoring(app *v1beta2.SparkApplication, client client.Client) error { func configPrometheusMonitoring(app *v1beta2.SparkApplication, client client.Client) error {
port := common.DefaultPrometheusJavaAgentPort port := common.DefaultPrometheusJavaAgentPort
if app.Spec.Monitoring.Prometheus.Port != nil { if app.Spec.Monitoring.Prometheus != nil && app.Spec.Monitoring.Prometheus.Port != nil {
port = *app.Spec.Monitoring.Prometheus.Port port = *app.Spec.Monitoring.Prometheus.Port
} }
@ -63,12 +63,14 @@ func configPrometheusMonitoring(app *v1beta2.SparkApplication, client client.Cli
var javaOption string var javaOption string
if app.Spec.Monitoring.Prometheus != nil {
javaOption = fmt.Sprintf( javaOption = fmt.Sprintf(
"-javaagent:%s=%d:%s/%s", "-javaagent:%s=%d:%s/%s",
app.Spec.Monitoring.Prometheus.JmxExporterJar, app.Spec.Monitoring.Prometheus.JmxExporterJar,
port, port,
common.PrometheusConfigMapMountPath, common.PrometheusConfigMapMountPath,
common.PrometheusConfigKey) common.PrometheusConfigKey)
}
if util.HasPrometheusConfigFile(app) { if util.HasPrometheusConfigFile(app) {
configFile := *app.Spec.Monitoring.Prometheus.ConfigFile configFile := *app.Spec.Monitoring.Prometheus.ConfigFile
@ -133,7 +135,7 @@ func buildPrometheusConfigMap(app *v1beta2.SparkApplication, prometheusConfigMap
configMapData[common.MetricsPropertiesKey] = metricsProperties configMapData[common.MetricsPropertiesKey] = metricsProperties
} }
if !util.HasPrometheusConfigFile(app) { if app.Spec.Monitoring.Prometheus != nil && !util.HasPrometheusConfigFile(app) {
prometheusConfig := common.DefaultPrometheusConfiguration prometheusConfig := common.DefaultPrometheusConfiguration
if app.Spec.Monitoring.Prometheus.Configuration != nil { if app.Spec.Monitoring.Prometheus.Configuration != nil {
prometheusConfig = *app.Spec.Monitoring.Prometheus.Configuration prometheusConfig = *app.Spec.Monitoring.Prometheus.Configuration

View File

@ -56,30 +56,30 @@ func TestConfigPrometheusMonitoring(t *testing.T) {
err = fakeClient.Get(context.TODO(), client.ObjectKeyFromObject(configMap), configMap) err = fakeClient.Get(context.TODO(), client.ObjectKeyFromObject(configMap), configMap)
assert.NoError(t, err, "failed to get ConfigMap %s", configMapName) assert.NoError(t, err, "failed to get ConfigMap %s", configMapName)
if test.app.Spec.Monitoring.Prometheus.ConfigFile == nil && if test.app.Spec.Monitoring.Prometheus != nil && test.app.Spec.Monitoring.Prometheus.ConfigFile == nil &&
test.app.Spec.Monitoring.MetricsPropertiesFile == nil { test.app.Spec.Monitoring.MetricsPropertiesFile == nil {
assert.Len(t, configMap.Data, 2, "expected 2 data items") assert.Len(t, configMap.Data, 2, "expected 2 data items")
} }
if test.app.Spec.Monitoring.Prometheus.ConfigFile != nil && if test.app.Spec.Monitoring.Prometheus != nil && test.app.Spec.Monitoring.Prometheus.ConfigFile != nil &&
test.app.Spec.Monitoring.MetricsPropertiesFile == nil { test.app.Spec.Monitoring.MetricsPropertiesFile == nil {
assert.Len(t, configMap.Data, 1, "expected 1 data item") assert.Len(t, configMap.Data, 1, "expected 1 data item")
} }
if test.app.Spec.Monitoring.Prometheus.ConfigFile == nil && if test.app.Spec.Monitoring.Prometheus != nil && test.app.Spec.Monitoring.Prometheus.ConfigFile == nil &&
test.app.Spec.Monitoring.MetricsPropertiesFile != nil { test.app.Spec.Monitoring.MetricsPropertiesFile != nil {
assert.Len(t, configMap.Data, 1, "expected 1 data item") assert.Len(t, configMap.Data, 1, "expected 1 data item")
} }
if test.app.Spec.Monitoring.MetricsPropertiesFile == nil { if test.app.Spec.Monitoring.Prometheus != nil && test.app.Spec.Monitoring.MetricsPropertiesFile == nil {
assert.Equal(t, test.metricsProperties, configMap.Data[common.MetricsPropertiesKey], "metrics.properties mismatch") assert.Equal(t, test.metricsProperties, configMap.Data[common.MetricsPropertiesKey], "metrics.properties mismatch")
} }
if test.app.Spec.Monitoring.Prometheus.ConfigFile == nil { if test.app.Spec.Monitoring.Prometheus != nil && test.app.Spec.Monitoring.Prometheus.ConfigFile == nil {
assert.Equal(t, test.prometheusConfig, configMap.Data[common.PrometheusConfigKey], "prometheus.yaml mismatch") assert.Equal(t, test.prometheusConfig, configMap.Data[common.PrometheusConfigKey], "prometheus.yaml mismatch")
} }
if test.app.Spec.Monitoring.ExposeDriverMetrics { if test.app.Spec.Monitoring.Prometheus != nil && test.app.Spec.Monitoring.ExposeDriverMetrics {
assert.Len(t, test.app.Spec.Driver.Annotations, 3, "expected 3 driver annotations") assert.Len(t, test.app.Spec.Driver.Annotations, 3, "expected 3 driver annotations")
assert.Equal(t, test.port, test.app.Spec.Driver.Annotations[common.PrometheusPortAnnotation], "java agent port mismatch") assert.Equal(t, test.port, test.app.Spec.Driver.Annotations[common.PrometheusPortAnnotation], "java agent port mismatch")
assert.Equal(t, test.driverJavaOptions, *test.app.Spec.Driver.JavaOptions, "driver Java options mismatch") assert.Equal(t, test.driverJavaOptions, *test.app.Spec.Driver.JavaOptions, "driver Java options mismatch")
@ -309,6 +309,32 @@ func TestConfigPrometheusMonitoring(t *testing.T) {
driverJavaOptions: "-javaagent:/prometheus/exporter.jar=1000:/etc/metrics/conf/prometheus.yaml", driverJavaOptions: "-javaagent:/prometheus/exporter.jar=1000:/etc/metrics/conf/prometheus.yaml",
executorJavaOptions: "-javaagent:/prometheus/exporter.jar=1000:/etc/metrics/conf/prometheus.yaml", executorJavaOptions: "-javaagent:/prometheus/exporter.jar=1000:/etc/metrics/conf/prometheus.yaml",
}, },
{
app: &v1beta2.SparkApplication{
ObjectMeta: metav1.ObjectMeta{
Name: "app2",
Namespace: "default",
},
Spec: v1beta2.SparkApplicationSpec{
Driver: v1beta2.DriverSpec{
JavaOptions: util.StringPtr("-XX:+PrintGCDetails -XX:+PrintGCTimeStamps"),
},
Executor: v1beta2.ExecutorSpec{
JavaOptions: util.StringPtr("-XX:+PrintGCDetails -XX:+PrintGCTimeStamps"),
},
Monitoring: &v1beta2.MonitoringSpec{
ExposeDriverMetrics: false,
ExposeExecutorMetrics: false,
MetricsProperties: util.StringPtr("testcase2dummy"),
},
},
},
metricsProperties: "testcase2dummy",
prometheusConfig: "",
port: "8090",
driverJavaOptions: "-XX:+PrintGCDetails -XX:+PrintGCTimeStamps ",
executorJavaOptions: "-XX:+PrintGCDetails -XX:+PrintGCTimeStamps ",
},
} }
for _, test := range testcases { for _, test := range testcases {

View File

@ -252,15 +252,13 @@ func HasPrometheusConfigFile(app *v1beta2.SparkApplication) bool {
// HasPrometheusConfig returns if Prometheus monitoring defines metricsProperties in the spec. // HasPrometheusConfig returns if Prometheus monitoring defines metricsProperties in the spec.
func HasMetricsProperties(app *v1beta2.SparkApplication) bool { func HasMetricsProperties(app *v1beta2.SparkApplication) bool {
return PrometheusMonitoringEnabled(app) && return app.Spec.Monitoring.MetricsProperties != nil &&
app.Spec.Monitoring.MetricsProperties != nil &&
*app.Spec.Monitoring.MetricsProperties != "" *app.Spec.Monitoring.MetricsProperties != ""
} }
// HasPrometheusConfigFile returns if Monitoring defines metricsPropertiesFile in the spec. // HasPrometheusConfigFile returns if Monitoring defines metricsPropertiesFile in the spec.
func HasMetricsPropertiesFile(app *v1beta2.SparkApplication) bool { func HasMetricsPropertiesFile(app *v1beta2.SparkApplication) bool {
return PrometheusMonitoringEnabled(app) && return app.Spec.Monitoring.MetricsPropertiesFile != nil &&
app.Spec.Monitoring.MetricsPropertiesFile != nil &&
*app.Spec.Monitoring.MetricsPropertiesFile != "" *app.Spec.Monitoring.MetricsPropertiesFile != ""
} }