diff --git a/collector/server/src/main/java/com/usthe/collector/collect/http/HttpCollectImpl.java b/collector/server/src/main/java/com/usthe/collector/collect/http/HttpCollectImpl.java index 54f7006..d51d420 100644 --- a/collector/server/src/main/java/com/usthe/collector/collect/http/HttpCollectImpl.java +++ b/collector/server/src/main/java/com/usthe/collector/collect/http/HttpCollectImpl.java @@ -1,13 +1,9 @@ package com.usthe.collector.collect.http; -import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.Option; -import com.jayway.jsonpath.spi.cache.CacheProvider; -import com.jayway.jsonpath.spi.cache.LRUCache; +import com.google.gson.JsonParser; import com.usthe.collector.collect.AbstractCollect; import com.usthe.collector.common.http.HttpClientPool; import com.usthe.collector.dispatch.DispatchConstants; @@ -28,7 +24,6 @@ import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; @@ -173,8 +168,7 @@ public class HttpCollectImpl extends AbstractCollect { } private void parseResponseByDefault(String resp, List aliasFields, CollectRep.MetricsData.Builder builder) { - Gson gson = new Gson(); - JsonElement element = gson.toJsonTree(resp); + JsonElement element = JsonParser.parseString(resp); if (element.isJsonArray()) { JsonArray array = element.getAsJsonArray(); for (JsonElement jsonElement : array) { @@ -196,18 +190,15 @@ public class HttpCollectImpl extends AbstractCollect { } else if (element.isJsonObject()) { JsonObject object = element.getAsJsonObject(); CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); - StringBuilder instance = new StringBuilder(); for (String alias : aliasFields) { JsonElement valueElement = object.get(alias); if (valueElement != null) { String value = valueElement.getAsString(); valueRowBuilder.addColumns(value); - instance.append(value); } else { valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); } } - valueRowBuilder.setInstance(instance.toString()); builder.addValues(valueRowBuilder.build()); } } diff --git a/collector/server/src/main/java/com/usthe/collector/dispatch/MetricsCollect.java b/collector/server/src/main/java/com/usthe/collector/dispatch/MetricsCollect.java index 7e752cb..518a8eb 100644 --- a/collector/server/src/main/java/com/usthe/collector/dispatch/MetricsCollect.java +++ b/collector/server/src/main/java/com/usthe/collector/dispatch/MetricsCollect.java @@ -1,6 +1,5 @@ package com.usthe.collector.dispatch; -import com.google.protobuf.ProtocolStringList; import com.googlecode.aviator.AviatorEvaluator; import com.googlecode.aviator.Expression; import com.usthe.collector.collect.AbstractCollect; @@ -15,6 +14,7 @@ import com.usthe.common.util.CommonUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -135,22 +135,21 @@ public class MetricsCollect implements Runnable, Comparable { /** * 根据 calculates 和 aliasFields 配置计算出真正的指标(fields)值 + * 计算instance实例值 * @param metrics 指标组配置 * @param collectData 采集数据 */ private void calculateFields(Metrics metrics, CollectRep.MetricsData.Builder collectData) { collectData.addAllFields(metrics.getFields().stream().map(Metrics.Field::getField).collect(Collectors.toSet())); - // 若不存在需要计算的表达式,则 别名指标aliasFields 的数据就是真正指标 fields的数据 - // 即直接使用 valueList 即可 - if (metrics.getCalculates() == null || metrics.getCalculates().isEmpty()) { - return; - } List aliasRowList = collectData.getValuesList(); if (aliasRowList == null || aliasRowList.isEmpty()) { return; } collectData.clearValues(); // 先预处理 calculates + if (metrics.getCalculates() == null) { + metrics.setCalculates(Collections.emptyList()); + } Map fieldExpressionMap = metrics.getCalculates() .stream() .map(cal -> { @@ -214,7 +213,7 @@ public class MetricsCollect implements Runnable, Comparable { } realValueRowBuilder.addColumns(value); fieldValueMap.clear(); - if (field.isInstance()) { + if (field.isInstance() && !CommonConstants.NULL_VALUE.equals(value)) { instanceBuilder.append(value); } } @@ -234,9 +233,9 @@ public class MetricsCollect implements Runnable, Comparable { builder.setTime(endTime); log.debug("[Collect]: newTime: {}, startTime: {}, spendTime: {}.", newTime, startTime, endTime - startTime); if (builder.getCode() != CollectRep.Code.SUCCESS) { - log.info("[Collect Fail]-reason:{}", builder.getMsg()); + log.info("[Collect Fail] Reason: {}", builder.getMsg()); } else { - log.info("[Collect Success]-{},{},{}.", builder.getId(), builder.getApp(), builder.getMetrics()); + log.info("[Collect Success]."); } return builder.build(); } diff --git a/manager/src/main/resources/define/app/A-example.yml b/manager/src/main/resources/define/app/A-example.yml index 8877769..87f16d6 100644 --- a/manager/src/main/resources/define/app/A-example.yml +++ b/manager/src/main/resources/define/app/A-example.yml @@ -1,6 +1,6 @@ # 监控应用类型名称(与文件名保持一致) eg: linux windows tomcat mysql aws... app: TanCloud -# 参数映射map. type是参数类型: number数字, string明文字符串, secret加密字符串 +# 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串 # 强制固定必须参数 - host configmap: - key: host @@ -83,6 +83,7 @@ metrics: fields: - field: hostname type: string + instance: true - field: total type: number unit: kb