From 162509725a8b58724bde4c66e5b0e652f569ca44 Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Mon, 22 Apr 2024 15:23:31 +0200 Subject: [PATCH 01/11] Create a separate Service Monitor when the Prometheus exporter is present Signed-off-by: Israel Blancas --- .chloggen/bug_2877.yaml | 16 +++++ controllers/builder_test.go | 39 ++++++----- internal/manifests/collector/collector.go | 2 +- internal/manifests/collector/podmonitor.go | 37 +++++----- internal/manifests/collector/service.go | 3 + internal/manifests/collector/service_test.go | 1 + .../manifests/collector/servicemonitor.go | 69 +++++++++++++------ .../collector/servicemonitor_test.go | 31 ++++++--- tests/e2e-openshift/monitoring/01-assert.yaml | 8 +-- tests/e2e-openshift/monitoring/04-assert.yaml | 14 ++++ .../04-use-prometheus-exporter.yaml | 25 +++++++ .../monitoring/chainsaw-test.yaml | 6 ++ 12 files changed, 178 insertions(+), 73 deletions(-) create mode 100755 .chloggen/bug_2877.yaml create mode 100644 tests/e2e-openshift/monitoring/04-assert.yaml create mode 100644 tests/e2e-openshift/monitoring/04-use-prometheus-exporter.yaml diff --git a/.chloggen/bug_2877.yaml b/.chloggen/bug_2877.yaml new file mode 100755 index 0000000000..b800b9c46b --- /dev/null +++ b/.chloggen/bug_2877.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action) +component: collector + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Create a new Service Monitor when needed for the Prometheus exporter." + +# One or more tracking issues related to the change +issues: [2877] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: \ No newline at end of file diff --git a/controllers/builder_test.go b/controllers/builder_test.go index 5614b3fc80..8436cb9537 100644 --- a/controllers/builder_test.go +++ b/controllers/builder_test.go @@ -259,12 +259,13 @@ service: Name: "test-collector", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service": "Exists", }, Annotations: nil, }, @@ -506,12 +507,13 @@ service: Name: "test-collector", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service": "Exists", }, Annotations: nil, }, @@ -774,12 +776,13 @@ service: Name: "test-collector", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service": "Exists", }, Annotations: nil, }, diff --git a/internal/manifests/collector/collector.go b/internal/manifests/collector/collector.go index 3b984d6918..f3527a09b8 100644 --- a/internal/manifests/collector/collector.go +++ b/internal/manifests/collector/collector.go @@ -56,7 +56,7 @@ func Build(params manifests.Params) ([]client.Object, error) { if params.OtelCol.Spec.Mode == v1beta1.ModeSidecar { manifestFactories = append(manifestFactories, manifests.Factory(PodMonitor)) } else { - manifestFactories = append(manifestFactories, manifests.Factory(ServiceMonitor)) + manifestFactories = append(manifestFactories, manifests.Factory(ServiceMonitor), manifests.Factory(ServiceMonitorMonitoring)) } } diff --git a/internal/manifests/collector/podmonitor.go b/internal/manifests/collector/podmonitor.go index 86157c4138..761f7d307c 100644 --- a/internal/manifests/collector/podmonitor.go +++ b/internal/manifests/collector/podmonitor.go @@ -31,28 +31,14 @@ import ( // PodMonitor returns the pod monitor for the given instance. func PodMonitor(params manifests.Params) (*monitoringv1.PodMonitor, error) { - if !params.OtelCol.Spec.Observability.Metrics.EnableMetrics { - params.Log.V(2).Info("Metrics disabled for this OTEL Collector", - "params.OtelCol.name", params.OtelCol.Name, - "params.OtelCol.namespace", params.OtelCol.Namespace, - ) - return nil, nil - } else if params.Config.PrometheusCRAvailability() == prometheus.NotAvailable { - params.Log.V(1).Info("Cannot enable PodMonitor when prometheus CRDs are unavailable", - "params.OtelCol.name", params.OtelCol.Name, - "params.OtelCol.namespace", params.OtelCol.Namespace, - ) + if !shouldCreatePodMonitor(params) { return nil, nil } - var pm monitoringv1.PodMonitor - if params.OtelCol.Spec.Mode != v1beta1.ModeSidecar { - return nil, nil - } name := naming.PodMonitor(params.OtelCol.Name) labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, nil) selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector) - pm = monitoringv1.PodMonitor{ + pm := monitoringv1.PodMonitor{ ObjectMeta: metav1.ObjectMeta{ Namespace: params.OtelCol.Namespace, Name: name, @@ -107,3 +93,22 @@ func metricsEndpointsFromConfig(logger logr.Logger, otelcol v1beta1.OpenTelemetr } return metricsEndpoints } + +func shouldCreatePodMonitor(params manifests.Params) bool { + l := params.Log.WithValues( + "params.OtelCol.name", params.OtelCol.Name, + "params.OtelCol.namespace", params.OtelCol.Namespace, + ) + + if !params.OtelCol.Spec.Observability.Metrics.EnableMetrics { + l.V(2).Info("Metrics disabled for this OTEL Collector. PodMonitor will not ve created") + return false + } else if params.Config.PrometheusCRAvailability() == prometheus.NotAvailable { + l.V(2).Info("Cannot enable PodMonitor when prometheus CRDs are unavailable") + return false + } else if params.OtelCol.Spec.Mode != v1beta1.ModeSidecar { + l.V(2).Info("Not using sidecar mode. PodMonitor will not be created") + return false + } + return true +} diff --git a/internal/manifests/collector/service.go b/internal/manifests/collector/service.go index 10d3ae15ab..9131c4a08d 100644 --- a/internal/manifests/collector/service.go +++ b/internal/manifests/collector/service.go @@ -32,6 +32,7 @@ import ( // headless and monitoring labels are to differentiate the headless/monitoring services from the clusterIP service. const ( headlessLabel = "operator.opentelemetry.io/collector-headless-service" + headfulLabel = "operator.opentelemetry.io/collector-service" monitoringLabel = "operator.opentelemetry.io/collector-monitoring-service" valueExists = "Exists" ) @@ -44,6 +45,7 @@ func HeadlessService(params manifests.Params) (*corev1.Service, error) { h.Name = naming.HeadlessService(params.OtelCol.Name) h.Labels[headlessLabel] = valueExists + delete(h.Labels, headfulLabel) // copy to avoid modifying params.OtelCol.Annotations annotations := map[string]string{ @@ -90,6 +92,7 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) { func Service(params manifests.Params) (*corev1.Service, error) { name := naming.Service(params.OtelCol.Name) labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) + labels[headfulLabel] = valueExists out, err := params.OtelCol.Spec.Config.Yaml() if err != nil { diff --git a/internal/manifests/collector/service_test.go b/internal/manifests/collector/service_test.go index 0e3c125be5..cfebae2c22 100644 --- a/internal/manifests/collector/service_test.go +++ b/internal/manifests/collector/service_test.go @@ -286,6 +286,7 @@ func service(name string, ports []v1beta1.PortsSpec) v1.Service { func serviceWithInternalTrafficPolicy(name string, ports []v1beta1.PortsSpec, internalTrafficPolicy v1.ServiceInternalTrafficPolicyType) v1.Service { params := deploymentParams() labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) + labels[headfulLabel] = valueExists svcPorts := []v1.ServicePort{} for _, p := range ports { diff --git a/internal/manifests/collector/servicemonitor.go b/internal/manifests/collector/servicemonitor.go index 1713ccfe50..60ebd4b4cc 100644 --- a/internal/manifests/collector/servicemonitor.go +++ b/internal/manifests/collector/servicemonitor.go @@ -15,6 +15,7 @@ package collector import ( + "fmt" "strings" "github.com/go-logr/logr" @@ -29,30 +30,38 @@ import ( "github.com/open-telemetry/opentelemetry-operator/internal/naming" ) -// ServiceMonitor returns the service monitor for the given instance. +// ServiceMonitor returns the service monitor for the collector. func ServiceMonitor(params manifests.Params) (*monitoringv1.ServiceMonitor, error) { - if !params.OtelCol.Spec.Observability.Metrics.EnableMetrics { - params.Log.V(2).Info("Metrics disabled for this OTEL Collector", - "params.OtelCol.name", params.OtelCol.Name, - "params.OtelCol.namespace", params.OtelCol.Namespace, - ) - return nil, nil - } else if params.Config.PrometheusCRAvailability() == prometheus.NotAvailable { - params.Log.V(1).Info("Cannot enable ServiceMonitor when prometheus CRDs are unavailable", - "params.OtelCol.name", params.OtelCol.Name, - "params.OtelCol.namespace", params.OtelCol.Namespace, - ) - return nil, nil + name := naming.ServiceMonitor(params.OtelCol.Name) + endpoints := endpointsFromConfig(params.Log, params.OtelCol) + if len(endpoints) > 0 { + return createServiceMonitor(name, params, headfulLabel, endpoints) } - var sm monitoringv1.ServiceMonitor + return nil, nil +} + +// ServiceMonitor returns the service monitor for the monitoring service of the collector. +func ServiceMonitorMonitoring(params manifests.Params) (*monitoringv1.ServiceMonitor, error) { + name := naming.ServiceMonitor(fmt.Sprintf("%s-monitoring", params.OtelCol.Name)) + endpoints := []monitoringv1.Endpoint{ + { + Port: "monitoring", + }, + } + return createServiceMonitor(name, params, monitoringLabel, endpoints) +} - if params.OtelCol.Spec.Mode == v1beta1.ModeSidecar { +func createServiceMonitor(name string, params manifests.Params, label string, endpoints []monitoringv1.Endpoint) (*monitoringv1.ServiceMonitor, error) { + if !shouldCreateServiceMonitor(params) { return nil, nil } - name := naming.ServiceMonitor(params.OtelCol.Name) + + var sm monitoringv1.ServiceMonitor + labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector) - selectorLabels[monitoringLabel] = valueExists + // This label is the one which differentiates the services + selectorLabels[label] = valueExists sm = monitoringv1.ServiceMonitor{ ObjectMeta: metav1.ObjectMeta{ @@ -61,11 +70,7 @@ func ServiceMonitor(params manifests.Params) (*monitoringv1.ServiceMonitor, erro Labels: labels, }, Spec: monitoringv1.ServiceMonitorSpec{ - Endpoints: append([]monitoringv1.Endpoint{ - { - Port: "monitoring", - }, - }, endpointsFromConfig(params.Log, params.OtelCol)...), + Endpoints: endpoints, NamespaceSelector: monitoringv1.NamespaceSelector{ MatchNames: []string{params.OtelCol.Namespace}, }, @@ -78,6 +83,25 @@ func ServiceMonitor(params manifests.Params) (*monitoringv1.ServiceMonitor, erro return &sm, nil } +func shouldCreateServiceMonitor(params manifests.Params) bool { + l := params.Log.WithValues( + "params.OtelCol.name", params.OtelCol.Name, + "params.OtelCol.namespace", params.OtelCol.Namespace, + ) + + if !params.OtelCol.Spec.Observability.Metrics.EnableMetrics { + l.V(2).Info("Metrics disabled for this OTEL Collector. ServiceMonitor will not ve created") + return false + } else if params.Config.PrometheusCRAvailability() == prometheus.NotAvailable { + l.V(2).Info("Cannot enable ServiceMonitor when prometheus CRDs are unavailable") + return false + } else if params.OtelCol.Spec.Mode == v1beta1.ModeSidecar { + l.V(2).Info("Using sidecar mode. ServiceMonitor will not be created") + return false + } + return true +} + func endpointsFromConfig(logger logr.Logger, otelcol v1beta1.OpenTelemetryCollector) []monitoringv1.Endpoint { // TODO: https://github.com/open-telemetry/opentelemetry-operator/issues/2603 cfgStr, err := otelcol.Spec.Config.Yaml() @@ -92,6 +116,7 @@ func endpointsFromConfig(logger logr.Logger, otelcol v1beta1.OpenTelemetryCollec } exporterPorts, err := adapters.ConfigToComponentPorts(logger, adapters.ComponentTypeExporter, c) + fmt.Println("eeeeeeeeeeeeeeeeeeeeeestos son: ", exporterPorts) if err != nil { logger.Error(err, "couldn't build service monitors from configuration") return []monitoringv1.Endpoint{} diff --git a/internal/manifests/collector/servicemonitor_test.go b/internal/manifests/collector/servicemonitor_test.go index 8b0cc7f117..c0967f69ec 100644 --- a/internal/manifests/collector/servicemonitor_test.go +++ b/internal/manifests/collector/servicemonitor_test.go @@ -34,18 +34,26 @@ func TestDesiredServiceMonitors(t *testing.T) { params.OtelCol.Spec.Observability.Metrics.EnableMetrics = true actual, err = ServiceMonitor(params) assert.NoError(t, err) + assert.Nil(t, actual) + + // Check the monitoring SM + actual, err = ServiceMonitorMonitoring(params) + assert.NoError(t, err) assert.NotNil(t, actual) - assert.Equal(t, fmt.Sprintf("%s-collector", params.OtelCol.Name), actual.Name) + assert.Equal(t, fmt.Sprintf("%s-monitoring-collector", params.OtelCol.Name), actual.Name) assert.Equal(t, params.OtelCol.Namespace, actual.Namespace) assert.Equal(t, "monitoring", actual.Spec.Endpoints[0].Port) - expectedSelectorLabels := map[string]string{ + expectedSelectorLabelsMonitor := map[string]string{ "app.kubernetes.io/component": "opentelemetry-collector", "app.kubernetes.io/instance": "default.test", "app.kubernetes.io/managed-by": "opentelemetry-operator", "app.kubernetes.io/part-of": "opentelemetry", "operator.opentelemetry.io/collector-monitoring-service": "Exists", } - assert.Equal(t, expectedSelectorLabels, actual.Spec.Selector.MatchLabels) + assert.Equal(t, expectedSelectorLabelsMonitor, actual.Spec.Selector.MatchLabels) + assert.NotContains(t, "operator.opentelemetry.io/collector-headless-service", actual.Spec.Selector.MatchLabels) + assert.NotContains(t, "operator.opentelemetry.io/collector-service", actual.Spec.Selector.MatchLabels) + } func TestDesiredServiceMonitorsWithPrometheus(t *testing.T) { @@ -57,17 +65,18 @@ func TestDesiredServiceMonitorsWithPrometheus(t *testing.T) { assert.NotNil(t, actual) assert.Equal(t, fmt.Sprintf("%s-collector", params.OtelCol.Name), actual.Name) assert.Equal(t, params.OtelCol.Namespace, actual.Namespace) - assert.Equal(t, "monitoring", actual.Spec.Endpoints[0].Port) - assert.Equal(t, "prometheus-dev", actual.Spec.Endpoints[1].Port) - assert.Equal(t, "prometheus-prod", actual.Spec.Endpoints[2].Port) + assert.Equal(t, "prometheus-dev", actual.Spec.Endpoints[0].Port) + assert.Equal(t, "prometheus-prod", actual.Spec.Endpoints[1].Port) expectedSelectorLabels := map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "default.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/part-of": "opentelemetry", - "operator.opentelemetry.io/collector-monitoring-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "default.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/part-of": "opentelemetry", + "operator.opentelemetry.io/collector-service": "Exists", } assert.Equal(t, expectedSelectorLabels, actual.Spec.Selector.MatchLabels) + assert.NotContains(t, "operator.opentelemetry.io/collector-headless-service", actual.Spec.Selector.MatchLabels) + assert.NotContains(t, "operator.opentelemetry.io/collector-monitoring-service", actual.Spec.Selector.MatchLabels) } func TestDesiredServiceMonitorsPrometheusNotAvailable(t *testing.T) { diff --git a/tests/e2e-openshift/monitoring/01-assert.yaml b/tests/e2e-openshift/monitoring/01-assert.yaml index 170c0f4148..6199e3a3f0 100644 --- a/tests/e2e-openshift/monitoring/01-assert.yaml +++ b/tests/e2e-openshift/monitoring/01-assert.yaml @@ -15,22 +15,21 @@ status: availableReplicas: 1 readyReplicas: 1 replicas: 1 - --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app.kubernetes.io/managed-by: opentelemetry-operator - app.kubernetes.io/name: cluster-collector-collector - name: cluster-collector-collector + app.kubernetes.io/name: cluster-collector-monitoring-collector + name: cluster-collector-monitoring-collector spec: endpoints: - port: monitoring selector: matchLabels: app.kubernetes.io/managed-by: opentelemetry-operator - + operator.opentelemetry.io/collector-monitoring-service: Exists --- apiVersion: v1 kind: Service @@ -87,7 +86,6 @@ spec: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry type: ClusterIP - --- apiVersion: v1 kind: Service diff --git a/tests/e2e-openshift/monitoring/04-assert.yaml b/tests/e2e-openshift/monitoring/04-assert.yaml new file mode 100644 index 0000000000..34690a7eb6 --- /dev/null +++ b/tests/e2e-openshift/monitoring/04-assert.yaml @@ -0,0 +1,14 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: cluster-collector2-collector + name: cluster-collector2-collector +spec: + endpoints: + - port: prometheus + selector: + matchLabels: + app.kubernetes.io/managed-by: opentelemetry-operator + operator.opentelemetry.io/collector-service: Exists diff --git a/tests/e2e-openshift/monitoring/04-use-prometheus-exporter.yaml b/tests/e2e-openshift/monitoring/04-use-prometheus-exporter.yaml new file mode 100644 index 0000000000..4eb57f2c9a --- /dev/null +++ b/tests/e2e-openshift/monitoring/04-use-prometheus-exporter.yaml @@ -0,0 +1,25 @@ +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: cluster-collector2 +spec: + mode: deployment + observability: + metrics: + enableMetrics: true + config: | + receivers: + otlp: + protocols: + grpc: + http: + processors: + exporters: + prometheus: + endpoint: "0.0.0.0:8091" + service: + pipelines: + metrics: + receivers: [otlp] + processors: [] + exporters: [prometheus] diff --git a/tests/e2e-openshift/monitoring/chainsaw-test.yaml b/tests/e2e-openshift/monitoring/chainsaw-test.yaml index 232e9a2522..0cf36e93f0 100755 --- a/tests/e2e-openshift/monitoring/chainsaw-test.yaml +++ b/tests/e2e-openshift/monitoring/chainsaw-test.yaml @@ -35,3 +35,9 @@ spec: - script: timeout: 5m content: ./check_metrics.sh + - name: step-04 + try: + - apply: + file: 04-use-prometheus-exporter.yaml + - assert: + file: 04-assert.yaml \ No newline at end of file From 9ccd87f187ebd99f78003c2696cec019889afa35 Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Thu, 25 Apr 2024 18:18:37 +0200 Subject: [PATCH 02/11] Improve changelog Signed-off-by: Israel Blancas --- .chloggen/bug_2877.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.chloggen/bug_2877.yaml b/.chloggen/bug_2877.yaml index b800b9c46b..be83d58c0f 100755 --- a/.chloggen/bug_2877.yaml +++ b/.chloggen/bug_2877.yaml @@ -5,7 +5,9 @@ change_type: bug_fix component: collector # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: "Create a new Service Monitor when needed for the Prometheus exporter." +note: | + Create a Service Monitor for the collector Service when Prometheus exporter is used. A different Service Monitor is created for the monitoring service. + This helps excluding the headless service (duplicating the metrics collectiong) and splits responsibilities between the two Service Monitors. # One or more tracking issues related to the change issues: [2877] From 5f55a0191f8095cb29346d5e6e2fa2bc3c51d460 Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Thu, 25 Apr 2024 18:58:59 +0200 Subject: [PATCH 03/11] Fix prometheus-cr E2E test Signed-off-by: Israel Blancas --- .../manifests/collector/servicemonitor.go | 1 - .../01-assert.yaml | 26 +++++++++++++++-- .../02-assert.yaml | 27 +++++++++++++++-- .../04-error.yaml | 14 --------- .../05-assert.yaml | 28 ++++++++++++++++-- .../05-error.yaml | 29 +++++++++++++++++-- .../06-assert.yaml | 26 +++++++++++++++-- 7 files changed, 124 insertions(+), 27 deletions(-) diff --git a/internal/manifests/collector/servicemonitor.go b/internal/manifests/collector/servicemonitor.go index 60ebd4b4cc..7fed07a4f4 100644 --- a/internal/manifests/collector/servicemonitor.go +++ b/internal/manifests/collector/servicemonitor.go @@ -116,7 +116,6 @@ func endpointsFromConfig(logger logr.Logger, otelcol v1beta1.OpenTelemetryCollec } exporterPorts, err := adapters.ConfigToComponentPorts(logger, adapters.ComponentTypeExporter, c) - fmt.Println("eeeeeeeeeeeeeeeeeeeeeestos son: ", exporterPorts) if err != nil { logger.Error(err, "couldn't build service monitors from configuration") return []monitoringv1.Endpoint{} diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml index eb0652f517..d00aa24724 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml @@ -1,5 +1,28 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor +metadata: + labels: + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: simplest-monitoring-collector + name: simplest-monitoring-collector + namespace: create-sm-prometheus +spec: + endpoints: + - port: monitoring + namespaceSelector: + matchNames: + - create-sm-prometheus + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + operator.opentelemetry.io/collector-monitoring-service: Exists +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor metadata: labels: app.kubernetes.io/instance: create-sm-prometheus.simplest @@ -9,7 +32,6 @@ metadata: namespace: create-sm-prometheus spec: endpoints: - - port: monitoring - port: prometheus-dev - port: prometheus-prod namespaceSelector: @@ -21,7 +43,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: "Exists" + operator.opentelemetry.io/collector-service: Exists --- apiVersion: v1 kind: Service diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml index 4c5b8bd5b8..3594b10a6f 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml @@ -1,5 +1,28 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor +metadata: + labels: + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: simplest-monitoring-collector + name: simplest-monitoring-collector + namespace: create-sm-prometheus +spec: + endpoints: + - port: monitoring + namespaceSelector: + matchNames: + - create-sm-prometheus + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + operator.opentelemetry.io/collector-monitoring-service: Exists +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor metadata: labels: app.kubernetes.io/instance: create-sm-prometheus.simplest @@ -9,7 +32,6 @@ metadata: namespace: create-sm-prometheus spec: endpoints: - - port: monitoring - port: prometheus-prod namespaceSelector: matchNames: @@ -20,8 +42,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: "Exists" - + operator.opentelemetry.io/collector-service: Exists --- apiVersion: v1 kind: Service diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/04-error.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/04-error.yaml index 61ad50e38b..263dbb3c64 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/04-error.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/04-error.yaml @@ -1,19 +1,5 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: - labels: - app.kubernetes.io/instance: create-sm-prometheus.simplest - app.kubernetes.io/managed-by: opentelemetry-operator - app.kubernetes.io/name: simplest-collector name: simplest-collector namespace: create-sm-prometheus -spec: - endpoints: - - port: monitoring - - port: prometheus-prod - namespaceSelector: - matchNames: - - create-sm-prometheus - selector: - matchLabels: - app.kubernetes.io/managed-by: opentelemetry-operator diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml index 3e8205803c..77aade35ad 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml @@ -1,5 +1,28 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor +metadata: + labels: + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: simplest-monitoring-collector + name: simplest-monitoring-collector + namespace: create-sm-prometheus +spec: + endpoints: + - port: monitoring + namespaceSelector: + matchNames: + - create-sm-prometheus + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + operator.opentelemetry.io/collector-monitoring-service: Exists +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor metadata: labels: app.kubernetes.io/instance: create-sm-prometheus.simplest @@ -9,7 +32,6 @@ metadata: namespace: create-sm-prometheus spec: endpoints: - - port: monitoring - port: prometheus-dev - port: prometheus-prod namespaceSelector: @@ -17,11 +39,11 @@ spec: - create-sm-prometheus selector: matchLabels: + app.kubernetes.io/component: opentelemetry-collector app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - app.kubernetes.io/component: opentelemetry-collector - operator.opentelemetry.io/collector-monitoring-service: "Exists" + operator.opentelemetry.io/collector-service: Exists --- apiVersion: v1 kind: Service diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml index ecb59ba1fd..4bad0f85bd 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml @@ -1,5 +1,28 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor +metadata: + labels: + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: simplest-monitoring-collector + name: simplest-monitoring-collector + namespace: create-sm-prometheus +spec: + endpoints: + - port: monitoring + namespaceSelector: + matchNames: + - create-sm-prometheus + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + operator.opentelemetry.io/collector-monitoring-service: Exists +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor metadata: labels: app.kubernetes.io/instance: create-sm-prometheus.simplest @@ -9,7 +32,6 @@ metadata: namespace: create-sm-prometheus spec: endpoints: - - port: monitoring - port: prometheus-dev - port: prometheus-prod - port: prometheusremotewrite/prometheus @@ -18,5 +40,8 @@ spec: - create-sm-prometheus selector: matchLabels: - app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/component: opentelemetry-collector app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + operator.opentelemetry.io/collector-service: Exists diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml index dcfecf5d81..1638e1ab00 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml @@ -1,5 +1,28 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor +metadata: + labels: + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: simplest-monitoring-collector + name: simplest-monitoring-collector + namespace: create-sm-prometheus +spec: + endpoints: + - port: monitoring + namespaceSelector: + matchNames: + - create-sm-prometheus + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: create-sm-prometheus.simplest + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry + operator.opentelemetry.io/collector-monitoring-service: Exists +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor metadata: labels: app.kubernetes.io/instance: create-sm-prometheus.simplest @@ -9,7 +32,6 @@ metadata: namespace: create-sm-prometheus spec: endpoints: - - port: monitoring - port: prometheus-dev namespaceSelector: matchNames: @@ -20,7 +42,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: "Exists" + operator.opentelemetry.io/collector-service: Exists --- apiVersion: v1 kind: Service From e3174b6933df8b7a541bd0fbb679c249d7930eba Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Thu, 25 Apr 2024 19:01:34 +0200 Subject: [PATCH 04/11] Remove unused target Signed-off-by: Israel Blancas --- Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Makefile b/Makefile index e55cb145be..fd9a64c6da 100644 --- a/Makefile +++ b/Makefile @@ -312,10 +312,6 @@ endif install-metrics-server: ./hack/install-metrics-server.sh -.PHONY: install-prometheus-operator -install-prometheus-operator: - ./hack/install-prometheus-operator.sh - # This only installs the CRDs Target Allocator supports .PHONY: install-targetallocator-prometheus-crds install-targetallocator-prometheus-crds: From 28baa3709a37e59f3ed816471decd1817dec9d9e Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Mon, 29 Apr 2024 12:44:34 +0200 Subject: [PATCH 05/11] Add docstring Signed-off-by: Israel Blancas --- internal/manifests/collector/servicemonitor.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/manifests/collector/servicemonitor.go b/internal/manifests/collector/servicemonitor.go index 7fed07a4f4..16e491051a 100644 --- a/internal/manifests/collector/servicemonitor.go +++ b/internal/manifests/collector/servicemonitor.go @@ -51,6 +51,8 @@ func ServiceMonitorMonitoring(params manifests.Params) (*monitoringv1.ServiceMon return createServiceMonitor(name, params, monitoringLabel, endpoints) } +// createServiceMonitor creates a Service Monitor using the provided name, the params from the instance, a label to identify the service +// to target (like the monitoring or the collector services) and the endpoints to scrape. func createServiceMonitor(name string, params manifests.Params, label string, endpoints []monitoringv1.Endpoint) (*monitoringv1.ServiceMonitor, error) { if !shouldCreateServiceMonitor(params) { return nil, nil From 2e143ee9795ec12937010315ff1700a5eb13c07f Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Fri, 3 May 2024 17:31:49 +0200 Subject: [PATCH 06/11] Fix typo Signed-off-by: Israel Blancas --- .chloggen/bug_2877.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chloggen/bug_2877.yaml b/.chloggen/bug_2877.yaml index be83d58c0f..f1f1de502e 100755 --- a/.chloggen/bug_2877.yaml +++ b/.chloggen/bug_2877.yaml @@ -7,7 +7,7 @@ component: collector # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). note: | Create a Service Monitor for the collector Service when Prometheus exporter is used. A different Service Monitor is created for the monitoring service. - This helps excluding the headless service (duplicating the metrics collectiong) and splits responsibilities between the two Service Monitors. + This helps excluding the headless service (duplicating the metrics collection) and splits responsibilities between the two Service Monitors. # One or more tracking issues related to the change issues: [2877] From f5b29d840d1d64de228053302d2c3daf75ae808b Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Thu, 9 May 2024 13:37:58 +0200 Subject: [PATCH 07/11] Change the label name Signed-off-by: Israel Blancas --- .chloggen/bug_2877.yaml | 1 + controllers/builder_test.go | 154 +++++++++--------- internal/manifests/collector/service.go | 26 ++- internal/manifests/collector/service_test.go | 2 +- .../manifests/collector/servicemonitor.go | 8 +- .../collector/servicemonitor_test.go | 24 ++- tests/e2e-openshift/kafka/03-assert.yaml | 2 +- tests/e2e-openshift/monitoring/01-assert.yaml | 4 +- tests/e2e-openshift/monitoring/04-assert.yaml | 2 +- .../multi-cluster/02-assert.yaml | 2 +- .../multi-cluster/03-assert.yaml | 2 +- .../otlp-metrics-traces/02-assert.yaml | 23 ++- .../01-assert.yaml | 6 +- .../02-assert.yaml | 6 +- .../05-assert.yaml | 6 +- .../05-error.yaml | 4 +- .../06-assert.yaml | 6 +- 17 files changed, 152 insertions(+), 126 deletions(-) diff --git a/.chloggen/bug_2877.yaml b/.chloggen/bug_2877.yaml index f1f1de502e..19894490d1 100755 --- a/.chloggen/bug_2877.yaml +++ b/.chloggen/bug_2877.yaml @@ -8,6 +8,7 @@ component: collector note: | Create a Service Monitor for the collector Service when Prometheus exporter is used. A different Service Monitor is created for the monitoring service. This helps excluding the headless service (duplicating the metrics collection) and splits responsibilities between the two Service Monitors. + Now, the operator.opentelemetry.io/collector-service-type label is used to differentiate the services. # One or more tracking issues related to the change issues: [2877] diff --git a/controllers/builder_test.go b/controllers/builder_test.go index 31f421b00c..e86c086c93 100644 --- a/controllers/builder_test.go +++ b/controllers/builder_test.go @@ -259,13 +259,13 @@ service: Name: "test-collector", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "base", }, Annotations: nil, }, @@ -285,13 +285,13 @@ service: Name: "test-collector-headless", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-headless-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "headless", }, Annotations: map[string]string{ "service.beta.openshift.io/serving-cert-secret-name": "test-collector-headless-tls", @@ -314,13 +314,13 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-monitoring-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", }, Annotations: nil, }, @@ -507,13 +507,13 @@ service: Name: "test-collector", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "base", }, Annotations: nil, }, @@ -533,13 +533,13 @@ service: Name: "test-collector-headless", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-headless-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "headless", }, Annotations: map[string]string{ "service.beta.openshift.io/serving-cert-secret-name": "test-collector-headless-tls", @@ -562,13 +562,13 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-monitoring-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", }, Annotations: nil, }, @@ -776,13 +776,13 @@ service: Name: "test-collector", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "base", }, Annotations: nil, }, @@ -802,13 +802,13 @@ service: Name: "test-collector-headless", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-headless-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "headless", }, Annotations: map[string]string{ "service.beta.openshift.io/serving-cert-secret-name": "test-collector-headless-tls", @@ -831,13 +831,13 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-monitoring-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", }, Annotations: nil, }, @@ -1314,13 +1314,13 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-monitoring-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", }, Annotations: nil, }, @@ -1708,13 +1708,13 @@ prometheus_cr: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-monitoring-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", }, Annotations: nil, }, diff --git a/internal/manifests/collector/service.go b/internal/manifests/collector/service.go index 9131c4a08d..b86135fbd4 100644 --- a/internal/manifests/collector/service.go +++ b/internal/manifests/collector/service.go @@ -29,14 +29,23 @@ import ( "github.com/open-telemetry/opentelemetry-operator/internal/naming" ) -// headless and monitoring labels are to differentiate the headless/monitoring services from the clusterIP service. +// headless and monitoring labels are to differentiate the base/headless/monitoring services from the clusterIP service. const ( - headlessLabel = "operator.opentelemetry.io/collector-headless-service" - headfulLabel = "operator.opentelemetry.io/collector-service" - monitoringLabel = "operator.opentelemetry.io/collector-monitoring-service" - valueExists = "Exists" + serviceTypeLabel = "operator.opentelemetry.io/collector-service-type" ) +type ServiceType int + +const ( + BaseServiceType ServiceType = iota + HeadlessServiceType + MonitoringServiceType +) + +func (s ServiceType) String() string { + return [...]string{"base", "headless", "monitoring"}[s] +} + func HeadlessService(params manifests.Params) (*corev1.Service, error) { h, err := Service(params) if h == nil || err != nil { @@ -44,8 +53,7 @@ func HeadlessService(params manifests.Params) (*corev1.Service, error) { } h.Name = naming.HeadlessService(params.OtelCol.Name) - h.Labels[headlessLabel] = valueExists - delete(h.Labels, headfulLabel) + h.Labels[serviceTypeLabel] = HeadlessServiceType.String() // copy to avoid modifying params.OtelCol.Annotations annotations := map[string]string{ @@ -64,7 +72,7 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) { name := naming.MonitoringService(params.OtelCol.Name) labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) - labels[monitoringLabel] = valueExists + labels[serviceTypeLabel] = MonitoringServiceType.String() metricsPort, err := params.OtelCol.Spec.Config.Service.MetricsPort() if err != nil { @@ -92,7 +100,7 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) { func Service(params manifests.Params) (*corev1.Service, error) { name := naming.Service(params.OtelCol.Name) labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) - labels[headfulLabel] = valueExists + labels[serviceTypeLabel] = BaseServiceType.String() out, err := params.OtelCol.Spec.Config.Yaml() if err != nil { diff --git a/internal/manifests/collector/service_test.go b/internal/manifests/collector/service_test.go index cfebae2c22..2a5cd8d08f 100644 --- a/internal/manifests/collector/service_test.go +++ b/internal/manifests/collector/service_test.go @@ -286,7 +286,7 @@ func service(name string, ports []v1beta1.PortsSpec) v1.Service { func serviceWithInternalTrafficPolicy(name string, ports []v1beta1.PortsSpec, internalTrafficPolicy v1.ServiceInternalTrafficPolicyType) v1.Service { params := deploymentParams() labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) - labels[headfulLabel] = valueExists + labels[serviceTypeLabel] = BaseServiceType.String() svcPorts := []v1.ServicePort{} for _, p := range ports { diff --git a/internal/manifests/collector/servicemonitor.go b/internal/manifests/collector/servicemonitor.go index 16e491051a..2c1088f44c 100644 --- a/internal/manifests/collector/servicemonitor.go +++ b/internal/manifests/collector/servicemonitor.go @@ -35,7 +35,7 @@ func ServiceMonitor(params manifests.Params) (*monitoringv1.ServiceMonitor, erro name := naming.ServiceMonitor(params.OtelCol.Name) endpoints := endpointsFromConfig(params.Log, params.OtelCol) if len(endpoints) > 0 { - return createServiceMonitor(name, params, headfulLabel, endpoints) + return createServiceMonitor(name, params, BaseServiceType, endpoints) } return nil, nil } @@ -48,12 +48,12 @@ func ServiceMonitorMonitoring(params manifests.Params) (*monitoringv1.ServiceMon Port: "monitoring", }, } - return createServiceMonitor(name, params, monitoringLabel, endpoints) + return createServiceMonitor(name, params, MonitoringServiceType, endpoints) } // createServiceMonitor creates a Service Monitor using the provided name, the params from the instance, a label to identify the service // to target (like the monitoring or the collector services) and the endpoints to scrape. -func createServiceMonitor(name string, params manifests.Params, label string, endpoints []monitoringv1.Endpoint) (*monitoringv1.ServiceMonitor, error) { +func createServiceMonitor(name string, params manifests.Params, serviceType ServiceType, endpoints []monitoringv1.Endpoint) (*monitoringv1.ServiceMonitor, error) { if !shouldCreateServiceMonitor(params) { return nil, nil } @@ -63,7 +63,7 @@ func createServiceMonitor(name string, params manifests.Params, label string, en labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector) // This label is the one which differentiates the services - selectorLabels[label] = valueExists + selectorLabels[serviceTypeLabel] = serviceType.String() sm = monitoringv1.ServiceMonitor{ ObjectMeta: metav1.ObjectMeta{ diff --git a/internal/manifests/collector/servicemonitor_test.go b/internal/manifests/collector/servicemonitor_test.go index c0967f69ec..63f1b216c2 100644 --- a/internal/manifests/collector/servicemonitor_test.go +++ b/internal/manifests/collector/servicemonitor_test.go @@ -44,15 +44,13 @@ func TestDesiredServiceMonitors(t *testing.T) { assert.Equal(t, params.OtelCol.Namespace, actual.Namespace) assert.Equal(t, "monitoring", actual.Spec.Endpoints[0].Port) expectedSelectorLabelsMonitor := map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "default.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/part-of": "opentelemetry", - "operator.opentelemetry.io/collector-monitoring-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "default.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/part-of": "opentelemetry", + "operator.opentelemetry.io/collector-service-type": "monitoring", } assert.Equal(t, expectedSelectorLabelsMonitor, actual.Spec.Selector.MatchLabels) - assert.NotContains(t, "operator.opentelemetry.io/collector-headless-service", actual.Spec.Selector.MatchLabels) - assert.NotContains(t, "operator.opentelemetry.io/collector-service", actual.Spec.Selector.MatchLabels) } @@ -68,15 +66,13 @@ func TestDesiredServiceMonitorsWithPrometheus(t *testing.T) { assert.Equal(t, "prometheus-dev", actual.Spec.Endpoints[0].Port) assert.Equal(t, "prometheus-prod", actual.Spec.Endpoints[1].Port) expectedSelectorLabels := map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "default.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/part-of": "opentelemetry", - "operator.opentelemetry.io/collector-service": "Exists", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "default.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/part-of": "opentelemetry", + "operator.opentelemetry.io/collector-service-type": "base", } assert.Equal(t, expectedSelectorLabels, actual.Spec.Selector.MatchLabels) - assert.NotContains(t, "operator.opentelemetry.io/collector-headless-service", actual.Spec.Selector.MatchLabels) - assert.NotContains(t, "operator.opentelemetry.io/collector-monitoring-service", actual.Spec.Selector.MatchLabels) } func TestDesiredServiceMonitorsPrometheusNotAvailable(t *testing.T) { diff --git a/tests/e2e-openshift/kafka/03-assert.yaml b/tests/e2e-openshift/kafka/03-assert.yaml index 0152057fd0..6a6e470944 100644 --- a/tests/e2e-openshift/kafka/03-assert.yaml +++ b/tests/e2e-openshift/kafka/03-assert.yaml @@ -53,7 +53,7 @@ metadata: app.kubernetes.io/instance: chainsaw-kafka.kafka-exporter app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: kafka-exporter-collector - operator.opentelemetry.io/collector-headless-service: Exists + operator.opentelemetry.io/collector-service-type: headless name: kafka-exporter-collector-headless namespace: chainsaw-kafka spec: diff --git a/tests/e2e-openshift/monitoring/01-assert.yaml b/tests/e2e-openshift/monitoring/01-assert.yaml index 6199e3a3f0..c7fa849a44 100644 --- a/tests/e2e-openshift/monitoring/01-assert.yaml +++ b/tests/e2e-openshift/monitoring/01-assert.yaml @@ -29,7 +29,7 @@ spec: selector: matchLabels: app.kubernetes.io/managed-by: opentelemetry-operator - operator.opentelemetry.io/collector-monitoring-service: Exists + operator.opentelemetry.io/collector-service-type: monitoring --- apiVersion: v1 kind: Service @@ -67,7 +67,7 @@ metadata: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: cluster-collector-collector app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-headless-service: Exists + operator.opentelemetry.io/collector-service-type: headless name: cluster-collector-collector-headless spec: ports: diff --git a/tests/e2e-openshift/monitoring/04-assert.yaml b/tests/e2e-openshift/monitoring/04-assert.yaml index 34690a7eb6..0b72375c3b 100644 --- a/tests/e2e-openshift/monitoring/04-assert.yaml +++ b/tests/e2e-openshift/monitoring/04-assert.yaml @@ -11,4 +11,4 @@ spec: selector: matchLabels: app.kubernetes.io/managed-by: opentelemetry-operator - operator.opentelemetry.io/collector-service: Exists + operator.opentelemetry.io/collector-service-type: base diff --git a/tests/e2e-openshift/multi-cluster/02-assert.yaml b/tests/e2e-openshift/multi-cluster/02-assert.yaml index 7ba79cbe56..b1a0997dc4 100644 --- a/tests/e2e-openshift/multi-cluster/02-assert.yaml +++ b/tests/e2e-openshift/multi-cluster/02-assert.yaml @@ -58,7 +58,7 @@ metadata: app.kubernetes.io/name: otlp-receiver-collector app.kubernetes.io/part-of: opentelemetry app.kubernetes.io/version: latest - operator.opentelemetry.io/collector-headless-service: Exists + operator.opentelemetry.io/collector-service-type: headless name: otlp-receiver-collector-headless namespace: chainsaw-multi-cluster-receive spec: diff --git a/tests/e2e-openshift/multi-cluster/03-assert.yaml b/tests/e2e-openshift/multi-cluster/03-assert.yaml index bc3a130380..396a7a26fd 100644 --- a/tests/e2e-openshift/multi-cluster/03-assert.yaml +++ b/tests/e2e-openshift/multi-cluster/03-assert.yaml @@ -58,7 +58,7 @@ metadata: app.kubernetes.io/name: otel-sender-collector app.kubernetes.io/part-of: opentelemetry app.kubernetes.io/version: latest - operator.opentelemetry.io/collector-headless-service: Exists + operator.opentelemetry.io/collector-service-type: headless name: otel-sender-collector-headless namespace: chainsaw-multi-cluster-send spec: diff --git a/tests/e2e-openshift/otlp-metrics-traces/02-assert.yaml b/tests/e2e-openshift/otlp-metrics-traces/02-assert.yaml index 057820e934..c2403ae18f 100644 --- a/tests/e2e-openshift/otlp-metrics-traces/02-assert.yaml +++ b/tests/e2e-openshift/otlp-metrics-traces/02-assert.yaml @@ -11,6 +11,27 @@ status: --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor +metadata: + labels: + app.kubernetes.io/instance: chainsaw-otlp-metrics.cluster-collector + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: cluster-collector-monitoring-collector + name: cluster-collector-monitoring-collector + namespace: chainsaw-otlp-metrics +spec: + endpoints: + - port: monitoring + namespaceSelector: + matchNames: + - chainsaw-otlp-metrics + selector: + matchLabels: + app.kubernetes.io/instance: chainsaw-otlp-metrics.cluster-collector + app.kubernetes.io/managed-by: opentelemetry-operator + operator.opentelemetry.io/collector-service-type: monitoring +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor metadata: labels: app.kubernetes.io/instance: chainsaw-otlp-metrics.cluster-collector @@ -20,7 +41,6 @@ metadata: namespace: chainsaw-otlp-metrics spec: endpoints: - - port: monitoring - port: prometheus namespaceSelector: matchNames: @@ -29,3 +49,4 @@ spec: matchLabels: app.kubernetes.io/instance: chainsaw-otlp-metrics.cluster-collector app.kubernetes.io/managed-by: opentelemetry-operator + operator.opentelemetry.io/collector-service-type: base \ No newline at end of file diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml index d00aa24724..0b2bd613d3 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml @@ -19,7 +19,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: Exists + operator.opentelemetry.io/collector-service-type: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor @@ -43,7 +43,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-service: Exists + operator.opentelemetry.io/collector-service-type: base --- apiVersion: v1 kind: Service @@ -80,7 +80,7 @@ metadata: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: simplest-collector-monitoring app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: "Exists" + operator.opentelemetry.io/collector-service-type: "monitoring" name: simplest-collector-monitoring namespace: create-sm-prometheus spec: diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml index 3594b10a6f..2c40863bf1 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml @@ -19,7 +19,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: Exists + operator.opentelemetry.io/collector-service-type: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor @@ -42,7 +42,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-service: Exists + operator.opentelemetry.io/collector-service-type: base --- apiVersion: v1 kind: Service @@ -75,7 +75,7 @@ metadata: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: simplest-collector-monitoring app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: "Exists" + operator.opentelemetry.io/collector-service-type: "monitoring" name: simplest-collector-monitoring namespace: create-sm-prometheus spec: diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml index 77aade35ad..13ebcd07ce 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml @@ -19,7 +19,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: Exists + operator.opentelemetry.io/collector-service-type: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor @@ -43,7 +43,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-service: Exists + operator.opentelemetry.io/collector-service-type: base --- apiVersion: v1 kind: Service @@ -54,7 +54,7 @@ metadata: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: simplest-collector-monitoring app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: "Exists" + operator.opentelemetry.io/collector-service-type: "monitoring" name: simplest-collector-monitoring namespace: create-sm-prometheus spec: diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml index 4bad0f85bd..c97ae2597d 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-error.yaml @@ -19,7 +19,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: Exists + operator.opentelemetry.io/collector-service-type: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor @@ -44,4 +44,4 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-service: Exists + operator.opentelemetry.io/collector-service-type: base diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml index 1638e1ab00..33735ebc00 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml @@ -19,7 +19,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: Exists + operator.opentelemetry.io/collector-service-type: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor @@ -42,7 +42,7 @@ spec: app.kubernetes.io/instance: create-sm-prometheus.simplest app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-service: Exists + operator.opentelemetry.io/collector-service-type: base --- apiVersion: v1 kind: Service @@ -53,7 +53,7 @@ metadata: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: simplest-collector-monitoring app.kubernetes.io/part-of: opentelemetry - operator.opentelemetry.io/collector-monitoring-service: "Exists" + operator.opentelemetry.io/collector-service-type: "monitoring" name: simplest-collector-monitoring namespace: create-sm-prometheus spec: From 3712c43e7984c55c4b20cfa2cfb9ba3b08bdcd82 Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Mon, 13 May 2024 15:53:13 +0200 Subject: [PATCH 08/11] Change changelog description Signed-off-by: Israel Blancas --- .chloggen/bug_2877.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.chloggen/bug_2877.yaml b/.chloggen/bug_2877.yaml index 19894490d1..82b4b3d071 100755 --- a/.chloggen/bug_2877.yaml +++ b/.chloggen/bug_2877.yaml @@ -5,10 +5,7 @@ change_type: bug_fix component: collector # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: | - Create a Service Monitor for the collector Service when Prometheus exporter is used. A different Service Monitor is created for the monitoring service. - This helps excluding the headless service (duplicating the metrics collection) and splits responsibilities between the two Service Monitors. - Now, the operator.opentelemetry.io/collector-service-type label is used to differentiate the services. +note: Create a Service Monitor for the monitoring service and another one for the collector service when the Prometheus exporter is used. # One or more tracking issues related to the change issues: [2877] @@ -16,4 +13,7 @@ issues: [2877] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. # Use pipe (|) for multiline entries. -subtext: \ No newline at end of file +subtext: | + Create a Service Monitor for the collector Service when Prometheus exporter is used. A different Service Monitor is created for the monitoring service. + This helps excluding the headless service (duplicating the metrics collection) and splits responsibilities between the two Service Monitors. + Now, the operator.opentelemetry.io/collector-service-type label is used to differentiate the services. \ No newline at end of file From 720c6b164ad51cef4c036e1997c0420999ab642b Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Fri, 17 May 2024 18:04:57 +0200 Subject: [PATCH 09/11] Recover removed labels Signed-off-by: Israel Blancas --- .chloggen/bug_2877.yaml | 3 +- controllers/builder_test.go | 120 +++++++++++++----------- internal/manifests/collector/service.go | 5 + 3 files changed, 71 insertions(+), 57 deletions(-) diff --git a/.chloggen/bug_2877.yaml b/.chloggen/bug_2877.yaml index 82b4b3d071..0ca822551d 100755 --- a/.chloggen/bug_2877.yaml +++ b/.chloggen/bug_2877.yaml @@ -16,4 +16,5 @@ issues: [2877] subtext: | Create a Service Monitor for the collector Service when Prometheus exporter is used. A different Service Monitor is created for the monitoring service. This helps excluding the headless service (duplicating the metrics collection) and splits responsibilities between the two Service Monitors. - Now, the operator.opentelemetry.io/collector-service-type label is used to differentiate the services. \ No newline at end of file + Now, the operator.opentelemetry.io/collector-service-type label is used to differentiate the services. + operator.opentelemetry.io/collector-monitoring-service and operator.opentelemetry.io/collector-headless-service are deprecated now. \ No newline at end of file diff --git a/controllers/builder_test.go b/controllers/builder_test.go index e86c086c93..32fd6db2fd 100644 --- a/controllers/builder_test.go +++ b/controllers/builder_test.go @@ -285,13 +285,14 @@ service: Name: "test-collector-headless", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "headless", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-headless-service": "Exists", + "operator.opentelemetry.io/collector-service-type": "headless", }, Annotations: map[string]string{ "service.beta.openshift.io/serving-cert-secret-name": "test-collector-headless-tls", @@ -314,13 +315,14 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "monitoring", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", + "operator.opentelemetry.io/collector-monitoring-service": "Exists", }, Annotations: nil, }, @@ -533,13 +535,14 @@ service: Name: "test-collector-headless", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "headless", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "headless", + "operator.opentelemetry.io/collector-headless-service": "Exists", }, Annotations: map[string]string{ "service.beta.openshift.io/serving-cert-secret-name": "test-collector-headless-tls", @@ -562,13 +565,14 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "monitoring", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", + "operator.opentelemetry.io/collector-monitoring-service": "Exists", }, Annotations: nil, }, @@ -802,13 +806,14 @@ service: Name: "test-collector-headless", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "headless", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "headless", + "operator.opentelemetry.io/collector-headless-service": "Exists", }, Annotations: map[string]string{ "service.beta.openshift.io/serving-cert-secret-name": "test-collector-headless-tls", @@ -831,13 +836,14 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "monitoring", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", + "operator.opentelemetry.io/collector-monitoring-service": "Exists", }, Annotations: nil, }, @@ -1314,13 +1320,14 @@ service: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "monitoring", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", + "operator.opentelemetry.io/collector-monitoring-service": "Exists", }, Annotations: nil, }, @@ -1708,13 +1715,14 @@ prometheus_cr: Name: "test-collector-monitoring", Namespace: "test", Labels: map[string]string{ - "app.kubernetes.io/component": "opentelemetry-collector", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/name": "test-collector-monitoring", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/version": "latest", - "operator.opentelemetry.io/collector-service-type": "monitoring", + "app.kubernetes.io/component": "opentelemetry-collector", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/name": "test-collector-monitoring", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/version": "latest", + "operator.opentelemetry.io/collector-service-type": "monitoring", + "operator.opentelemetry.io/collector-monitoring-service": "Exists", }, Annotations: nil, }, diff --git a/internal/manifests/collector/service.go b/internal/manifests/collector/service.go index b86135fbd4..d66e4bfe99 100644 --- a/internal/manifests/collector/service.go +++ b/internal/manifests/collector/service.go @@ -31,7 +31,10 @@ import ( // headless and monitoring labels are to differentiate the base/headless/monitoring services from the clusterIP service. const ( + headlessLabel = "operator.opentelemetry.io/collector-headless-service" + monitoringLabel = "operator.opentelemetry.io/collector-monitoring-service" serviceTypeLabel = "operator.opentelemetry.io/collector-service-type" + valueExists = "Exists" ) type ServiceType int @@ -53,6 +56,7 @@ func HeadlessService(params manifests.Params) (*corev1.Service, error) { } h.Name = naming.HeadlessService(params.OtelCol.Name) + h.Labels[headlessLabel] = valueExists h.Labels[serviceTypeLabel] = HeadlessServiceType.String() // copy to avoid modifying params.OtelCol.Annotations @@ -72,6 +76,7 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) { name := naming.MonitoringService(params.OtelCol.Name) labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{}) + labels[monitoringLabel] = valueExists labels[serviceTypeLabel] = MonitoringServiceType.String() metricsPort, err := params.OtelCol.Spec.Config.Service.MetricsPort() From cc84a10f1702d17a27e57e1ccfa941e10fc4d861 Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Fri, 17 May 2024 18:49:31 +0200 Subject: [PATCH 10/11] Add missing labels Signed-off-by: Israel Blancas --- tests/e2e-openshift/kafka/03-assert.yaml | 1 + tests/e2e-openshift/monitoring/01-assert.yaml | 1 + tests/e2e-openshift/multi-cluster/02-assert.yaml | 1 + tests/e2e-openshift/multi-cluster/03-assert.yaml | 1 + .../create-sm-prometheus-exporters/01-assert.yaml | 1 + .../create-sm-prometheus-exporters/02-assert.yaml | 1 + .../create-sm-prometheus-exporters/05-assert.yaml | 1 + .../create-sm-prometheus-exporters/06-assert.yaml | 2 ++ 8 files changed, 9 insertions(+) diff --git a/tests/e2e-openshift/kafka/03-assert.yaml b/tests/e2e-openshift/kafka/03-assert.yaml index 6a6e470944..34cfabbea3 100644 --- a/tests/e2e-openshift/kafka/03-assert.yaml +++ b/tests/e2e-openshift/kafka/03-assert.yaml @@ -54,6 +54,7 @@ metadata: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: kafka-exporter-collector operator.opentelemetry.io/collector-service-type: headless + operator.opentelemetry.io/collector-headless-service: Exists name: kafka-exporter-collector-headless namespace: chainsaw-kafka spec: diff --git a/tests/e2e-openshift/monitoring/01-assert.yaml b/tests/e2e-openshift/monitoring/01-assert.yaml index c7fa849a44..aefeb5e82d 100644 --- a/tests/e2e-openshift/monitoring/01-assert.yaml +++ b/tests/e2e-openshift/monitoring/01-assert.yaml @@ -68,6 +68,7 @@ metadata: app.kubernetes.io/name: cluster-collector-collector app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: headless + operator.opentelemetry.io/collector-headless-service: Exists name: cluster-collector-collector-headless spec: ports: diff --git a/tests/e2e-openshift/multi-cluster/02-assert.yaml b/tests/e2e-openshift/multi-cluster/02-assert.yaml index b1a0997dc4..c4dae4d27f 100644 --- a/tests/e2e-openshift/multi-cluster/02-assert.yaml +++ b/tests/e2e-openshift/multi-cluster/02-assert.yaml @@ -59,6 +59,7 @@ metadata: app.kubernetes.io/part-of: opentelemetry app.kubernetes.io/version: latest operator.opentelemetry.io/collector-service-type: headless + operator.opentelemetry.io/collector-headless-service: Exists name: otlp-receiver-collector-headless namespace: chainsaw-multi-cluster-receive spec: diff --git a/tests/e2e-openshift/multi-cluster/03-assert.yaml b/tests/e2e-openshift/multi-cluster/03-assert.yaml index 396a7a26fd..a22efdb841 100644 --- a/tests/e2e-openshift/multi-cluster/03-assert.yaml +++ b/tests/e2e-openshift/multi-cluster/03-assert.yaml @@ -59,6 +59,7 @@ metadata: app.kubernetes.io/part-of: opentelemetry app.kubernetes.io/version: latest operator.opentelemetry.io/collector-service-type: headless + operator.opentelemetry.io/collector-headless-service: Exists name: otel-sender-collector-headless namespace: chainsaw-multi-cluster-send spec: diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml index 0b2bd613d3..bd94e41ec6 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml @@ -44,6 +44,7 @@ spec: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: base + operator.opentelemetry.io/collector-monitoring-service: "Exists" --- apiVersion: v1 kind: Service diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml index 2c40863bf1..61f74dd1e1 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/02-assert.yaml @@ -76,6 +76,7 @@ metadata: app.kubernetes.io/name: simplest-collector-monitoring app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: "monitoring" + operator.opentelemetry.io/collector-monitoring-service: "Exists" name: simplest-collector-monitoring namespace: create-sm-prometheus spec: diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml index 13ebcd07ce..a0b8ebcda6 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/05-assert.yaml @@ -55,6 +55,7 @@ metadata: app.kubernetes.io/name: simplest-collector-monitoring app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: "monitoring" + operator.opentelemetry.io/collector-monitoring-service: "Exists" name: simplest-collector-monitoring namespace: create-sm-prometheus spec: diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml index 33735ebc00..00921abe90 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml @@ -43,6 +43,7 @@ spec: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: base + operator.opentelemetry.io/collector-monitoring-service: "Exists" --- apiVersion: v1 kind: Service @@ -54,6 +55,7 @@ metadata: app.kubernetes.io/name: simplest-collector-monitoring app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: "monitoring" + operator.opentelemetry.io/collector-monitoring-service: "Exists" name: simplest-collector-monitoring namespace: create-sm-prometheus spec: From e5b251cb0762d54a77a0650a42244962259e57f1 Mon Sep 17 00:00:00 2001 From: Israel Blancas Date: Sun, 19 May 2024 04:35:14 +0200 Subject: [PATCH 11/11] Remove wrong labels Signed-off-by: Israel Blancas --- .../create-sm-prometheus-exporters/01-assert.yaml | 1 - .../create-sm-prometheus-exporters/06-assert.yaml | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml index bd94e41ec6..0b2bd613d3 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/01-assert.yaml @@ -44,7 +44,6 @@ spec: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: base - operator.opentelemetry.io/collector-monitoring-service: "Exists" --- apiVersion: v1 kind: Service diff --git a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml index 00921abe90..be594e1a1d 100644 --- a/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml +++ b/tests/e2e-prometheuscr/create-sm-prometheus-exporters/06-assert.yaml @@ -43,7 +43,6 @@ spec: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/part-of: opentelemetry operator.opentelemetry.io/collector-service-type: base - operator.opentelemetry.io/collector-monitoring-service: "Exists" --- apiVersion: v1 kind: Service