diff --git a/Makefile b/Makefile index 11b08595..590080a8 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,7 @@ kustomize: check-and-test: $(CMD) -t rhtap -d rhobs/alerting/data_plane -y -p --tests-dir test/promql/tests/data_plane $(CMD) -t rhtap -d rhobs/alerting/control_plane -y -p --tests-dir test/promql/tests/control_plane + $(CMD) -t rhtap -d rhobs/recording -y -p --tests-dir test/promql/tests/recording .PHONY: install_pipenv install_pipenv: diff --git a/exporters/dsexporter/dsexporter.go b/exporters/dsexporter/dsexporter.go index 589b22d8..4491f3f5 100644 --- a/exporters/dsexporter/dsexporter.go +++ b/exporters/dsexporter/dsexporter.go @@ -14,7 +14,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/config" ) -const service = "grafana" const check = "prometheus-appstudio-ds" var allDataSources = GetDataSources @@ -26,10 +25,10 @@ type CustomCollector struct { func NewCustomCollector() *CustomCollector { return &CustomCollector{ konfluxUp: prometheus.NewGaugeVec(prometheus.GaugeOpts{ - Name: "konflux_up", + Name: "grafana_ds_up", Help: "Availability of the Konflux default grafana datasource", }, - []string{"service", "check"}), + []string{"check"}), } } @@ -53,7 +52,7 @@ func (e *CustomCollector) Collect(ch chan<- prometheus.Metric) { } } - e.konfluxUp.WithLabelValues(service, check).Set(availability) + e.konfluxUp.WithLabelValues(check).Set(availability) e.konfluxUp.Collect(ch) } diff --git a/rhobs/recording/exporter_recording_rules.yml b/rhobs/recording/exporter_recording_rules.yml new file mode 100644 index 00000000..b563e2ea --- /dev/null +++ b/rhobs/recording/exporter_recording_rules.yml @@ -0,0 +1,15 @@ +# Metric format needed +# grafana_ds_up(check=prometheus-appstudio-ds) -> konflux_up(service=grafana, check=prometheus-appstudio-ds) +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: rhtap-exporter-label-replace + labels: + tenant: rhtap +spec: + groups: + - name: exporter + interval: 1m + rules: + - record: konflux_up + expr: label_replace(grafana_ds_up, "service", "grafana", "__name__", "(.+)") diff --git a/test/promql/tests/recording/exporter_recording_rules_test.yml b/test/promql/tests/recording/exporter_recording_rules_test.yml new file mode 100644 index 00000000..53fd2e4f --- /dev/null +++ b/test/promql/tests/recording/exporter_recording_rules_test.yml @@ -0,0 +1,25 @@ +evaluation_interval: 1m + +rule_files: +- exporter_recording_rules.yml + +tests: +- interval: 1m + name: DSExporterTest + input_series: + - series: "grafana_ds_up{check='appstudio-ds'}" + values: "1 1 1 1 1" + - series: "grafana_ds_up{check='github'}" + values: "0 0 0 0 0" + - series: "grafana_ds_up{other_label='sso'}" + values: "0 1 0 1 0" + promql_expr_test: + - expr: konflux_up + eval_time: 5m + exp_samples: + - labels: konflux_up{service='grafana', check='appstudio-ds'} + value: 1 + - labels: konflux_up{service='grafana', check='github'} + value: 0 + - labels: konflux_up{service='grafana', other_label='sso'} + value: 0