From 18b7c5f331be2c23ea5082089ff8f842e214be05 Mon Sep 17 00:00:00 2001 From: wusheng Date: Fri, 26 Feb 2016 15:27:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=A0=B7=E5=BC=8F=202.=E5=A2=9E=E5=8A=A0traceid?= =?UTF-8?q?=E7=9A=84=E6=8F=8F=E8=BF=B0=E6=B3=A8=E9=87=8A=203.=E5=9C=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1MR=E4=BB=A3=E7=A0=81=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E5=8A=A0=E5=85=A5=E5=AF=B9=E4=BA=8Etid?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=E5=8F=B7=E8=AF=86=E5=88=AB=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E6=97=A0=E6=95=88=E7=9A=84=E3=80=81=E4=B8=8D?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E7=9A=84=E4=BD=8E=E7=89=88=E6=9C=AC=E7=9A=84?= =?UTF-8?q?traceid=E4=B8=8D=E4=BC=9A=E8=BF=9B=E5=85=A5=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E5=88=86=E6=9E=90=E7=B3=BB=E7=BB=9F=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=80=A0=E6=88=90=E4=B8=8D=E5=8F=AF=E9=A2=84?= =?UTF-8?q?=E7=9F=A5=E7=9A=84=E7=BB=93=E6=9E=9C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Categorize2ChainMapper.java | 5 ++ .../util/VersionIdentifier.java | 31 +++++++++++ .../chain2summary/Chain2SummaryMapper.java | 3 +- .../chain2summary/Chain2SummaryReducer.java | 5 +- .../analysis/chain2summary/Summary.java | 4 +- .../ai/cloud/skywalking/conf/Constants.java | 3 ++ .../skywalking/util/TraceIdGenerator.java | 52 +++++++++++-------- 7 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/util/VersionIdentifier.java diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/Categorize2ChainMapper.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/Categorize2ChainMapper.java index f80d3a1d2..d788dce60 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/Categorize2ChainMapper.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/Categorize2ChainMapper.java @@ -23,6 +23,7 @@ import com.ai.cloud.skywalking.analysis.categorize2chain.po.ChainInfo; import com.ai.cloud.skywalking.analysis.categorize2chain.po.ChainNode; import com.ai.cloud.skywalking.analysis.categorize2chain.util.HBaseUtil; import com.ai.cloud.skywalking.analysis.categorize2chain.util.SubLevelSpanCostCounter; +import com.ai.cloud.skywalking.analysis.categorize2chain.util.VersionIdentifier; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; import com.ai.cloud.skywalking.protocol.Span; @@ -39,6 +40,10 @@ public class Categorize2ChainMapper extends TableMapper { @Override protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException { + if(!VersionIdentifier.enableAnaylsis(Bytes.toString(key.get()))){ + return; + } + List spanList = new ArrayList(); ChainInfo chainInfo = null; try { diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/util/VersionIdentifier.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/util/VersionIdentifier.java new file mode 100644 index 000000000..a24b236fd --- /dev/null +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/categorize2chain/util/VersionIdentifier.java @@ -0,0 +1,31 @@ +package com.ai.cloud.skywalking.analysis.categorize2chain.util; + +/** + * 版本识别器 + * + * @author wusheng + * + */ +public class VersionIdentifier { + /** + * 根据tid识别数据是否可分析
+ * 目前允许分析所有1.x的版本号 + * + * @param tid + * @return + */ + public static boolean enableAnaylsis(String tid){ + if(tid != null){ + String[] tidSections = tid.split("\\."); + if(tidSections.length == 7){ + String version = tidSections[0]; + String subVersion = tidSections[1]; + + if("1".equals(version) && subVersion.length() > 0){ + return true; + } + } + } + return false; + } +} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryMapper.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryMapper.java index 0bafb3576..6324d9a89 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryMapper.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryMapper.java @@ -17,7 +17,7 @@ import java.io.IOException; public class Chain2SummaryMapper extends TableMapper { private Logger logger = LoggerFactory - .getLogger(Chain2SummaryMapper.class.getName()); + .getLogger(Chain2SummaryMapper.class); @Override @@ -36,7 +36,6 @@ public class Chain2SummaryMapper extends TableMapper { private Logger logger = LoggerFactory - .getLogger(Chain2SummaryReducer.class.getName()); + .getLogger(Chain2SummaryReducer.class); @Override protected void setup(Context context) throws IOException, InterruptedException { @@ -36,7 +36,6 @@ public class Chain2SummaryReducer extends Reducer ThreadTraceIdSequence = new ThreadLocal(); + private static final ThreadLocal ThreadTraceIdSequence = new ThreadLocal(); - private static final String PROCESS_UUID; + private static final String PROCESS_UUID; - static { - String uuid = UUID.randomUUID().toString().replaceAll("-", ""); - PROCESS_UUID = uuid.substring(uuid.length() - 7); - } + static { + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + PROCESS_UUID = uuid.substring(uuid.length() - 7); + } - private TraceIdGenerator() { - } + private TraceIdGenerator() { + } - public static String generate() { - Integer seq = ThreadTraceIdSequence.get(); - if (seq == null || seq == 10000 || seq > 10000) { - seq = 0; - } - seq++; - ThreadTraceIdSequence.set(seq); + /** + * TraceId由以下规则组成
+ * 2位version号 + 1位时间戳(毫秒数) + 1位进程随机号(UUID后7位) + 1位进程数号 + 1位线程号 + 1位线程内序号 + * + * 注意:这里的位,是指“.”作为分隔符所占的位数,非字符串长度的位数。 + * TraceId为不定长字符串,但保证在分布式集群条件下的唯一性 + * + * @return + */ + public static String generate() { + Integer seq = ThreadTraceIdSequence.get(); + if (seq == null || seq == 10000 || seq > 10000) { + seq = 0; + } + seq++; + ThreadTraceIdSequence.set(seq); - return Constants.SDK_VERSION + "." + System.currentTimeMillis() - + "."+ PROCESS_UUID - + "."+ BuriedPointMachineUtil.getProcessNo() - + "."+ Thread.currentThread().getId() - + "."+ seq; - } + return Constants.SDK_VERSION + + "." + System.currentTimeMillis() + + "." + PROCESS_UUID + + "." + BuriedPointMachineUtil.getProcessNo() + + "." + Thread.currentThread().getId() + + "." + seq; + } }