Переглянути джерело

[collector] 系统默认数据解析http响应数据

tomsun28 4 роки тому
батько
коміт
22f54dff10

+ 2 - 11
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<String> 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());
         }
     }

+ 8 - 9
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<MetricsCollect> {
 
     /**
      * 根据 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<CollectRep.ValueRow> aliasRowList = collectData.getValuesList();
         if (aliasRowList == null || aliasRowList.isEmpty()) {
             return;
         }
         collectData.clearValues();
         // 先预处理 calculates
+        if (metrics.getCalculates() == null) {
+            metrics.setCalculates(Collections.emptyList());
+        }
         Map<String, Expression> fieldExpressionMap = metrics.getCalculates()
                 .stream()
                 .map(cal -> {
@@ -214,7 +213,7 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
                 }
                 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<MetricsCollect> {
         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();
     }

+ 2 - 1
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