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

This commit is contained in:
tomsun28
2021-11-20 19:36:41 +08:00
parent 8214eba482
commit 22f54dff10
3 changed files with 12 additions and 21 deletions

View File

@@ -1,13 +1,9 @@
package com.usthe.collector.collect.http; package com.usthe.collector.collect.http;
import com.google.gson.Gson;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.jayway.jsonpath.Configuration; import com.google.gson.JsonParser;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.spi.cache.CacheProvider;
import com.jayway.jsonpath.spi.cache.LRUCache;
import com.usthe.collector.collect.AbstractCollect; import com.usthe.collector.collect.AbstractCollect;
import com.usthe.collector.common.http.HttpClientPool; import com.usthe.collector.common.http.HttpClientPool;
import com.usthe.collector.dispatch.DispatchConstants; 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.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils; 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) { private void parseResponseByDefault(String resp, List<String> aliasFields, CollectRep.MetricsData.Builder builder) {
Gson gson = new Gson(); JsonElement element = JsonParser.parseString(resp);
JsonElement element = gson.toJsonTree(resp);
if (element.isJsonArray()) { if (element.isJsonArray()) {
JsonArray array = element.getAsJsonArray(); JsonArray array = element.getAsJsonArray();
for (JsonElement jsonElement : array) { for (JsonElement jsonElement : array) {
@@ -196,18 +190,15 @@ public class HttpCollectImpl extends AbstractCollect {
} else if (element.isJsonObject()) { } else if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject(); JsonObject object = element.getAsJsonObject();
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
StringBuilder instance = new StringBuilder();
for (String alias : aliasFields) { for (String alias : aliasFields) {
JsonElement valueElement = object.get(alias); JsonElement valueElement = object.get(alias);
if (valueElement != null) { if (valueElement != null) {
String value = valueElement.getAsString(); String value = valueElement.getAsString();
valueRowBuilder.addColumns(value); valueRowBuilder.addColumns(value);
instance.append(value);
} else { } else {
valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); valueRowBuilder.addColumns(CommonConstants.NULL_VALUE);
} }
} }
valueRowBuilder.setInstance(instance.toString());
builder.addValues(valueRowBuilder.build()); builder.addValues(valueRowBuilder.build());
} }
} }

View File

@@ -1,6 +1,5 @@
package com.usthe.collector.dispatch; package com.usthe.collector.dispatch;
import com.google.protobuf.ProtocolStringList;
import com.googlecode.aviator.AviatorEvaluator; import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression; import com.googlecode.aviator.Expression;
import com.usthe.collector.collect.AbstractCollect; import com.usthe.collector.collect.AbstractCollect;
@@ -15,6 +14,7 @@ import com.usthe.common.util.CommonUtil;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -135,22 +135,21 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
/** /**
* 根据 calculates 和 aliasFields 配置计算出真正的指标(fields)值 * 根据 calculates 和 aliasFields 配置计算出真正的指标(fields)值
* 计算instance实例值
* @param metrics 指标组配置 * @param metrics 指标组配置
* @param collectData 采集数据 * @param collectData 采集数据
*/ */
private void calculateFields(Metrics metrics, CollectRep.MetricsData.Builder collectData) { private void calculateFields(Metrics metrics, CollectRep.MetricsData.Builder collectData) {
collectData.addAllFields(metrics.getFields().stream().map(Metrics.Field::getField).collect(Collectors.toSet())); 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(); List<CollectRep.ValueRow> aliasRowList = collectData.getValuesList();
if (aliasRowList == null || aliasRowList.isEmpty()) { if (aliasRowList == null || aliasRowList.isEmpty()) {
return; return;
} }
collectData.clearValues(); collectData.clearValues();
// 先预处理 calculates // 先预处理 calculates
if (metrics.getCalculates() == null) {
metrics.setCalculates(Collections.emptyList());
}
Map<String, Expression> fieldExpressionMap = metrics.getCalculates() Map<String, Expression> fieldExpressionMap = metrics.getCalculates()
.stream() .stream()
.map(cal -> { .map(cal -> {
@@ -214,7 +213,7 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
} }
realValueRowBuilder.addColumns(value); realValueRowBuilder.addColumns(value);
fieldValueMap.clear(); fieldValueMap.clear();
if (field.isInstance()) { if (field.isInstance() && !CommonConstants.NULL_VALUE.equals(value)) {
instanceBuilder.append(value); instanceBuilder.append(value);
} }
} }
@@ -234,9 +233,9 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
builder.setTime(endTime); builder.setTime(endTime);
log.debug("[Collect]: newTime: {}, startTime: {}, spendTime: {}.", newTime, startTime, endTime - startTime); log.debug("[Collect]: newTime: {}, startTime: {}, spendTime: {}.", newTime, startTime, endTime - startTime);
if (builder.getCode() != CollectRep.Code.SUCCESS) { if (builder.getCode() != CollectRep.Code.SUCCESS) {
log.info("[Collect Fail]-reason:{}", builder.getMsg()); log.info("[Collect Fail] Reason: {}", builder.getMsg());
} else { } else {
log.info("[Collect Success]-{},{},{}.", builder.getId(), builder.getApp(), builder.getMetrics()); log.info("[Collect Success].");
} }
return builder.build(); return builder.build();
} }

View File

@@ -1,6 +1,6 @@
# 监控应用类型名称(与文件名保持一致) eg: linux windows tomcat mysql aws... # 监控应用类型名称(与文件名保持一致) eg: linux windows tomcat mysql aws...
app: TanCloud app: TanCloud
# 参数映射map. type是参数类型: number数字, string明文字符串, secret加密字符串 # 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串
# 强制固定必须参数 - host # 强制固定必须参数 - host
configmap: configmap:
- key: host - key: host
@@ -83,6 +83,7 @@ metrics:
fields: fields:
- field: hostname - field: hostname
type: string type: string
instance: true
- field: total - field: total
type: number type: number
unit: kb unit: kb