Skip to content

Commit 559979f

Browse files
Merge pull request #902 from lmiccini/add-instanceha-scrapeconfig
Add scrapeconfig discovery for InstanceHA metrics
2 parents 36b47be + f56a5ad commit 559979f

4 files changed

Lines changed: 88 additions & 6 deletions

File tree

internal/controller/metricstorage_controller.go

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,12 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
897897
return ctrl.Result{}, err
898898
}
899899

900+
// ScrapeConfig for InstanceHA metrics
901+
err = r.createInstanceHAScrapeConfig(ctx, instance, helper, serviceLabels)
902+
if err != nil {
903+
return ctrl.Result{}, err
904+
}
905+
900906
instance.Status.Conditions.MarkTrue(telemetryv1.ScrapeConfigReadyCondition, condition.ReadyMessage)
901907
return ctrl.Result{}, nil
902908
}
@@ -1112,6 +1118,25 @@ func (r *MetricStorageReconciler) createOVSDBServerSBScrapeConfig(
11121118
)
11131119
}
11141120

1121+
// createInstanceHAScrapeConfig creates a scrape configuration for InstanceHA metrics
1122+
// This function discovers InstanceHA metrics services using label selectors
1123+
func (r *MetricStorageReconciler) createInstanceHAScrapeConfig(
1124+
ctx context.Context,
1125+
instance *telemetryv1.MetricStorage,
1126+
helper *helper.Helper,
1127+
serviceLabels map[string]string,
1128+
) error {
1129+
labelSelector := map[string]string{
1130+
"metrics": "enabled",
1131+
"service": "instanceha",
1132+
}
1133+
instancehaCfgName := fmt.Sprintf("%s-instanceha", telemetry.ServiceName)
1134+
return r.createServiceScrapeConfigFromLabelSelector(
1135+
ctx, instance, helper, serviceLabels,
1136+
labelSelector, "metrics", instancehaCfgName, "InstanceHA",
1137+
)
1138+
}
1139+
11151140
func (r *MetricStorageReconciler) createDashboardObjects(ctx context.Context, instance *telemetryv1.MetricStorage, helper *helper.Helper, eventHandler handler.EventHandler, serviceLabels map[string]string) (ctrl.Result, error) {
11161141
Log := r.GetLogger(ctx)
11171142
uiPluginObj := &obsui.UIPlugin{
@@ -1492,13 +1517,11 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
14921517
return nil
14931518
}
14941519

1495-
ovnMetricsServiceWatchFn := func(_ context.Context, o client.Object) []reconcile.Request {
1520+
metricsServiceWatchFn := func(_ context.Context, o client.Object) []reconcile.Request {
14961521
result := []reconcile.Request{}
14971522

1498-
// Watch OVN metrics services
14991523
if labels := o.GetLabels(); labels != nil {
1500-
if labels["metrics"] == "enabled" && (labels["service"] == "ovn-northd" || labels["service"] == "ovn-controller-metrics" || labels["service"] == "ovsdbserver-nb" || labels["service"] == "ovsdbserver-sb") {
1501-
// get all metricstorage CRs in the same namespace
1524+
if labels["metrics"] == "enabled" && (labels["service"] == "ovn-northd" || labels["service"] == "ovn-controller-metrics" || labels["service"] == "ovsdbserver-nb" || labels["service"] == "ovsdbserver-sb" || labels["service"] == "instanceha") {
15021525
metricStorages := &telemetryv1.MetricStorageList{}
15031526
listOpts := []client.ListOption{
15041527
client.InNamespace(o.GetNamespace()),
@@ -1513,7 +1536,7 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
15131536
Namespace: o.GetNamespace(),
15141537
Name: cr.Name,
15151538
}
1516-
Log.Info(fmt.Sprintf("OVN metrics service %s changed, reconciling MetricStorage CR %s", o.GetName(), cr.Name))
1539+
Log.Info(fmt.Sprintf("Metrics service %s changed, reconciling MetricStorage CR %s", o.GetName(), cr.Name))
15171540
result = append(result, reconcile.Request{NamespacedName: name})
15181541
}
15191542
}
@@ -1587,7 +1610,7 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
15871610
Watches(&corev1.Service{},
15881611
handler.EnqueueRequestsFromMapFunc(prometheusServiceWatchFn)).
15891612
Watches(&corev1.Service{},
1590-
handler.EnqueueRequestsFromMapFunc(ovnMetricsServiceWatchFn)).
1613+
handler.EnqueueRequestsFromMapFunc(metricsServiceWatchFn)).
15911614
Watches(
15921615
&corev1.Secret{},
15931616
handler.EnqueueRequestsFromMapFunc(r.findObjectsForSrc),

test/kuttl/tests/metricstorage/01-assert.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,27 @@ spec:
140140
---
141141
apiVersion: monitoring.rhobs/v1alpha1
142142
kind: ScrapeConfig
143+
metadata:
144+
labels:
145+
service: metricStorage
146+
name: telemetry-instanceha
147+
ownerReferences:
148+
- kind: MetricStorage
149+
name: telemetry-kuttl
150+
spec:
151+
scrapeInterval: 30s
152+
metricRelabelings:
153+
- action: labeldrop
154+
regex: pod
155+
- action: labeldrop
156+
regex: namespace
157+
- action: labeldrop
158+
regex: job
159+
- action: labeldrop
160+
regex: publisher
161+
---
162+
apiVersion: monitoring.rhobs/v1alpha1
163+
kind: ScrapeConfig
143164
metadata:
144165
labels:
145166
service: metricStorage

test/kuttl/tests/metricstorage/01-deploy.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,23 @@ spec:
1515
pvcStorageRequest: 20G
1616
networkAttachments: []
1717
---
18+
# Required, so that the instanceha scrapeconfig is created
19+
apiVersion: v1
20+
kind: Service
21+
metadata:
22+
name: instanceha-0-metrics
23+
labels:
24+
metrics: enabled
25+
service: instanceha
26+
spec:
27+
ports:
28+
- name: metrics
29+
port: 8080
30+
protocol: TCP
31+
targetPort: 8080
32+
selector:
33+
service: instanceha
34+
---
1835
# Required, so that the mysqld_exporter scrapeconfig is created
1936
apiVersion: telemetry.openstack.org/v1beta1
2037
kind: Ceilometer

test/kuttl/tests/metricstorage/04-assert.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,24 @@ metadata:
148148
name: telemetry-kuttl
149149
spec:
150150
scrapeInterval: 40s
151+
---
152+
apiVersion: monitoring.rhobs/v1alpha1
153+
kind: ScrapeConfig
154+
metadata:
155+
labels:
156+
service: metricStorage
157+
name: telemetry-instanceha
158+
ownerReferences:
159+
- kind: MetricStorage
160+
name: telemetry-kuttl
161+
spec:
162+
scrapeInterval: 40s
163+
metricRelabelings:
164+
- action: labeldrop
165+
regex: pod
166+
- action: labeldrop
167+
regex: namespace
168+
- action: labeldrop
169+
regex: job
170+
- action: labeldrop
171+
regex: publisher

0 commit comments

Comments
 (0)