From c761726d996e35bd41f041de3d4a6074e90516bf Mon Sep 17 00:00:00 2001 From: Mateo00 Date: Tue, 4 Mar 2025 01:16:54 +0100 Subject: [PATCH 1/2] Add micrometer.prometheus-proxy.connected-metrics-metadata property Signed-off-by: Mateo00 --- .../prometheus/rsocket/PrometheusController.java | 11 ++++++++--- .../rsocket/PrometheusControllerProperties.java | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java index ff600f8..0b8af24 100644 --- a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java +++ b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java @@ -121,7 +121,7 @@ private Mono acceptRSocket(KeyPairGenerator generator, RSocket sendingS // respond with Mono.error(..) to RSocket metricsInterceptedSendingSocket = metricsInterceptor.apply(sendingSocket); - ConnectionState connectionState = new ConnectionState(generator.generateKeyPair()); + ConnectionState connectionState = new ConnectionState(generator.generateKeyPair(), this.properties); scrapableApps.put(metricsInterceptedSendingSocket, connectionState); // a key to be used by the client to push metrics as it's dying if this happens before the first scrape @@ -186,12 +186,14 @@ public Mono prometheus() { class ConnectionState { private final KeyPair keyPair; + private final PrometheusControllerProperties properties; // the last metrics of a dying application instance private String dyingPush; - ConnectionState(KeyPair keyPair) { + ConnectionState(KeyPair keyPair, PrometheusControllerProperties properties) { this.keyPair = keyPair; + this.properties = properties; } Mono getDyingPush() { @@ -211,6 +213,9 @@ String receiveScrapePayload(Payload payload, Timer.Sample timing) { ByteBufUtil.getBytes(sliceData, sliceData.readerIndex(), sliceData.readableBytes(), false)); String uncompressed = Snappy.uncompressString(decrypted); + if (!this.properties.getConnectedMetricsMetadata()) { + uncompressed = uncompressed.replaceAll("(?m)^#.*\n", ""); + } scrapePayload.record(uncompressed.length()); return uncompressed; } catch (IOException e) { @@ -246,4 +251,4 @@ Payload createKeyPayload() { return DefaultPayload.create(keyPair.getPublic().getEncoded()); } } -} +} \ No newline at end of file diff --git a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java index 936cc95..dca6a74 100644 --- a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java +++ b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java @@ -33,6 +33,12 @@ public class PrometheusControllerProperties { */ private int websocketPort = 8081; + /** + * Whether to enable publishing of Prometheus metadata (lines "# HELP ..." and lines "# TYPE ...") in the payload returned by the /metrics/connected endpoint. + * Disabling metadata publishing reduces the amount of data sent sent on each scrape. + */ + private boolean connectedMetricsMetadata = true; + public int getTcpPort() { return tcpPort; } @@ -48,4 +54,12 @@ public int getWebsocketPort() { public void setWebsocketPort(int websocketPort) { this.websocketPort = websocketPort; } + + public boolean getConnectedMetricsMetadata() { + return connectedMetricsMetadata; + } + + public void setConnectedMetricsMetadata(boolean connectedMetricsMetadata) { + this.connectedMetricsMetadata = connectedMetricsMetadata; + } } From 0a5a2a39dc3a86cb6468025be9fa119a73e2c26f Mon Sep 17 00:00:00 2001 From: Mateo00 Date: Tue, 4 Mar 2025 01:19:43 +0100 Subject: [PATCH 2/2] Correction following code review Signed-off-by: Mateo00 --- .../prometheus/rsocket/PrometheusController.java | 2 +- .../rsocket/PrometheusControllerProperties.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java index 0bf0cfd..bd3f9d8 100644 --- a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java +++ b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusController.java @@ -213,7 +213,7 @@ String receiveScrapePayload(Payload payload, Timer.Sample timing) { ByteBufUtil.getBytes(sliceData, sliceData.readerIndex(), sliceData.readableBytes(), false)); String uncompressed = Snappy.uncompressString(decrypted); - if (!this.properties.getConnectedMetricsMetadata()) { + if (!this.properties.getPublishConnectedMetricsMetadata()) { uncompressed = uncompressed.replaceAll("(?m)^#.*\n", ""); } scrapePayload.record(uncompressed.length()); diff --git a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java index dca6a74..71efb2c 100644 --- a/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java +++ b/proxy-server/src/main/java/io/micrometer/prometheus/rsocket/PrometheusControllerProperties.java @@ -37,7 +37,7 @@ public class PrometheusControllerProperties { * Whether to enable publishing of Prometheus metadata (lines "# HELP ..." and lines "# TYPE ...") in the payload returned by the /metrics/connected endpoint. * Disabling metadata publishing reduces the amount of data sent sent on each scrape. */ - private boolean connectedMetricsMetadata = true; + private boolean publishConnectedMetricsMetadata = true; public int getTcpPort() { return tcpPort; @@ -55,11 +55,11 @@ public void setWebsocketPort(int websocketPort) { this.websocketPort = websocketPort; } - public boolean getConnectedMetricsMetadata() { - return connectedMetricsMetadata; + public boolean getPublishConnectedMetricsMetadata() { + return publishConnectedMetricsMetadata; } - public void setConnectedMetricsMetadata(boolean connectedMetricsMetadata) { - this.connectedMetricsMetadata = connectedMetricsMetadata; + public void setPublishConnectedMetricsMetadata(boolean publishConnectedMetricsMetadata) { + this.publishConnectedMetricsMetadata = publishConnectedMetricsMetadata; } }