This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 3acb9c5867546d4a56761c8b929de6d3cea75e33
Author: Lari Hotari <lhot...@users.noreply.github.com>
AuthorDate: Thu Mar 6 09:33:42 2025 +0200

    [improve][monitor] Add version=0.0.4 to /metrics content type for 
Prometheus 3.x compatibility (#24060)
    
    (cherry picked from commit 3f4515476a5a0b1b6d0c310ffd6b05c8f61dac84)
---
 .../pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java   | 7 ++++++-
 .../broker/stats/prometheus/PulsarPrometheusMetricsServlet.java    | 2 +-
 .../java/org/apache/pulsar/broker/service/BrokerServiceTest.java   | 3 +++
 .../pulsar/functions/worker/rest/api/FunctionsMetricsResource.java | 3 ++-
 4 files changed, 12 insertions(+), 3 deletions(-)

diff --git 
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
 
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
index 8685348174c..ed7605f80ce 100644
--- 
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
+++ 
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
@@ -40,6 +40,11 @@ import org.slf4j.LoggerFactory;
 
 public class PrometheusMetricsServlet extends HttpServlet {
     public static final String DEFAULT_METRICS_PATH = "/metrics";
+    // Prometheus uses version 0.0.4 of the text format for metrics.
+    // This content-type value ensures compatibility with Prometheus 3.x and 
later versions.
+    // For details, refer to the Prometheus 3.x migration guide:
+    // https://prometheus.io/docs/prometheus/latest/migration/#scrape-protocols
+    public static final String PROMETHEUS_CONTENT_TYPE_004 = "text/plain; 
version=0.0.4; charset=utf-8";
     private static final long serialVersionUID = 1L;
     static final int HTTP_STATUS_OK_200 = 200;
     static final int HTTP_STATUS_INTERNAL_SERVER_ERROR_500 = 500;
@@ -164,7 +169,7 @@ public class PrometheusMetricsServlet extends HttpServlet {
 
     private void generateMetricsSynchronously(HttpServletResponse res) throws 
IOException {
         res.setStatus(HTTP_STATUS_OK_200);
-        res.setContentType("text/plain;charset=utf-8");
+        res.setContentType(PROMETHEUS_CONTENT_TYPE_004);
         PrometheusMetricsGeneratorUtils.generate(cluster, 
res.getOutputStream(), metricsProviders);
     }
 
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PulsarPrometheusMetricsServlet.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PulsarPrometheusMetricsServlet.java
index 43514d481dc..faabad8f8fe 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PulsarPrometheusMetricsServlet.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PulsarPrometheusMetricsServlet.java
@@ -145,7 +145,7 @@ public class PulsarPrometheusMetricsServlet extends 
PrometheusMetricsServlet {
                     response.setStatus(HTTP_STATUS_INTERNAL_SERVER_ERROR_500);
                 } else {
                     response.setStatus(HTTP_STATUS_OK_200);
-                    response.setContentType("text/plain;charset=utf-8");
+                    response.setContentType(PROMETHEUS_CONTENT_TYPE_004);
                     if (compressOutput) {
                         response.setHeader("Content-Encoding", "gzip");
                     }
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java
 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java
index fa76fdd5bf4..a786fbc9574 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java
@@ -88,6 +88,7 @@ import 
org.apache.pulsar.broker.service.BrokerServiceException.PersistenceExcept
 import org.apache.pulsar.broker.service.persistent.PersistentSubscription;
 import org.apache.pulsar.broker.service.persistent.PersistentTopic;
 import org.apache.pulsar.broker.stats.prometheus.PrometheusMetricsClient;
+import org.apache.pulsar.broker.stats.prometheus.PrometheusMetricsServlet;
 import org.apache.pulsar.broker.stats.prometheus.PrometheusRawMetricsProvider;
 import org.apache.pulsar.client.admin.BrokerStats;
 import org.apache.pulsar.client.admin.PulsarAdminException;
@@ -1549,6 +1550,8 @@ public class BrokerServiceTest extends BrokerTestBase {
         CloseableHttpClient httpClient = HttpClientBuilder.create().build();
         final String metricsEndPoint = getPulsar().getWebServiceAddress() + 
"/metrics";
         HttpResponse response = httpClient.execute(new 
HttpGet(metricsEndPoint));
+        assertEquals(response.getEntity().getContentType().getValue(),
+                PrometheusMetricsServlet.PROMETHEUS_CONTENT_TYPE_004);
         InputStream inputStream = response.getEntity().getContent();
         InputStreamReader isReader = new InputStreamReader(inputStream);
         BufferedReader reader = new BufferedReader(isReader);
diff --git 
a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsMetricsResource.java
 
b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsMetricsResource.java
index e48169d122f..fcfd998ad25 100644
--- 
a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsMetricsResource.java
+++ 
b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsMetricsResource.java
@@ -32,6 +32,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.StreamingOutput;
+import org.apache.pulsar.broker.stats.prometheus.PrometheusMetricsServlet;
 import org.apache.pulsar.common.util.SimpleTextOutputStream;
 import org.apache.pulsar.functions.worker.WorkerService;
 import org.apache.pulsar.functions.worker.rest.FunctionApiResource;
@@ -63,7 +64,7 @@ public class FunctionsMetricsResource extends 
FunctionApiResource {
             };
             return Response
                 .ok(streamOut)
-                .type(MediaType.TEXT_PLAIN_TYPE)
+                .type(PrometheusMetricsServlet.PROMETHEUS_CONTENT_TYPE_004)
                 .build();
         } finally {
             buf.release();

Reply via email to