Skip to content

Commit

Permalink
SkyWalking 源码分析 —— 运维界面(二)之应用实例视角
Browse files Browse the repository at this point in the history
  • Loading branch information
YunaiV committed Jan 7, 2018
1 parent 68b704e commit 5ed3828
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,15 @@ public GCMetricEsUIDAO(ElasticSearchClient client) {
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.termQuery(GCMetricTable.COLUMN_INSTANCE_ID, instanceId));
boolQuery.must().add(QueryBuilders.termsQuery(GCMetricTable.COLUMN_TIME_BUCKET, timeBuckets));
boolQuery.must().add(QueryBuilders.termQuery(GCMetricTable.COLUMN_INSTANCE_ID, instanceId)); // 过滤 instanceId
boolQuery.must().add(QueryBuilders.termsQuery(GCMetricTable.COLUMN_TIME_BUCKET, timeBuckets)); // 时间

searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
searchRequestBuilder.addAggregation(
// 基于 phrase 聚合
AggregationBuilders.terms(GCMetricTable.COLUMN_PHRASE).field(GCMetricTable.COLUMN_PHRASE)
// 累加
.subAggregation(AggregationBuilders.sum(GCMetricTable.COLUMN_COUNT).field(GCMetricTable.COLUMN_COUNT)));

SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,17 @@
package org.skywalking.apm.collector.ui.jetty.handler.instancemetric;

import com.google.gson.JsonElement;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.skywalking.apm.collector.core.module.ModuleManager;
import org.skywalking.apm.collector.server.jetty.ArgumentsParseException;
import org.skywalking.apm.collector.server.jetty.JettyHandler;
import org.skywalking.apm.collector.ui.service.InstanceJVMService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.util.LinkedHashSet;
import java.util.Set;

/**
* @author peng-yongsheng
*/
Expand All @@ -54,20 +55,23 @@ public InstanceMetricGetRangeTimeBucketHandler(ModuleManager moduleManager) {

logger.debug("instance jvm metric get start timeBucket: {}, end timeBucket:{} , instance id: {}, metric types: {}", startTimeBucketStr, endTimeBucketStr, instanceIdStr, metricTypes);

// 解析 startTimeBucket
long startTimeBucket;
try {
startTimeBucket = Long.parseLong(startTimeBucketStr);
} catch (NumberFormatException e) {
throw new ArgumentsParseException("start timeBucket must be long");
}

// 解析 endTimeBucket
long endTimeBucket;
try {
endTimeBucket = Long.parseLong(endTimeBucketStr);
} catch (NumberFormatException e) {
throw new ArgumentsParseException("end timeBucket must be long");
}

// 解析 instanceId
int instanceId;
try {
instanceId = Integer.parseInt(instanceIdStr);
Expand All @@ -79,6 +83,7 @@ public InstanceMetricGetRangeTimeBucketHandler(ModuleManager moduleManager) {
throw new ArgumentsParseException("at least one metric type");
}

// 解析 metricTypes 数组
Set<String> metricTypeSet = new LinkedHashSet<>();
for (String metricType : metricTypes) {
metricTypeSet.add(metricType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,18 @@

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.util.Set;
import org.skywalking.apm.collector.core.UnexpectedException;
import org.skywalking.apm.collector.core.module.ModuleManager;
import org.skywalking.apm.collector.core.util.ObjectUtils;
import org.skywalking.apm.collector.storage.StorageModule;
import org.skywalking.apm.collector.storage.dao.ICpuMetricUIDAO;
import org.skywalking.apm.collector.storage.dao.IGCMetricUIDAO;
import org.skywalking.apm.collector.storage.dao.IInstPerformanceUIDAO;
import org.skywalking.apm.collector.storage.dao.IInstanceUIDAO;
import org.skywalking.apm.collector.storage.dao.IMemoryMetricUIDAO;
import org.skywalking.apm.collector.storage.dao.IMemoryPoolMetricUIDAO;
import org.skywalking.apm.collector.storage.dao.*;
import org.skywalking.apm.collector.storage.table.register.Instance;
import org.skywalking.apm.network.proto.PoolType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Set;

/**
* @author peng-yongsheng
*/
Expand Down Expand Up @@ -106,18 +102,22 @@ public JsonObject getInstanceJvmMetrics(int instanceId, Set<String> metricTypes,
long endTimeBucket) {
JsonObject metrics = new JsonObject();
for (String metricType : metricTypes) {
// ========== GCMetric ==========
if (metricType.toLowerCase().equals(MetricType.cpu.name())) {
metrics.add(MetricType.cpu.name(), cpuMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket));
} else if (metricType.toLowerCase().equals(MetricType.gc.name())) {
metrics.add(MetricType.gc.name(), gcMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket));
// ========== InstPerformanceMetric ==========
} else if (metricType.toLowerCase().equals(MetricType.tps.name())) {
metrics.add(MetricType.tps.name(), instPerformanceDAO.getTpsMetric(instanceId, startTimeBucket, endTimeBucket));
} else if (metricType.toLowerCase().equals(MetricType.resptime.name())) {
metrics.add(MetricType.resptime.name(), instPerformanceDAO.getRespTimeMetric(instanceId, startTimeBucket, endTimeBucket));
} else if (metricType.toLowerCase().equals(MetricType.heapmemory.name())) {
// ========== MemoryMetric ==========
metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true));
} else if (metricType.toLowerCase().equals(MetricType.nonheapmemory.name())) {
metrics.add(MetricType.nonheapmemory.name(), memoryMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false));
// ========== MemoryPoolMetric ==========
} else if (metricType.toLowerCase().equals(MetricType.permgen.name())) {
metrics.add(MetricType.permgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, PoolType.PERMGEN_USAGE_VALUE));
} else if (metricType.toLowerCase().equals(MetricType.metaspace.name())) {
Expand All @@ -136,8 +136,12 @@ public JsonObject getInstanceJvmMetrics(int instanceId, Set<String> metricTypes,
return metrics;
}

/**
* 指标类型
*/
public enum MetricType {
cpu, gc, tps, resptime, heapmemory, nonheapmemory, permgen, metaspace, newgen,
oldgen, survivor
}

}

0 comments on commit 5ed3828

Please sign in to comment.