Skip to content

Commit 3287076

Browse files
committed
LOG-9356: Implement Collector ServiceMonitor Changes
1 parent ff06c7a commit 3287076

4 files changed

Lines changed: 59 additions & 20 deletions

File tree

internal/controller/observability/collector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func ReconcileCollector(context internalcontext.ForwarderContext, pollInterval,
153153
return err
154154
}
155155
metricsSelector := metrics.BuildSelector(constants.CollectorName, resourceNames.CommonName)
156-
if err := metrics.ReconcileServiceMonitor(context.Client, context.Forwarder.Namespace, resourceNames.CommonName, ownerRef, metricsSelector, constants.MetricsPortName); err != nil {
156+
if err := metrics.ReconcileServiceMonitor(context.Client, context.Forwarder.Namespace, resourceNames.CommonName, ownerRef, metricsSelector, constants.MetricsPortName, metrics.CollectorMetricRelabelConfigs); err != nil {
157157
log.Error(err, "collector.ReconcileServiceMonitor")
158158
return err
159159
}

internal/metrics/logfilemetricexporter/metric_exporter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func Reconcile(lfmeInstance *loggingv1alpha1.LogFileMetricExporter,
7676
}
7777

7878
metricsSelector := metrics.BuildSelector(constants.LogfilesmetricexporterName, lfmeInstance.Name)
79-
if err := metrics.ReconcileServiceMonitor(requestClient, lfmeInstance.Namespace, resNames.CommonName, owner, metricsSelector, constants.MetricsPortName); err != nil {
79+
if err := metrics.ReconcileServiceMonitor(requestClient, lfmeInstance.Namespace, resNames.CommonName, owner, metricsSelector, constants.MetricsPortName, nil); err != nil {
8080
log.Error(err, "logfilemetricexporter.ReconcileServiceMonitor")
8181
return err
8282
}

internal/metrics/service_monitor.go

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,26 @@ const (
1717
prometheusBearerTokenFile = "/var/run/secrets/kubernetes.io/serviceaccount/token"
1818
)
1919

20-
func newServiceMonitor(namespace, name string, owner metav1.OwnerReference, selector map[string]string, portName string) *monitoringv1.ServiceMonitor {
20+
var CollectorMetricRelabelConfigs = []*monitoringv1.RelabelConfig{
21+
{
22+
SourceLabels: []monitoringv1.LabelName{"__name__"},
23+
TargetLabel: "__name__",
24+
Regex: "(.*)-(.*)",
25+
Replacement: "${1}_${2}",
26+
},
27+
{
28+
Action: "keep",
29+
SourceLabels: []monitoringv1.LabelName{"__name__"},
30+
Regex: "logcollector_component_event_unmatched_count|vector_buffer_byte_size|vector_buffer_discarded_events_total|vector_buffer_events|vector_buffer_sent_events_total|vector_component_discarded_events_total|vector_component_errors_total|vector_component_received_bytes_total|vector_component_received_event_bytes_total|vector_component_received_events_total|vector_component_sent_bytes_total|vector_events_in_total|vector_http_client_errors_total|vector_http_client_requests_sent_total|vector_http_client_responses_total|vector_open_files",
31+
},
32+
{
33+
Action: "drop",
34+
SourceLabels: []monitoringv1.LabelName{"component_kind", "__name__"},
35+
Regex: `transform;(vector_component_received_bytes_total|vector_component_received_event_bytes_total|vector_component_received_events_total|vector_component_sent_bytes_total)`,
36+
},
37+
}
38+
39+
func newServiceMonitor(namespace, name string, owner metav1.OwnerReference, selector map[string]string, portName string, metricRelabelConfigs []*monitoringv1.RelabelConfig) *monitoringv1.ServiceMonitor {
2140
var endpoint = []monitoringv1.Endpoint{
2241
{
2342
Port: portName,
@@ -30,19 +49,7 @@ func newServiceMonitor(namespace, name string, owner metav1.OwnerReference, sele
3049
ServerName: fmt.Sprintf("%s.%s.svc", name, namespace),
3150
},
3251
},
33-
// Replaces labels that have `-` with `_`
34-
// Example:
35-
// app_kubernetes_io_part-of -> app_kubernetes_io_part_of
36-
MetricRelabelConfigs: []*monitoringv1.RelabelConfig{
37-
{
38-
SourceLabels: []monitoringv1.LabelName{
39-
"__name__",
40-
},
41-
TargetLabel: "__name__",
42-
Regex: "(.*)-(.*)",
43-
Replacement: "${1}_${2}",
44-
},
45-
},
52+
MetricRelabelConfigs: metricRelabelConfigs,
4653
},
4754
}
4855

@@ -77,7 +84,7 @@ func BuildSelector(component, instance string) map[string]string {
7784
}
7885
}
7986

80-
func ReconcileServiceMonitor(k8sClient client.Client, namespace, name string, owner metav1.OwnerReference, selector map[string]string, portName string) error {
81-
desired := newServiceMonitor(namespace, name, owner, selector, portName)
87+
func ReconcileServiceMonitor(k8sClient client.Client, namespace, name string, owner metav1.OwnerReference, selector map[string]string, portName string, metricRelabelConfigs []*monitoringv1.RelabelConfig) error {
88+
desired := newServiceMonitor(namespace, name, owner, selector, portName, metricRelabelConfigs)
8289
return reconcile.ServiceMonitor(k8sClient, desired)
8390
}

internal/metrics/service_monitor_test.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ var _ = Describe("Reconcile ServiceMonitor", func() {
4545
smInstance = &monitoringv1.ServiceMonitor{}
4646
)
4747

48-
It("should successfully reconcile the ServiceMonitor", func() {
49-
// Reconcile the exporter daemonset
48+
It("should successfully reconcile the ServiceMonitor with collector relabel configs", func() {
5049
Expect(ReconcileServiceMonitor(
5150
reqClient,
5251
constants.OpenshiftNS,
5352
serviceName,
5453
owner,
5554
selector,
5655
portName,
56+
CollectorMetricRelabelConfigs,
5757
)).To(Succeed())
5858

5959
// Get and check the ServiceMonitor
@@ -72,5 +72,37 @@ var _ = Describe("Reconcile ServiceMonitor", func() {
7272

7373
Expect(smInstance.Spec.Endpoints[0].BearerTokenFile).
7474
To(Equal("/var/run/secrets/kubernetes.io/serviceaccount/token"))
75+
76+
By("verifying MetricRelabelConfigs")
77+
relabelConfigs := smInstance.Spec.Endpoints[0].MetricRelabelConfigs
78+
Expect(relabelConfigs).To(HaveLen(3))
79+
80+
Expect(relabelConfigs[0].Regex).To(Equal("(.*)-(.*)"))
81+
Expect(relabelConfigs[0].TargetLabel).To(Equal("__name__"))
82+
83+
Expect(string(relabelConfigs[1].Action)).To(Equal("keep"))
84+
Expect(relabelConfigs[1].SourceLabels).To(Equal([]monitoringv1.LabelName{"__name__"}))
85+
86+
Expect(string(relabelConfigs[2].Action)).To(Equal("drop"))
87+
Expect(relabelConfigs[2].SourceLabels).To(Equal([]monitoringv1.LabelName{"component_kind", "__name__"}))
88+
Expect(relabelConfigs[2].Regex).To(Equal(`transform;(vector_component_received_bytes_total|vector_component_received_event_bytes_total|vector_component_received_events_total|vector_component_sent_bytes_total)`))
89+
})
90+
91+
It("should create a ServiceMonitor with no metric relabel configs when nil is passed", func() {
92+
smName := "test-no-relabel"
93+
Expect(ReconcileServiceMonitor(
94+
reqClient,
95+
constants.OpenshiftNS,
96+
smName,
97+
owner,
98+
selector,
99+
portName,
100+
nil,
101+
)).To(Succeed())
102+
103+
sm := &monitoringv1.ServiceMonitor{}
104+
Expect(reqClient.Get(context.TODO(), types.NamespacedName{Name: smName, Namespace: constants.OpenshiftNS}, sm)).Should(Succeed())
105+
Expect(sm.Spec.Endpoints).ToNot(BeEmpty())
106+
Expect(sm.Spec.Endpoints[0].MetricRelabelConfigs).To(BeNil())
75107
})
76108
})

0 commit comments

Comments
 (0)