[collector] 系统默认数据解析http响应数据
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user