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();