This is an automated email from the ASF dual-hosted git repository.
jianingwang pushed a commit to branch online-prometheus-parser
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/online-prometheus-parser by
this push:
new e3a458786c switch to online parser
e3a458786c is described below
commit e3a458786c09049d23e264ab6c691eb0c14440c9
Author: vinci <[email protected]>
AuthorDate: Sat Apr 5 19:36:18 2025 +0800
switch to online parser
---
.../prometheus/PrometheusAutoCollectImpl.java | 31 +++++++---------------
.../prometheus/parser/OnlineParserTest.java | 6 +++--
2 files changed, 14 insertions(+), 23 deletions(-)
diff --git
a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java
b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java
index f92c3d6455..3892df9e90 100644
---
a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java
+++
b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java
@@ -19,6 +19,7 @@ package org.apache.hertzbeat.collector.collect.prometheus;
import static org.apache.hertzbeat.common.constants.SignConstants.RIGHT_DASH;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InterruptedIOException;
import java.net.ConnectException;
import java.net.UnknownHostException;
@@ -46,6 +47,7 @@ import org.apache.hertzbeat.common.entity.message.CollectRep;
import org.apache.hertzbeat.common.util.Base64Util;
import org.apache.hertzbeat.common.util.CommonUtil;
import org.apache.hertzbeat.common.util.IpDomainUtil;
+import org.apache.hertzbeat.common.util.OnlineParser;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpHost;
import org.apache.http.HttpStatus;
@@ -99,25 +101,12 @@ public class PrometheusAutoCollectImpl {
builder.setMsg(NetworkConstants.STATUS_CODE +
SignConstants.BLANK + statusCode);
return null;
}
- // todo: The InputStream is directly converted to a String here
- // For large data in the Prometheus exporter, this can
generate large objects, which could severely impact JVM memory space
- // todo: Option one: Use InputStream for parsing, but this
requires significant code changes
- // Option two: Manually trigger garbage collection, which
can be referenced from Dubbo for long i
- String resp = EntityUtils.toString(response.getEntity(),
StandardCharsets.UTF_8);
- long collectTime = System.currentTimeMillis();
- builder.setTime(collectTime);
- if (resp == null || !StringUtils.hasText(resp)) {
- log.error("http response content is empty, status: {}.",
statusCode);
+ try {
+ return
parseResponseByPrometheusExporter(response.getEntity().getContent(),
metrics.getAliasFields(), builder);
+ } catch (Exception e) {
+ log.info("parse error: {}.", e.getMessage(), e);
builder.setCode(CollectRep.Code.FAIL);
- builder.setMsg("http response content is empty");
- } else {
- try {
- return parseResponseByPrometheusExporter(resp,
metrics.getAliasFields(), builder);
- } catch (Exception e) {
- log.info("parse error: {}.", e.getMessage(), e);
- builder.setCode(CollectRep.Code.FAIL);
- builder.setMsg("parse response data error:" +
e.getMessage());
- }
+ builder.setMsg("parse response data error:" + e.getMessage());
}
} catch (ClientProtocolException e1) {
String errorMsg = CommonUtil.getMessageFromThrowable(e1);
@@ -168,9 +157,9 @@ public class PrometheusAutoCollectImpl {
}
}
- private List<CollectRep.MetricsData>
parseResponseByPrometheusExporter(String resp, List<String> aliasFields,
-
CollectRep.MetricsData.Builder builder) {
- Map<String, MetricFamily> metricFamilyMap =
TextParser.textToMetricFamilies(resp);
+ private List<CollectRep.MetricsData>
parseResponseByPrometheusExporter(InputStream inputStream, List<String>
aliasFields,
+
CollectRep.MetricsData.Builder builder) throws IOException {
+ Map<String, MetricFamily> metricFamilyMap =
OnlineParser.parseMetrics(inputStream);
List<CollectRep.MetricsData> metricsDataList = new LinkedList<>();
for (Map.Entry<String, MetricFamily> entry :
metricFamilyMap.entrySet()) {
builder.clearFields();
diff --git
a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/prometheus/parser/OnlineParserTest.java
b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/prometheus/parser/OnlineParserTest.java
index f01da4a5ac..9747650417 100644
---
a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/prometheus/parser/OnlineParserTest.java
+++
b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/prometheus/parser/OnlineParserTest.java
@@ -75,7 +75,9 @@ class OnlineParserTest {
# TYPE go_memstats_gc_sys_bytes gauge
go_memstats_gc_sys_bytes 4.614808e+06""";
InputStream inputStream = new
ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
- Map<String, MetricFamily> metricFamilyMap =
OnlineParser.parseMetrics(inputStream);
- assertNotNull(metricFamilyMap);
+ Map<String, MetricFamily> metricFamilyMap1 =
OnlineParser.parseMetrics(inputStream);
+ Map<String, MetricFamily> metricFamilyMap2 =
TextParser.textToMetricFamilies(str);
+ assertNotNull(metricFamilyMap1);
+ assertNotNull(metricFamilyMap2);
}
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]