From 66bca126aa3a7bb4e1e904a01d9f3ce0fa5c2aca Mon Sep 17 00:00:00 2001 From: ascrutae Date: Tue, 3 May 2016 00:19:14 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=20=E6=96=B0=E5=A2=9ETreeID=E5=92=8CCID?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E5=85=B3=E7=B3=BB=E7=9A=84=E8=A1=A8=202.=20?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9WEBUI=E7=9A=84=E6=8E=92=E5=BA=8F=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analysis/chainbuild/ChainBuildMapper.java | 3 ++ .../chainbuild/ChainBuildReducer.java | 2 +- .../analysis/chainbuild/util/HBaseUtil.java | 11 ++++ .../chainbuild/util/TokenGenerator.java | 37 ++++++------- .../analysis/config/HBaseTableMetaData.java | 13 +++++ .../analysis/mapper/CallChainMapperTest.java | 54 +++++++++++++------ .../util/SpanLevelIdComparators.java | 4 +- .../service/impl/AnalysisResultService.java | 3 +- 8 files changed, 88 insertions(+), 39 deletions(-) diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java index 98289bd178..cec2acd5cc 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java @@ -6,6 +6,7 @@ import com.ai.cloud.skywalking.analysis.chainbuild.filter.SpanNodeProcessFilter; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode; import com.ai.cloud.skywalking.analysis.chainbuild.po.SummaryType; +import com.ai.cloud.skywalking.analysis.chainbuild.util.HBaseUtil; import com.ai.cloud.skywalking.analysis.chainbuild.util.SubLevelSpanCostCounter; import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator; import com.ai.cloud.skywalking.analysis.chainbuild.util.VersionIdentifier; @@ -63,6 +64,8 @@ public class ChainBuildMapper extends TableMapper { chainInfo = spanToChainInfo(Bytes.toString(key.get()), spanList); logger.debug("convert tid[" + Bytes.toString(key.get()) + "] to chain with cid[" + chainInfo.getCID() + "]."); + HBaseUtil.saveTraceIdAndTreeIdMapping(Bytes.toString(key.get()), chainInfo.getCID()); + if (chainInfo.getCallEntrance() != null && chainInfo.getCallEntrance().length() > 0) { for (ChainNode chainNode : chainInfo.getNodes()) { context.write(new Text(SummaryType.HOUR.getValue() + "-" + hourSimpleDateFormat.format( diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java index 91e857b5d5..163670cd7a 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java @@ -37,7 +37,7 @@ public class ChainBuildReducer extends Reducer { if (index == -1) { return; } - String summaryTypeAndDateStr = reduceKey.substring(0, index - 1); + String summaryTypeAndDateStr = reduceKey.substring(0, index); String entryKey = reduceKey.substring(index + 1); logger.debug("begin to reduce for key: {}", reduceKey); diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java index 336914b0c9..1a56dc102b 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java @@ -32,6 +32,9 @@ public class HBaseUtil { createTableIfNeed(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING.TABLE_NAME, HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING.COLUMN_FAMILY_NAME); + createTableIfNeed(HBaseTableMetaData.TABLE_TRACE_ID_AND_CID_MAPPING.TABLE_NAME, + HBaseTableMetaData.TABLE_TRACE_ID_AND_CID_MAPPING.COLUMN_FAMILY_NAME); + createTableIfNeed(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.TABLE_NAME, HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.COLUMN_FAMILY_NAME); @@ -231,4 +234,12 @@ public class HBaseUtil { } + public static void saveTraceIdAndTreeIdMapping(String traceId, String cid) throws IOException { + Put put = new Put(traceId.getBytes()); + put.addColumn(HBaseTableMetaData.TABLE_TRACE_ID_AND_CID_MAPPING.COLUMN_FAMILY_NAME.getBytes(), + HBaseTableMetaData.TABLE_TRACE_ID_AND_CID_MAPPING.COLUMN_NAME.getBytes(), + cid.getBytes()); + Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_TRACE_ID_AND_CID_MAPPING.TABLE_NAME)); + table.put(put); + } } diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/TokenGenerator.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/TokenGenerator.java index 7023ebbb95..c27936d3c9 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/TokenGenerator.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/TokenGenerator.java @@ -26,23 +26,24 @@ public class TokenGenerator { } private static String generate(String originData) { - StringBuilder result = new StringBuilder(); - if (originData != null) { - try { - MessageDigest md = MessageDigest.getInstance("MD5"); - byte bytes[] = md.digest(originData.getBytes()); - for (int i = 0; i < bytes.length; i++) { - String str = Integer.toHexString(bytes[i] & 0xFF); - if (str.length() == 1) { - str += "F"; - } - result.append(str); - } - } catch (NoSuchAlgorithmException e) { - logger.error("Cannot found algorithm.", e); - System.exit(-1); - } - } - return result.toString().toUpperCase(); +// StringBuilder result = new StringBuilder(); +// if (originData != null) { +// try { +// MessageDigest md = MessageDigest.getInstance("MD5"); +// byte bytes[] = md.digest(originData.getBytes()); +// for (int i = 0; i < bytes.length; i++) { +// String str = Integer.toHexString(bytes[i] & 0xFF); +// if (str.length() == 1) { +// str += "F"; +// } +// result.append(str); +// } +// } catch (NoSuchAlgorithmException e) { +// logger.error("Cannot found algorithm.", e); +// System.exit(-1); +// } +// } +// return result.toString().toUpperCase(); + return originData; } } \ No newline at end of file diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java index 084384ab34..b4e4842dea 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java @@ -78,4 +78,17 @@ public class HBaseTableMetaData { public static final String COLUMN_NAME = "been_merged_cid"; } + + /** + * 用于存放TraceID和CID的映射关系 + * + * @author zhangxin + */ + public final static class TABLE_TRACE_ID_AND_CID_MAPPING { + public static final String TABLE_NAME = "sw-traceId-cid-mapping"; + + public static final String COLUMN_FAMILY_NAME = "cid"; + + public static final String COLUMN_NAME = "cid"; + } } diff --git a/skywalking-analysis/src/test/java/com/ai/cloud/skywalking/analysis/mapper/CallChainMapperTest.java b/skywalking-analysis/src/test/java/com/ai/cloud/skywalking/analysis/mapper/CallChainMapperTest.java index 18b3bbe149..bd13ce47f5 100644 --- a/skywalking-analysis/src/test/java/com/ai/cloud/skywalking/analysis/mapper/CallChainMapperTest.java +++ b/skywalking-analysis/src/test/java/com/ai/cloud/skywalking/analysis/mapper/CallChainMapperTest.java @@ -5,6 +5,7 @@ import com.ai.cloud.skywalking.analysis.chainbuild.ChainBuildMapper; import com.ai.cloud.skywalking.analysis.chainbuild.ChainBuildReducer; import com.ai.cloud.skywalking.analysis.chainbuild.action.IStatisticsAction; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; +import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode; import com.ai.cloud.skywalking.analysis.chainbuild.po.SummaryType; import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; @@ -33,7 +34,7 @@ public class CallChainMapperTest { private static String ZK_QUORUM = "10.1.235.197,10.1.235.198,10.1.235.199"; // private static String ZK_QUORUM = "10.1.241.18,10.1.241.19,10.1.241.20"; private static String ZK_CLIENT_PORT = "29181"; - private static String chain_Id = "1.0a2.1453123911750.b3d7400.13582.96.2"; + private static String chain_Id = "1.0b.1461569643178.5b468e7.23292.118.68"; //private static String chain_Id = "1.0a2.1453429608422.2701d43.6468.56.1"; private static Configuration configuration = null; @@ -48,23 +49,42 @@ public class CallChainMapperTest { public static void main(String[] args) throws Exception { ConfigInitializer.initialize(); initHBaseClient(); - List spanList = selectByTraceId(chain_Id); - ChainInfo chainInfo = ChainBuildMapper.spanToChainInfo(chain_Id, spanList); - List chainNodeInfo = new ArrayList<>(); - chainNodeInfo.add(new Text(new Gson().toJson(chainInfo))); - Text key = new Text(SummaryType.RELATIONSHIP + "-" + TokenGenerator.generateTreeToken(chainInfo.getCallEntrance()) - + ":" + chainInfo.getCallEntrance()); - String reduceKey = Bytes.toString(key.getBytes()); - int index = reduceKey.indexOf(":"); - if (index == -1) { - return; + // 2016-04-22/23:57:03 to 2016-05-02/23:47:03 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd/HH:mm:ss"); + Date startDate = simpleDateFormat.parse("2016-04-22/23:57:03"); + Date endDate = simpleDateFormat.parse("2016-05-02/23:47:03"); + Scan scan = new Scan(); + scan.setTimeRange(startDate.getTime(), endDate.getTime()); + Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CALL_CHAIN.TABLE_NAME)); + ResultScanner result = table.getScanner(scan); + int count = 0; + for (Result result1 : result){ + count++; } - - String summaryTypeAndDateStr = reduceKey.substring(0, index - 1); - String entryKey = reduceKey.substring(index + 1); - IStatisticsAction summaryAction = SummaryType.chooseSummaryAction(summaryTypeAndDateStr, entryKey); - - new ChainBuildReducer().doReduceAction(reduceKey, summaryAction, chainNodeInfo.iterator()); + System.out.println(count); + +// List spanList = selectByTraceId(chain_Id); +// ChainInfo chainInfo = ChainBuildMapper.spanToChainInfo(chain_Id, spanList); +// List chainNodeInfo = new ArrayList<>(); +// for (ChainNode chainNode : chainInfo.getNodes()) { +// List value1 = new ArrayList(); +// Text key =new Text(SummaryType.YEAR.getValue() + "-" + yearSimpleDateFormat.format( +// new Date(chainNode.getStartDate()) +// ) + ":" + chainInfo.getCallEntrance()); +// value1.add(new Text(new Gson().toJson(chainNode))); +// +// String reduceKey = Bytes.toString(key.getBytes()); +// int index = reduceKey.indexOf(":"); +// if (index == -1) { +// return; +// } +// +// String summaryTypeAndDateStr = reduceKey.substring(0, index); +// String entryKey = reduceKey.substring(index + 1); +// IStatisticsAction summaryAction = SummaryType.chooseSummaryAction(summaryTypeAndDateStr, entryKey); +// +// new ChainBuildReducer().doReduceAction(reduceKey, summaryAction, value1.iterator()); +// } } public static List selectByTraceId(String traceId) throws IOException { diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/util/SpanLevelIdComparators.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/util/SpanLevelIdComparators.java index ced973aece..51d0db642a 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/util/SpanLevelIdComparators.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/util/SpanLevelIdComparators.java @@ -35,7 +35,7 @@ public class SpanLevelIdComparators { return spanTraceLevelId; } - private static int descComparator(String levelId0, String levelId1) { + public static int descComparator(String levelId0, String levelId1) { String[] levelId0Array = levelId0.split("\\."); String[] levelId1Array = levelId1.split("\\."); int result = -1; @@ -60,7 +60,7 @@ public class SpanLevelIdComparators { } - private static int ascCompare(String levelId0, String levelId1) { + public static int ascCompare(String levelId0, String levelId1) { String[] levelId0Array = levelId0.split("\\."); String[] levelId1Array = levelId1.split("\\."); int result = -1; diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/AnalysisResultService.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/AnalysisResultService.java index 74c291dfd8..99ce7dbf86 100644 --- a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/AnalysisResultService.java +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/AnalysisResultService.java @@ -1,5 +1,6 @@ package com.ai.cloud.skywalking.web.service.impl; +import com.ai.cloud.skywalking.util.SpanLevelIdComparators; import com.ai.cloud.skywalking.web.dao.inter.ICallChainTreeDao; import com.ai.cloud.skywalking.web.dao.inter.ITypicalCallTreeDao; import com.ai.cloud.skywalking.web.dto.CallChainTree; @@ -73,7 +74,7 @@ public class AnalysisResultService implements IAnalysisResultService { Collections.sort(callChainTree.getCallChainTreeNodeList(), new Comparator() { @Override public int compare(CallChainTreeNode o1, CallChainTreeNode o2) { - return o1.getTraceLevelId().compareTo(o2.getTraceLevelId()); + return SpanLevelIdComparators.ascCompare(o1.getTraceLevelId(), o2.getTraceLevelId()); } }); callChainTree.beautifulViewPointForShow(); -- GitLab