Skip to content

Commit

Permalink
Relabeling to release for precreatednamespaces and also namespaceFree…
Browse files Browse the repository at this point in the history
…FormEntry (#1887)

* Relabeling to release for precreatednamespaces

* Added same config to namespaceFreeFormEntry too. Also wrote tests

* Added same config to namespaceFreeFormEntry too. Also wrote tests for this new template

* Run pre-commit

* Run pre-commit and took merge

* Run pre-commit and took merge
  • Loading branch information
rujhan-arora-astronomer committed May 18, 2023
1 parent 99d9df8 commit 3db0523
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 7 deletions.
15 changes: 11 additions & 4 deletions charts/prometheus/templates/prometheus-config-configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -270,14 +270,21 @@ data:
- regex: 'label_kubernetes_pod_operator'
action: labeldrop
# Required for multi-namespace mode
{{- if or .Values.global.features.namespacePools.enabled .Values.global.namespaceFreeFormEntry }}
- source_labels: [pod]
regex: "(.*?)(?:-webserver.*|-scheduler.*|-cleanup.*|-pgbouncer.*|-statsd.*|-triggerer.*|-run-airflow-migrations.*)?$"
replacement: "$1"
target_label: release
- source_labels: [resourcequota]
regex: "(.+)-resource-quota$"
replacement: "$1"
target_label: release
{{- else}}
- source_labels: [namespace]
{{- if .Values.global.namespaceFreeFormEntry }}
# use default regex pattern (.*) when namespaceFreeFormEntry is enabled
{{- else}}
regex: "^{{ .Release.Namespace }}-(.*$)"
replacement: "$1"
{{- end}}
target_label: release
{{- end }}
{{- else}}
# this drops node metrics that we want in the cloud, but maybe shouldn't be scraping
# if we are in a shared cluster in enterprise
Expand Down
68 changes: 65 additions & 3 deletions tests/chart_tests/test_prometheus_config_configmap.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,13 @@ def test_prometheus_config_configmap_without_node_exporter(self, kube_version):

def test_prometheus_config_release_relabel(self, kube_version):
"""Prometheus should have a regex for release name."""
namespace = "testnamespace"
doc = render_chart(
kube_version=kube_version,
show_only=self.show_only,
namespace=namespace,
values={
"global": {"features": {"namespacePools": {"enabled": False}}},
"astronomer": {
"houston": {
"config": {"deployments": {"namespaceFreeFormEntry": False}},
Expand All @@ -198,8 +201,12 @@ def test_prometheus_config_release_relabel(self, kube_version):
"metric_relabel_configs[?target_label == 'release']",
scrape_config_search_result[0],
)
assert metric_relabel_config_search_result[0]["regex"] == "^default-(.*$)"

assert len(metric_relabel_config_search_result) == 1
assert metric_relabel_config_search_result[0]["source_labels"] == ["namespace"]
assert metric_relabel_config_search_result[0]["regex"] == "^testnamespace-(.*$)"
assert metric_relabel_config_search_result[0]["replacement"] == "$1"
assert metric_relabel_config_search_result[0]["target_label"] == "release"

def test_prometheus_config_release_relabel_with_free_from_namespace(
self, kube_version
Expand All @@ -222,8 +229,22 @@ def test_prometheus_config_release_relabel_with_free_from_namespace(
"metric_relabel_configs[?target_label == 'release']",
scrape_config_search_result[0],
)
assert "regex" not in metric_relabel_config_search_result[0]
assert "replacement" not in metric_relabel_config_search_result[0]

assert len(metric_relabel_config_search_result) == 2
assert (
metric_relabel_config_search_result[0]["regex"]
== "(.*?)(?:-webserver.*|-scheduler.*|-cleanup.*|-pgbouncer.*|-statsd.*|-triggerer.*|-run-airflow-migrations.*)?$"
)
assert metric_relabel_config_search_result[0]["source_labels"] == ["pod"]
assert metric_relabel_config_search_result[0]["replacement"] == "$1"
assert metric_relabel_config_search_result[0]["target_label"] == "release"

assert metric_relabel_config_search_result[1]["regex"] == "(.+)-resource-quota$"
assert metric_relabel_config_search_result[1]["source_labels"] == [
"resourcequota"
]
assert metric_relabel_config_search_result[1]["replacement"] == "$1"
assert metric_relabel_config_search_result[1]["target_label"] == "release"

def test_prometheus_config_insecure_skip_verify(self, kube_version):
"""Test that insecure_skip_verify is rendered correctly in the config when specified."""
Expand All @@ -249,3 +270,44 @@ def test_prometheus_config_insecure_skip_verify(self, kube_version):
for x in list(config_yaml["scrape_configs"])
if x["job_name"] == "kubernetes-apiservers"
] == [True]

def test_prometheus_config_release_relabel_with_pre_created_namespace(
self, kube_version
):
"""Prometheus should have a regex for release name when namespacePools
namespace is enabled."""
doc = render_chart(
kube_version=kube_version,
show_only=self.show_only,
values={
"global": {
"features": {"namespacePools": {"enabled": True}},
"namespaceFreeFormEntry": False,
}
},
)[0]

config = yaml.safe_load(doc["data"]["config"])
scrape_config_search_result = jmespath.search(
"scrape_configs[?job_name == 'kube-state']", config
)
metric_relabel_config_search_result = jmespath.search(
"metric_relabel_configs[?target_label == 'release']",
scrape_config_search_result[0],
)

assert len(metric_relabel_config_search_result) == 2
assert (
metric_relabel_config_search_result[0]["regex"]
== "(.*?)(?:-webserver.*|-scheduler.*|-cleanup.*|-pgbouncer.*|-statsd.*|-triggerer.*|-run-airflow-migrations.*)?$"
)
assert metric_relabel_config_search_result[0]["source_labels"] == ["pod"]
assert metric_relabel_config_search_result[0]["replacement"] == "$1"
assert metric_relabel_config_search_result[0]["target_label"] == "release"

assert metric_relabel_config_search_result[1]["regex"] == "(.+)-resource-quota$"
assert metric_relabel_config_search_result[1]["source_labels"] == [
"resourcequota"
]
assert metric_relabel_config_search_result[1]["replacement"] == "$1"
assert metric_relabel_config_search_result[1]["target_label"] == "release"

0 comments on commit 3db0523

Please sign in to comment.