From 95d4e4e72534e5f96989b64bba21dc8c8b5ba379 Mon Sep 17 00:00:00 2001
From: Simon Pasquier
Date: Thu, 7 Nov 2024 17:47:02 +0100
Subject: [PATCH] feat: support scrape protocol 'PrometheusText1.0.0'
Signed-off-by: Simon Pasquier
---
CHANGELOG.md | 1 +
Documentation/api.md | 27 +++++++++-
bundle.yaml | 16 ++++++
.../monitoring.coreos.com_podmonitors.yaml | 2 +
.../monitoring.coreos.com_probes.yaml | 2 +
...onitoring.coreos.com_prometheusagents.yaml | 4 ++
.../monitoring.coreos.com_prometheuses.yaml | 4 ++
.../monitoring.coreos.com_scrapeconfigs.yaml | 2 +
...monitoring.coreos.com_servicemonitors.yaml | 2 +
.../monitoring.coreos.com_podmonitors.yaml | 2 +
.../monitoring.coreos.com_probes.yaml | 2 +
...onitoring.coreos.com_prometheusagents.yaml | 4 ++
.../monitoring.coreos.com_prometheuses.yaml | 4 ++
.../monitoring.coreos.com_scrapeconfigs.yaml | 2 +
...monitoring.coreos.com_servicemonitors.yaml | 2 +
.../prometheus-operator/podmonitors-crd.json | 5 +-
jsonnet/prometheus-operator/probes-crd.json | 5 +-
.../prometheusagents-crd.json | 7 +--
.../prometheus-operator/prometheuses-crd.json | 7 +--
.../scrapeconfigs-crd.json | 5 +-
.../servicemonitors-crd.json | 5 +-
pkg/apis/monitoring/v1/prometheus_types.go | 13 ++++-
pkg/prometheus/promcfg.go | 40 +++++++-------
pkg/prometheus/promcfg_test.go | 54 +++++++++++++------
...bal_config_with_new_scrape_protocol.golden | 9 ++++
...global_config_with_scrape_protocols.golden | 1 +
...g_with_unsupported_scrape_protocols.golden | 7 +++
27 files changed, 182 insertions(+), 52 deletions(-)
create mode 100644 pkg/prometheus/testdata/valid_global_config_with_new_scrape_protocol.golden
create mode 100644 pkg/prometheus/testdata/valid_global_config_with_unsupported_scrape_protocols.golden
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 12f9f84ea..88008ec4a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
## Unreleased
+* [ENHANCEMENT] Add support for the `PrometheusText1.0.0` scrape protocol. #7085
* [BUGFIX] Add `goGC` field to `PrometheusAgent` CRD. #6667
## 0.78.1 / 2024-10-30
diff --git a/Documentation/api.md b/Documentation/api.md
index 0835fa11a..5d7faea9a 100644
--- a/Documentation/api.md
+++ b/Documentation/api.md
@@ -1959,6 +1959,7 @@ Duration
protocols supported by Prometheus in order of preference (from most to least preferred).
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+PrometheusText1.0.0 requires Prometheus >= v3.0.0.
@@ -6882,6 +6883,7 @@ Duration
protocols supported by Prometheus in order of preference (from most to least preferred).
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+PrometheusText1.0.0 requires Prometheus >= v3.0.0.
@@ -11589,6 +11591,7 @@ Duration
protocols supported by Prometheus in order of preference (from most to least preferred).
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+PrometheusText1.0.0 requires Prometheus >= v3.0.0.
@@ -14966,8 +14969,28 @@ Supported values are:
* OpenMetricsText0.0.1
* OpenMetricsText1.0.0
* PrometheusProto
-* PrometheusText0.0.4
+* PrometheusText0.0.4
+* PrometheusText1.0.0
+
+
+
+| Value |
+Description |
+
+
+"OpenMetricsText0.0.1" |
+ |
+
"OpenMetricsText1.0.0" |
+ |
+
"PrometheusProto" |
+ |
+
"PrometheusText0.0.4" |
+ |
+
"PrometheusText1.0.0" |
+ |
+
+
SecretOrConfigMap
@@ -18127,6 +18150,7 @@ Duration
protocols supported by Prometheus in order of preference (from most to least preferred).
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+PrometheusText1.0.0 requires Prometheus >= v3.0.0.
@@ -25954,6 +25978,7 @@ Duration
protocols supported by Prometheus in order of preference (from most to least preferred).
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+PrometheusText1.0.0 requires Prometheus >= v3.0.0.
diff --git a/bundle.yaml b/bundle.yaml
index 3179605fe..e9780b99d 100644
--- a/bundle.yaml
+++ b/bundle.yaml
@@ -19706,11 +19706,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
@@ -20476,11 +20478,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
@@ -27733,6 +27737,8 @@ spec:
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+
+ `PrometheusText1.0.0` requires Prometheus >= v3.0.0.
items:
description: |-
ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.
@@ -27741,11 +27747,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
@@ -39998,6 +40006,8 @@ spec:
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+
+ `PrometheusText1.0.0` requires Prometheus >= v3.0.0.
items:
description: |-
ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.
@@ -40006,11 +40016,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
@@ -55738,11 +55750,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
minItems: 1
type: array
@@ -57084,11 +57098,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd-full/monitoring.coreos.com_podmonitors.yaml b/example/prometheus-operator-crd-full/monitoring.coreos.com_podmonitors.yaml
index 0a7cd61e8..493066dda 100644
--- a/example/prometheus-operator-crd-full/monitoring.coreos.com_podmonitors.yaml
+++ b/example/prometheus-operator-crd-full/monitoring.coreos.com_podmonitors.yaml
@@ -1102,11 +1102,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd-full/monitoring.coreos.com_probes.yaml b/example/prometheus-operator-crd-full/monitoring.coreos.com_probes.yaml
index b85e986d0..2f2d320a7 100644
--- a/example/prometheus-operator-crd-full/monitoring.coreos.com_probes.yaml
+++ b/example/prometheus-operator-crd-full/monitoring.coreos.com_probes.yaml
@@ -697,11 +697,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheusagents.yaml b/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheusagents.yaml
index 81ff368a6..a81dded83 100644
--- a/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheusagents.yaml
+++ b/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheusagents.yaml
@@ -6794,6 +6794,8 @@ spec:
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+
+ `PrometheusText1.0.0` requires Prometheus >= v3.0.0.
items:
description: |-
ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.
@@ -6802,11 +6804,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheuses.yaml b/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheuses.yaml
index 397601faa..2237c01a2 100644
--- a/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheuses.yaml
+++ b/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheuses.yaml
@@ -8440,6 +8440,8 @@ spec:
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+
+ `PrometheusText1.0.0` requires Prometheus >= v3.0.0.
items:
description: |-
ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.
@@ -8448,11 +8450,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd-full/monitoring.coreos.com_scrapeconfigs.yaml b/example/prometheus-operator-crd-full/monitoring.coreos.com_scrapeconfigs.yaml
index 4d2af6080..0b133cef2 100644
--- a/example/prometheus-operator-crd-full/monitoring.coreos.com_scrapeconfigs.yaml
+++ b/example/prometheus-operator-crd-full/monitoring.coreos.com_scrapeconfigs.yaml
@@ -11244,11 +11244,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
minItems: 1
type: array
diff --git a/example/prometheus-operator-crd-full/monitoring.coreos.com_servicemonitors.yaml b/example/prometheus-operator-crd-full/monitoring.coreos.com_servicemonitors.yaml
index ff04d5139..07ad3c462 100644
--- a/example/prometheus-operator-crd-full/monitoring.coreos.com_servicemonitors.yaml
+++ b/example/prometheus-operator-crd-full/monitoring.coreos.com_servicemonitors.yaml
@@ -1122,11 +1122,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml b/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
index e46df62a9..36b1fff27 100644
--- a/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
+++ b/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
@@ -1103,11 +1103,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml b/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
index ef286a926..d91a39ba6 100644
--- a/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
+++ b/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
@@ -698,11 +698,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml b/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml
index 4a656ea84..8b5a5cbd9 100644
--- a/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml
+++ b/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml
@@ -6795,6 +6795,8 @@ spec:
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+
+ `PrometheusText1.0.0` requires Prometheus >= v3.0.0.
items:
description: |-
ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.
@@ -6803,11 +6805,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml b/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
index c308ceb3e..1ea556b82 100644
--- a/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
+++ b/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
@@ -8441,6 +8441,8 @@ spec:
If unset, Prometheus uses its default value.
It requires Prometheus >= v2.49.0.
+
+ `PrometheusText1.0.0` requires Prometheus >= v3.0.0.
items:
description: |-
ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.
@@ -8449,11 +8451,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml b/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
index 19f5bc3c7..ad3d60d89 100644
--- a/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
+++ b/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
@@ -11245,11 +11245,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
minItems: 1
type: array
diff --git a/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml b/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
index fcd004d9b..2c1980119 100644
--- a/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
+++ b/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
@@ -1123,11 +1123,13 @@ spec:
* `OpenMetricsText1.0.0`
* `PrometheusProto`
* `PrometheusText0.0.4`
+ * `PrometheusText1.0.0`
enum:
- PrometheusProto
- OpenMetricsText0.0.1
- OpenMetricsText1.0.0
- PrometheusText0.0.4
+ - PrometheusText1.0.0
type: string
type: array
x-kubernetes-list-type: set
diff --git a/jsonnet/prometheus-operator/podmonitors-crd.json b/jsonnet/prometheus-operator/podmonitors-crd.json
index 0a3742902..3fb6af3ff 100644
--- a/jsonnet/prometheus-operator/podmonitors-crd.json
+++ b/jsonnet/prometheus-operator/podmonitors-crd.json
@@ -945,12 +945,13 @@
"scrapeProtocols": {
"description": "`scrapeProtocols` defines the protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.",
"items": {
- "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`",
+ "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`\n* `PrometheusText1.0.0`",
"enum": [
"PrometheusProto",
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
- "PrometheusText0.0.4"
+ "PrometheusText0.0.4",
+ "PrometheusText1.0.0"
],
"type": "string"
},
diff --git a/jsonnet/prometheus-operator/probes-crd.json b/jsonnet/prometheus-operator/probes-crd.json
index 467b85e7a..a85f31588 100644
--- a/jsonnet/prometheus-operator/probes-crd.json
+++ b/jsonnet/prometheus-operator/probes-crd.json
@@ -629,12 +629,13 @@
"scrapeProtocols": {
"description": "`scrapeProtocols` defines the protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.",
"items": {
- "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`",
+ "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`\n* `PrometheusText1.0.0`",
"enum": [
"PrometheusProto",
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
- "PrometheusText0.0.4"
+ "PrometheusText0.0.4",
+ "PrometheusText1.0.0"
],
"type": "string"
},
diff --git a/jsonnet/prometheus-operator/prometheusagents-crd.json b/jsonnet/prometheus-operator/prometheusagents-crd.json
index 6b6fbaa12..95de18baa 100644
--- a/jsonnet/prometheus-operator/prometheusagents-crd.json
+++ b/jsonnet/prometheus-operator/prometheusagents-crd.json
@@ -5813,14 +5813,15 @@
"type": "string"
},
"scrapeProtocols": {
- "description": "The protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.",
+ "description": "The protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.\n\n`PrometheusText1.0.0` requires Prometheus >= v3.0.0.",
"items": {
- "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`",
+ "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`\n* `PrometheusText1.0.0`",
"enum": [
"PrometheusProto",
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
- "PrometheusText0.0.4"
+ "PrometheusText0.0.4",
+ "PrometheusText1.0.0"
],
"type": "string"
},
diff --git a/jsonnet/prometheus-operator/prometheuses-crd.json b/jsonnet/prometheus-operator/prometheuses-crd.json
index 5682e91b2..eb3deeeb8 100644
--- a/jsonnet/prometheus-operator/prometheuses-crd.json
+++ b/jsonnet/prometheus-operator/prometheuses-crd.json
@@ -7271,14 +7271,15 @@
"type": "string"
},
"scrapeProtocols": {
- "description": "The protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.",
+ "description": "The protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.\n\n`PrometheusText1.0.0` requires Prometheus >= v3.0.0.",
"items": {
- "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`",
+ "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`\n* `PrometheusText1.0.0`",
"enum": [
"PrometheusProto",
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
- "PrometheusText0.0.4"
+ "PrometheusText0.0.4",
+ "PrometheusText1.0.0"
],
"type": "string"
},
diff --git a/jsonnet/prometheus-operator/scrapeconfigs-crd.json b/jsonnet/prometheus-operator/scrapeconfigs-crd.json
index dbcb2d1cd..85a1964b2 100644
--- a/jsonnet/prometheus-operator/scrapeconfigs-crd.json
+++ b/jsonnet/prometheus-operator/scrapeconfigs-crd.json
@@ -10667,12 +10667,13 @@
"scrapeProtocols": {
"description": "The protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.",
"items": {
- "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`",
+ "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`\n* `PrometheusText1.0.0`",
"enum": [
"PrometheusProto",
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
- "PrometheusText0.0.4"
+ "PrometheusText0.0.4",
+ "PrometheusText1.0.0"
],
"type": "string"
},
diff --git a/jsonnet/prometheus-operator/servicemonitors-crd.json b/jsonnet/prometheus-operator/servicemonitors-crd.json
index b0e8714ac..3cdd501dd 100644
--- a/jsonnet/prometheus-operator/servicemonitors-crd.json
+++ b/jsonnet/prometheus-operator/servicemonitors-crd.json
@@ -961,12 +961,13 @@
"scrapeProtocols": {
"description": "`scrapeProtocols` defines the protocols to negotiate during a scrape. It tells clients the\nprotocols supported by Prometheus in order of preference (from most to least preferred).\n\nIf unset, Prometheus uses its default value.\n\nIt requires Prometheus >= v2.49.0.",
"items": {
- "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`",
+ "description": "ScrapeProtocol represents a protocol used by Prometheus for scraping metrics.\nSupported values are:\n* `OpenMetricsText0.0.1`\n* `OpenMetricsText1.0.0`\n* `PrometheusProto`\n* `PrometheusText0.0.4`\n* `PrometheusText1.0.0`",
"enum": [
"PrometheusProto",
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
- "PrometheusText0.0.4"
+ "PrometheusText0.0.4",
+ "PrometheusText1.0.0"
],
"type": "string"
},
diff --git a/pkg/apis/monitoring/v1/prometheus_types.go b/pkg/apis/monitoring/v1/prometheus_types.go
index de7781e2d..7ef7d46ef 100644
--- a/pkg/apis/monitoring/v1/prometheus_types.go
+++ b/pkg/apis/monitoring/v1/prometheus_types.go
@@ -38,9 +38,18 @@ const (
// * `OpenMetricsText1.0.0`
// * `PrometheusProto`
// * `PrometheusText0.0.4`
-// +kubebuilder:validation:Enum=PrometheusProto;OpenMetricsText0.0.1;OpenMetricsText1.0.0;PrometheusText0.0.4
+// * `PrometheusText1.0.0`
+// +kubebuilder:validation:Enum=PrometheusProto;OpenMetricsText0.0.1;OpenMetricsText1.0.0;PrometheusText0.0.4;PrometheusText1.0.0
type ScrapeProtocol string
+const (
+ PrometheusProto ScrapeProtocol = "PrometheusProto"
+ PrometheusText0_0_4 ScrapeProtocol = "PrometheusText0.0.4"
+ PrometheusText1_0_0 ScrapeProtocol = "PrometheusText1.0.0"
+ OpenMetricsText0_0_1 ScrapeProtocol = "OpenMetricsText0.0.1"
+ OpenMetricsText1_0_0 ScrapeProtocol = "OpenMetricsText1.0.0"
+)
+
// RuntimeConfig configures the values for the process behavior.
type RuntimeConfig struct {
// The Go garbage collection target percentage. Lowering this number may increase the CPU usage.
@@ -285,6 +294,8 @@ type CommonPrometheusFields struct {
//
// It requires Prometheus >= v2.49.0.
//
+ // `PrometheusText1.0.0` requires Prometheus >= v3.0.0.
+ //
// +listType=set
// +optional
ScrapeProtocols []ScrapeProtocol `json:"scrapeProtocols,omitempty"`
diff --git a/pkg/prometheus/promcfg.go b/pkg/prometheus/promcfg.go
index 0ea81f07f..35e657afb 100644
--- a/pkg/prometheus/promcfg.go
+++ b/pkg/prometheus/promcfg.go
@@ -365,14 +365,24 @@ func (cg *ConfigGenerator) AddTrackTimestampsStaleness(cfg yaml.MapSlice, trackT
return cg.WithMinimumVersion("2.48.0").AppendMapItem(cfg, "track_timestamps_staleness", *trackTimestampsStaleness)
}
-// AddScrapeProtocols adds the scrape_protocols field into scrape configurations.
-// For backwards compatibility with Prometheus <2.49.0 we don't set scrape_protocols.
-func (cg *ConfigGenerator) AddScrapeProtocols(cfg yaml.MapSlice, scrapeProtocols []monitoringv1.ScrapeProtocol) yaml.MapSlice {
+// addScrapeProtocols adds the scrape_protocols field into the configuration.
+func (cg *ConfigGenerator) addScrapeProtocols(cfg yaml.MapSlice, scrapeProtocols []monitoringv1.ScrapeProtocol) yaml.MapSlice {
if len(scrapeProtocols) == 0 {
return cfg
}
- return cg.WithMinimumVersion("2.49.0").AppendMapItem(cfg, "scrape_protocols", scrapeProtocols)
+ sps := make([]string, 0, len(scrapeProtocols))
+ for _, sp := range scrapeProtocols {
+ // PrometheusText1.0.0 requires Prometheus v3.0.0 at least.
+ if sp == monitoringv1.PrometheusText1_0_0 && !cg.WithMinimumVersion("3.0.0-rc.0").IsCompatible() {
+ cg.Warn(fmt.Sprintf("scrapeProtocol=%s", monitoringv1.PrometheusText1_0_0))
+ continue
+ }
+
+ sps = append(sps, string(sp))
+ }
+
+ return cg.WithMinimumVersion("2.49.0").AppendMapItem(cfg, "scrape_protocols", sps)
}
// AddHonorLabels adds the honor_labels field into scrape configurations.
@@ -1347,7 +1357,7 @@ func (cg *ConfigGenerator) generatePodMonitorConfig(
cfg = cg.AddLimitsToYAML(cfg, labelValueLengthLimitKey, m.Spec.LabelValueLengthLimit, cpf.EnforcedLabelValueLengthLimit)
cfg = cg.AddLimitsToYAML(cfg, keepDroppedTargetsKey, m.Spec.KeepDroppedTargets, cpf.EnforcedKeepDroppedTargets)
cfg = cg.addNativeHistogramConfig(cfg, m.Spec.NativeHistogramConfig)
- cfg = cg.AddScrapeProtocols(cfg, m.Spec.ScrapeProtocols)
+ cfg = cg.addScrapeProtocols(cfg, m.Spec.ScrapeProtocols)
if bodySizeLimit := getLowerByteSize(m.Spec.BodySizeLimit, &cpf); !isByteSizeEmpty(bodySizeLimit) {
cfg = cg.WithMinimumVersion("2.28.0").AppendMapItem(cfg, "body_size_limit", bodySizeLimit)
@@ -1415,7 +1425,7 @@ func (cg *ConfigGenerator) generateProbeConfig(
cfg = cg.AddLimitsToYAML(cfg, labelValueLengthLimitKey, m.Spec.LabelValueLengthLimit, cpf.EnforcedLabelValueLengthLimit)
cfg = cg.AddLimitsToYAML(cfg, keepDroppedTargetsKey, m.Spec.KeepDroppedTargets, cpf.EnforcedKeepDroppedTargets)
cfg = cg.addNativeHistogramConfig(cfg, m.Spec.NativeHistogramConfig)
- cfg = cg.AddScrapeProtocols(cfg, m.Spec.ScrapeProtocols)
+ cfg = cg.addScrapeProtocols(cfg, m.Spec.ScrapeProtocols)
if cpf.EnforcedBodySizeLimit != "" {
cfg = cg.WithMinimumVersion("2.28.0").AppendMapItem(cfg, "body_size_limit", cpf.EnforcedBodySizeLimit)
@@ -1864,7 +1874,7 @@ func (cg *ConfigGenerator) generateServiceMonitorConfig(
cfg = cg.AddLimitsToYAML(cfg, labelValueLengthLimitKey, m.Spec.LabelValueLengthLimit, cpf.EnforcedLabelValueLengthLimit)
cfg = cg.AddLimitsToYAML(cfg, keepDroppedTargetsKey, m.Spec.KeepDroppedTargets, cpf.EnforcedKeepDroppedTargets)
cfg = cg.addNativeHistogramConfig(cfg, m.Spec.NativeHistogramConfig)
- cfg = cg.AddScrapeProtocols(cfg, m.Spec.ScrapeProtocols)
+ cfg = cg.addScrapeProtocols(cfg, m.Spec.ScrapeProtocols)
if bodySizeLimit := getLowerByteSize(m.Spec.BodySizeLimit, &cpf); !isByteSizeEmpty(bodySizeLimit) {
cfg = cg.WithMinimumVersion("2.28.0").AppendMapItem(cfg, "body_size_limit", bodySizeLimit)
@@ -2573,16 +2583,6 @@ func (cg *ConfigGenerator) appendScrapeIntervals(slice yaml.MapSlice) yaml.MapSl
return slice
}
-func (cg *ConfigGenerator) appendScrapeProtocols(slice yaml.MapSlice) yaml.MapSlice {
- cpf := cg.prom.GetCommonPrometheusFields()
-
- if len(cpf.ScrapeProtocols) == 0 {
- return slice
- }
-
- return cg.WithMinimumVersion("2.49.0").AppendMapItem(slice, "scrape_protocols", cpf.ScrapeProtocols)
-}
-
func (cg *ConfigGenerator) appendRuntime(slice yaml.MapSlice) yaml.MapSlice {
runtime := cg.prom.GetCommonPrometheusFields().Runtime
if runtime == nil {
@@ -2925,9 +2925,7 @@ func (cg *ConfigGenerator) generateScrapeConfig(
cfg = append(cfg, yaml.MapItem{Key: "scrape_timeout", Value: *sc.Spec.ScrapeTimeout})
}
- if len(sc.Spec.ScrapeProtocols) > 0 {
- cfg = cg.WithMinimumVersion("2.49.0").AppendMapItem(cfg, "scrape_protocols", sc.Spec.ScrapeProtocols)
- }
+ cfg = cg.addScrapeProtocols(cfg, sc.Spec.ScrapeProtocols)
if sc.Spec.Scheme != nil {
cfg = append(cfg, yaml.MapItem{Key: "scheme", Value: strings.ToLower(*sc.Spec.Scheme)})
@@ -4631,7 +4629,7 @@ func (cg *ConfigGenerator) addFiltersToYaml(cfg yaml.MapSlice, filters []monitor
func (cg *ConfigGenerator) buildGlobalConfig() yaml.MapSlice {
cfg := yaml.MapSlice{}
cfg = cg.appendScrapeIntervals(cfg)
- cfg = cg.appendScrapeProtocols(cfg)
+ cfg = cg.addScrapeProtocols(cfg, cg.prom.GetCommonPrometheusFields().ScrapeProtocols)
cfg = cg.appendExternalLabels(cfg)
cfg = cg.appendScrapeLimits(cfg)
diff --git a/pkg/prometheus/promcfg_test.go b/pkg/prometheus/promcfg_test.go
index ae544909f..7fbcbe192 100644
--- a/pkg/prometheus/promcfg_test.go
+++ b/pkg/prometheus/promcfg_test.go
@@ -108,19 +108,14 @@ func TestConfigGeneration(t *testing.T) {
func TestGlobalSettings(t *testing.T) {
var (
- expectedBodySizeLimit monitoringv1.ByteSize = "1000MB"
- expectedRuleQueryOffset monitoringv1.Duration = "30s"
- expectedSampleLimit uint64 = 10000
- expectedTargetLimit uint64 = 1000
- expectedLabelLimit uint64 = 50
- expectedLabelNameLengthLimit uint64 = 40
- expectedLabelValueLengthLimit uint64 = 30
- expectedkeepDroppedTargets uint64 = 50
- expectedscrapeProtocols []monitoringv1.ScrapeProtocol = []monitoringv1.ScrapeProtocol{
- "OpenMetricsText1.0.0",
- "OpenMetricsText0.0.1",
- "PrometheusText0.0.4",
- }
+ expectedBodySizeLimit monitoringv1.ByteSize = "1000MB"
+ expectedRuleQueryOffset monitoringv1.Duration = "30s"
+ expectedSampleLimit uint64 = 10000
+ expectedTargetLimit uint64 = 1000
+ expectedLabelLimit uint64 = 50
+ expectedLabelNameLengthLimit uint64 = 40
+ expectedLabelValueLengthLimit uint64 = 30
+ expectedkeepDroppedTargets uint64 = 50
)
for _, tc := range []struct {
@@ -237,8 +232,37 @@ func TestGlobalSettings(t *testing.T) {
Version: "v2.49.0",
ScrapeInterval: "30s",
EvaluationInterval: "30s",
- ScrapeProtocols: expectedscrapeProtocols,
- Golden: "valid_global_config_with_scrape_protocols.golden",
+ ScrapeProtocols: []monitoringv1.ScrapeProtocol{
+ monitoringv1.OpenMetricsText1_0_0,
+ monitoringv1.OpenMetricsText0_0_1,
+ monitoringv1.PrometheusProto,
+ monitoringv1.PrometheusText0_0_4,
+ monitoringv1.PrometheusText1_0_0,
+ },
+ Golden: "valid_global_config_with_scrape_protocols.golden",
+ },
+ {
+ Scenario: "valid global config with new scrape protocol",
+ Version: "v3.0.0-rc.0",
+ ScrapeInterval: "30s",
+ EvaluationInterval: "30s",
+ ScrapeProtocols: []monitoringv1.ScrapeProtocol{
+ monitoringv1.PrometheusText1_0_0,
+ },
+ Golden: "valid_global_config_with_new_scrape_protocol.golden",
+ },
+ {
+ Scenario: "valid global config with unsupported scrape protocols",
+ Version: "v2.48.0",
+ ScrapeInterval: "30s",
+ EvaluationInterval: "30s",
+ ScrapeProtocols: []monitoringv1.ScrapeProtocol{
+ monitoringv1.PrometheusProto,
+ monitoringv1.PrometheusText0_0_4,
+ monitoringv1.OpenMetricsText0_0_1,
+ monitoringv1.OpenMetricsText1_0_0,
+ },
+ Golden: "valid_global_config_with_unsupported_scrape_protocols.golden",
},
{
Scenario: "valid global config without rule query offset if prometheus version less required",
diff --git a/pkg/prometheus/testdata/valid_global_config_with_new_scrape_protocol.golden b/pkg/prometheus/testdata/valid_global_config_with_new_scrape_protocol.golden
new file mode 100644
index 000000000..0787b5e9a
--- /dev/null
+++ b/pkg/prometheus/testdata/valid_global_config_with_new_scrape_protocol.golden
@@ -0,0 +1,9 @@
+global:
+ scrape_interval: 30s
+ scrape_protocols:
+ - PrometheusText1.0.0
+ external_labels:
+ prometheus: test/example
+ prometheus_replica: $(POD_NAME)
+ evaluation_interval: 30s
+scrape_configs: []
diff --git a/pkg/prometheus/testdata/valid_global_config_with_scrape_protocols.golden b/pkg/prometheus/testdata/valid_global_config_with_scrape_protocols.golden
index da75435f2..65c29f6e3 100644
--- a/pkg/prometheus/testdata/valid_global_config_with_scrape_protocols.golden
+++ b/pkg/prometheus/testdata/valid_global_config_with_scrape_protocols.golden
@@ -3,6 +3,7 @@ global:
scrape_protocols:
- OpenMetricsText1.0.0
- OpenMetricsText0.0.1
+ - PrometheusProto
- PrometheusText0.0.4
external_labels:
prometheus: test/example
diff --git a/pkg/prometheus/testdata/valid_global_config_with_unsupported_scrape_protocols.golden b/pkg/prometheus/testdata/valid_global_config_with_unsupported_scrape_protocols.golden
new file mode 100644
index 000000000..14f383870
--- /dev/null
+++ b/pkg/prometheus/testdata/valid_global_config_with_unsupported_scrape_protocols.golden
@@ -0,0 +1,7 @@
+global:
+ scrape_interval: 30s
+ external_labels:
+ prometheus: test/example
+ prometheus_replica: $(POD_NAME)
+ evaluation_interval: 30s
+scrape_configs: []