Skip to content

Commit 079fa3b

Browse files
committed
Add joblabel customization
1 parent 78e7c2f commit 079fa3b

13 files changed

+102
-2
lines changed

apis/v1alpha1/convert.go

+4
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ func tov1beta1(in OpenTelemetryCollector) (v1beta1.OpenTelemetryCollector, error
131131
Observability: v1beta1.ObservabilitySpec{
132132
Metrics: v1beta1.MetricsConfigSpec{
133133
EnableMetrics: copy.Spec.Observability.Metrics.EnableMetrics,
134+
JobLabel: copy.Spec.Observability.Metrics.JobLabel,
134135
DisablePrometheusAnnotations: copy.Spec.Observability.Metrics.DisablePrometheusAnnotations,
135136
},
136137
},
@@ -174,6 +175,7 @@ func tov1beta1TA(in OpenTelemetryTargetAllocator) v1beta1.TargetAllocatorEmbedde
174175
Observability: v1beta1.ObservabilitySpec{
175176
Metrics: v1beta1.MetricsConfigSpec{
176177
EnableMetrics: in.Observability.Metrics.EnableMetrics,
178+
JobLabel: in.Observability.Metrics.JobLabel,
177179
DisablePrometheusAnnotations: in.Observability.Metrics.DisablePrometheusAnnotations,
178180
},
179181
},
@@ -316,6 +318,7 @@ func tov1alpha1(in v1beta1.OpenTelemetryCollector) (*OpenTelemetryCollector, err
316318
Observability: ObservabilitySpec{
317319
Metrics: MetricsConfigSpec{
318320
EnableMetrics: copy.Spec.Observability.Metrics.EnableMetrics,
321+
JobLabel: copy.Spec.Observability.Metrics.JobLabel,
319322
DisablePrometheusAnnotations: copy.Spec.Observability.Metrics.DisablePrometheusAnnotations,
320323
},
321324
},
@@ -419,6 +422,7 @@ func tov1alpha1TA(in v1beta1.TargetAllocatorEmbedded) OpenTelemetryTargetAllocat
419422
Observability: ObservabilitySpec{
420423
Metrics: MetricsConfigSpec{
421424
EnableMetrics: in.Observability.Metrics.EnableMetrics,
425+
JobLabel: in.Observability.Metrics.JobLabel,
422426
DisablePrometheusAnnotations: in.Observability.Metrics.DisablePrometheusAnnotations,
423427
},
424428
},

apis/v1alpha1/opentelemetrycollector_types.go

+8
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,14 @@ type MetricsConfigSpec struct {
522522
// +kubebuilder:validation:Optional
523523
// +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Create ServiceMonitors for OpenTelemetry Collector"
524524
EnableMetrics bool `json:"enableMetrics,omitempty"`
525+
// JobLabel specifies the label to use for the job in the ServiceMonitor or PodMonitor(for sidecar mode).
526+
// The operator.observability.prometheus feature gate must be enabled to use this feature.
527+
// EnableMetrics must be true to set this.
528+
//
529+
// +optional
530+
// +kubebuilder:validation:Optional
531+
// +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Job Label for generated ServiceMonitors"
532+
JobLabel string `json:"jobLabel,omitempty"`
525533
// DisablePrometheusAnnotations controls the automatic addition of default Prometheus annotations
526534
// ('prometheus.io/scrape', 'prometheus.io/port', and 'prometheus.io/path')
527535
//

apis/v1beta1/opentelemetrycollector_types.go

+8
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,14 @@ type MetricsConfigSpec struct {
261261
// +kubebuilder:validation:Optional
262262
// +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Create ServiceMonitors for OpenTelemetry Collector"
263263
EnableMetrics bool `json:"enableMetrics,omitempty"`
264+
// JobLabel specifies the label to use for the job in the ServiceMonitor or PodMonitor(for sidecar mode).
265+
// The operator.observability.prometheus feature gate must be enabled to use this feature.
266+
// EnableMetrics must be true to set this.
267+
//
268+
// +optional
269+
// +kubebuilder:validation:Optional
270+
// +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Job Label for generated ServiceMonitors"
271+
JobLabel string `json:"jobLabel,omitempty"`
264272
// DisablePrometheusAnnotations controls the automatic addition of default Prometheus annotations
265273
// ('prometheus.io/scrape', 'prometheus.io/port', and 'prometheus.io/path')
266274
//

bundle/manifests/opentelemetry-operator.clusterserviceversion.yaml

+13-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ metadata:
9999
categories: Logging & Tracing,Monitoring
100100
certified: "false"
101101
containerImage: ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator
102-
createdAt: "2024-03-11T13:32:19Z"
102+
createdAt: "2024-03-21T17:09:59Z"
103103
description: Provides the OpenTelemetry components, including the Collector
104104
operators.operatorframework.io/builder: operator-sdk-v1.29.0
105105
operators.operatorframework.io/project_layout: go.kubebuilder.io/v3
@@ -175,6 +175,12 @@ spec:
175175
this feature.
176176
displayName: Create ServiceMonitors for OpenTelemetry Collector
177177
path: observability.metrics.enableMetrics
178+
- description: JobLabel specifies the label to use for the job in the ServiceMonitor
179+
or PodMonitor(for sidecar mode). The operator.observability.prometheus feature
180+
gate must be enabled to use this feature. EnableMetrics must be true to
181+
set this.
182+
displayName: Job Label for generated ServiceMonitors
183+
path: observability.metrics.jobLabel
178184
- description: ObservabilitySpec defines how telemetry data gets handled.
179185
displayName: Observability
180186
path: targetAllocator.observability
@@ -187,6 +193,12 @@ spec:
187193
this feature.
188194
displayName: Create ServiceMonitors for OpenTelemetry Collector
189195
path: targetAllocator.observability.metrics.enableMetrics
196+
- description: JobLabel specifies the label to use for the job in the ServiceMonitor
197+
or PodMonitor(for sidecar mode). The operator.observability.prometheus feature
198+
gate must be enabled to use this feature. EnableMetrics must be true to
199+
set this.
200+
displayName: Job Label for generated ServiceMonitors
201+
path: targetAllocator.observability.metrics.jobLabel
190202
version: v1alpha1
191203
- description: OpenTelemetryCollector is the Schema for the opentelemetrycollectors
192204
API.

bundle/manifests/opentelemetry.io_opentelemetrycollectors.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -2226,6 +2226,8 @@ spec:
22262226
type: boolean
22272227
enableMetrics:
22282228
type: boolean
2229+
jobLabel:
2230+
type: string
22292231
type: object
22302232
type: object
22312233
podAnnotations:
@@ -2933,6 +2935,8 @@ spec:
29332935
type: boolean
29342936
enableMetrics:
29352937
type: boolean
2938+
jobLabel:
2939+
type: string
29362940
type: object
29372941
type: object
29382942
podDisruptionBudget:
@@ -6518,6 +6522,8 @@ spec:
65186522
type: boolean
65196523
enableMetrics:
65206524
type: boolean
6525+
jobLabel:
6526+
type: string
65216527
type: object
65226528
type: object
65236529
podAnnotations:
@@ -7227,6 +7233,8 @@ spec:
72277233
type: boolean
72287234
enableMetrics:
72297235
type: boolean
7236+
jobLabel:
7237+
type: string
72307238
type: object
72317239
type: object
72327240
podDisruptionBudget:

config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -2212,6 +2212,8 @@ spec:
22122212
type: boolean
22132213
enableMetrics:
22142214
type: boolean
2215+
jobLabel:
2216+
type: string
22152217
type: object
22162218
type: object
22172219
podAnnotations:
@@ -2919,6 +2921,8 @@ spec:
29192921
type: boolean
29202922
enableMetrics:
29212923
type: boolean
2924+
jobLabel:
2925+
type: string
29222926
type: object
29232927
type: object
29242928
podDisruptionBudget:
@@ -6504,6 +6508,8 @@ spec:
65046508
type: boolean
65056509
enableMetrics:
65066510
type: boolean
6511+
jobLabel:
6512+
type: string
65076513
type: object
65086514
type: object
65096515
podAnnotations:
@@ -7213,6 +7219,8 @@ spec:
72137219
type: boolean
72147220
enableMetrics:
72157221
type: boolean
7222+
jobLabel:
7223+
type: string
72167224
type: object
72177225
type: object
72187226
podDisruptionBudget:

config/crd/bases/opentelemetry.io_targetallocators.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -2111,6 +2111,8 @@ spec:
21112111
type: boolean
21122112
enableMetrics:
21132113
type: boolean
2114+
jobLabel:
2115+
type: string
21142116
type: object
21152117
type: object
21162118
podAnnotations:

config/manifests/bases/opentelemetry-operator.clusterserviceversion.yaml

+12
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@ spec:
137137
this feature.
138138
displayName: Create ServiceMonitors for OpenTelemetry Collector
139139
path: observability.metrics.enableMetrics
140+
- description: JobLabel specifies the label to use for the job in the ServiceMonitor
141+
or PodMonitor(for sidecar mode). The operator.observability.prometheus feature
142+
gate must be enabled to use this feature. EnableMetrics must be true to
143+
set this.
144+
displayName: Job Label for generated ServiceMonitors
145+
path: observability.metrics.jobLabel
140146
- description: ObservabilitySpec defines how telemetry data gets handled.
141147
displayName: Observability
142148
path: targetAllocator.observability
@@ -149,6 +155,12 @@ spec:
149155
this feature.
150156
displayName: Create ServiceMonitors for OpenTelemetry Collector
151157
path: targetAllocator.observability.metrics.enableMetrics
158+
- description: JobLabel specifies the label to use for the job in the ServiceMonitor
159+
or PodMonitor(for sidecar mode). The operator.observability.prometheus feature
160+
gate must be enabled to use this feature. EnableMetrics must be true to
161+
set this.
162+
displayName: Job Label for generated ServiceMonitors
163+
path: targetAllocator.observability.metrics.jobLabel
152164
version: v1alpha1
153165
description: |-
154166
OpenTelemetry is a collection of tools, APIs, and SDKs. You use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior.

docs/api.md

+28
Original file line numberDiff line numberDiff line change
@@ -17809,6 +17809,13 @@ Resource Types:
1780917809
<br/>
1781017810
</td>
1781117811
<td>false</td>
17812+
</tr><tr>
17813+
<td><b>jobLabel</b></td>
17814+
<td>string</td>
17815+
<td>
17816+
<br/>
17817+
</td>
17818+
<td>false</td>
1781217819
</tr></tbody>
1781317820
</table>
1781417821

@@ -20315,6 +20322,13 @@ Resource Types:
2031520322
<br/>
2031620323
</td>
2031720324
<td>false</td>
20325+
</tr><tr>
20326+
<td><b>jobLabel</b></td>
20327+
<td>string</td>
20328+
<td>
20329+
<br/>
20330+
</td>
20331+
<td>false</td>
2031820332
</tr></tbody>
2031920333
</table>
2032020334

@@ -33688,6 +33702,13 @@ Resource Types:
3368833702
<br/>
3368933703
</td>
3369033704
<td>false</td>
33705+
</tr><tr>
33706+
<td><b>jobLabel</b></td>
33707+
<td>string</td>
33708+
<td>
33709+
<br/>
33710+
</td>
33711+
<td>false</td>
3369133712
</tr></tbody>
3369233713
</table>
3369333714

@@ -36195,6 +36216,13 @@ Resource Types:
3619536216
<br/>
3619636217
</td>
3619736218
<td>false</td>
36219+
</tr><tr>
36220+
<td><b>jobLabel</b></td>
36221+
<td>string</td>
36222+
<td>
36223+
<br/>
36224+
</td>
36225+
<td>false</td>
3619836226
</tr></tbody>
3619936227
</table>
3620036228

internal/manifests/collector/podmonitor.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,18 @@ func PodMonitor(params manifests.Params) (*monitoringv1.PodMonitor, error) {
4545
name := naming.PodMonitor(params.OtelCol.Name)
4646
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, nil)
4747
selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector)
48+
jobLabel := params.OtelCol.Spec.Observability.Metrics.JobLabel
49+
if len(jobLabel) == 0 {
50+
jobLabel = "app.kubernetes.io/instance"
51+
}
4852
pm = monitoringv1.PodMonitor{
4953
ObjectMeta: metav1.ObjectMeta{
5054
Namespace: params.OtelCol.Namespace,
5155
Name: name,
5256
Labels: labels,
5357
},
5458
Spec: monitoringv1.PodMonitorSpec{
55-
JobLabel: "app.kubernetes.io/instance",
59+
JobLabel: jobLabel,
5660
PodTargetLabels: []string{"app.kubernetes.io/name", "app.kubernetes.io/instance", "app.kubernetes.io/managed-by"},
5761
NamespaceSelector: monitoringv1.NamespaceSelector{
5862
MatchNames: []string{params.OtelCol.Namespace},

internal/manifests/collector/podmonitor_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func TestDesiredPodMonitors(t *testing.T) {
3636
assert.Nil(t, actual)
3737

3838
params.OtelCol.Spec.Observability.Metrics.EnableMetrics = true
39+
params.OtelCol.Spec.Observability.Metrics.JobLabel = "app.kubernetes.io/name"
3940
actual, err = PodMonitor(params)
4041
assert.NoError(t, err)
4142
assert.NotNil(t, actual)
@@ -49,6 +50,7 @@ func TestDesiredPodMonitors(t *testing.T) {
4950
"app.kubernetes.io/part-of": "opentelemetry",
5051
}
5152
assert.Equal(t, expectedSelectorLabels, actual.Spec.Selector.MatchLabels)
53+
assert.Equal(t, "app.kubernetes.io/name", actual.Spec.JobLabel)
5254
}
5355

5456
func TestDesiredPodMonitorsWithPrometheus(t *testing.T) {
@@ -71,4 +73,5 @@ func TestDesiredPodMonitorsWithPrometheus(t *testing.T) {
7173
"app.kubernetes.io/component": "opentelemetry-collector",
7274
}
7375
assert.Equal(t, expectedSelectorLabels, actual.Spec.Selector.MatchLabels)
76+
assert.Equal(t, "app.kubernetes.io/instance", actual.Spec.JobLabel)
7477
}

internal/manifests/collector/servicemonitor.go

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ func ServiceMonitor(params manifests.Params) (*monitoringv1.ServiceMonitor, erro
5454
Labels: labels,
5555
},
5656
Spec: monitoringv1.ServiceMonitorSpec{
57+
JobLabel: params.OtelCol.Spec.Observability.Metrics.JobLabel,
5758
Endpoints: append([]monitoringv1.Endpoint{
5859
{
5960
Port: "monitoring",

internal/manifests/collector/servicemonitor_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func TestDesiredServiceMonitors(t *testing.T) {
2929
assert.Nil(t, actual)
3030

3131
params.OtelCol.Spec.Observability.Metrics.EnableMetrics = true
32+
params.OtelCol.Spec.Observability.Metrics.JobLabel = "app.kubernetes.io/name"
3233
actual, err = ServiceMonitor(params)
3334
assert.NoError(t, err)
3435
assert.NotNil(t, actual)
@@ -43,6 +44,7 @@ func TestDesiredServiceMonitors(t *testing.T) {
4344
"operator.opentelemetry.io/collector-monitoring-service": "Exists",
4445
}
4546
assert.Equal(t, expectedSelectorLabels, actual.Spec.Selector.MatchLabels)
47+
assert.Equal(t, "app.kubernetes.io/name", actual.Spec.JobLabel)
4648
}
4749

4850
func TestDesiredServiceMonitorsWithPrometheus(t *testing.T) {

0 commit comments

Comments
 (0)