diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Constants.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Constants.java index ee52e249a..234541c54 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Constants.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Constants.java @@ -4,5 +4,5 @@ public class Constants { public static final String HEALTH_DATA_SPILT_PATTERN = "^~"; - public static final String DATA_SPILT = ","; + public static final String DATA_SPILT = "#&"; } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java index 7b1420433..ea5b3f4cd 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java @@ -21,8 +21,8 @@ public class DataSenderFactory { private static Logger logger = Logger.getLogger(DataSenderFactory.class.getName()); - private static List socketAddresses = new ArrayList(); - private static List unUsedSocketAddresses = new ArrayList(); + private static Set socketAddresses = new HashSet(); + private static Set unUsedSocketAddresses = new HashSet(); private static List availableSenders = new ArrayList(); private static Object lock = new Object(); @@ -31,17 +31,13 @@ public class DataSenderFactory { if (StringUtil.isEmpty(Config.Sender.SERVERS_ADDR)) { throw new IllegalArgumentException("Collection service configuration error."); } - //过滤重复地址 - Set tmpSocktAddress = new HashSet(); + for (String serverConfig : Config.Sender.SERVERS_ADDR.split(";")) { String[] server = serverConfig.split(":"); if (server.length != 2) throw new IllegalArgumentException("Collection service configuration error."); - tmpSocktAddress.add(new InetSocketAddress(server[0], Integer.valueOf(server[1]))); + socketAddresses.add(new InetSocketAddress(server[0], Integer.valueOf(server[1]))); } - - socketAddresses.addAll(tmpSocktAddress); - } catch (Exception e) { logger.log(Level.ALL, "Collection service configuration error.", e); System.exit(-1); @@ -76,18 +72,18 @@ public class DataSenderFactory { // 初始化DataSender List usedSocketAddress = new ArrayList(); - int index; - while (availableSenders.size() < availableSize) { - // 随机获取服务器地址 - index = ThreadLocalRandom.current().nextInt(socketAddresses.size()); + for (SocketAddress socketAddress : socketAddresses) { + if (availableSenders.size() >= availableSize) { + break; + } try { - availableSenders.add(new DataSender(socketAddresses.get(index))); - usedSocketAddress.add(socketAddresses.get(index)); + availableSenders.add(new DataSender(socketAddress)); + usedSocketAddress.add(socketAddress); } catch (IOException e) { - unUsedSocketAddresses.add(socketAddresses.get(index)); + unUsedSocketAddresses.add(socketAddress); } } - unUsedSocketAddresses = new ArrayList(socketAddresses); + unUsedSocketAddresses = new HashSet(socketAddresses); unUsedSocketAddresses.removeAll(usedSocketAddress); } diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java index bdfc2e070..aeadf5912 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java @@ -37,12 +37,13 @@ public class Span extends SpanData { statusCode = Byte.valueOf(fieldValues[7].trim()); //异常情况才会存在exceptionStack if (statusCode == 1) { - exceptionStack = fieldValues[8].trim().replaceAll(SpanData.EXCEPTION_SPILT_PATTERN, - SpanData.NEW_LINE_CHARACTER_PATTERN); + exceptionStack = fieldValues[8].trim().replaceAll(SPAN_ATTR_SPILT_CHARACTER, + NEW_LINE_CHARACTER_PATTERN); } spanType = fieldValues[9].charAt(0); isReceiver = Boolean.valueOf(fieldValues[10]); - businessKey = fieldValues[11].trim().replaceAll(BUSINESSKEY_SPILT_PATTERN, + + businessKey = fieldValues[11].trim().replaceAll(SPAN_ATTR_SPILT_CHARACTER, NEW_LINE_CHARACTER_PATTERN); processNo = fieldValues[12].trim(); applicationId = fieldValues[13].trim(); @@ -81,7 +82,11 @@ public class Span extends SpanData { toStringValue.append(statusCode + SPAN_FIELD_SPILT_PATTERN); if (isNonBlank(exceptionStack)) { - toStringValue.append(exceptionStack.replaceAll(NEW_LINE_CHARACTER_PATTERN, EXCEPTION_SPILT_PATTERN) + //换行符在各个系统中表现不一致, + //windows平台的换行符为/r/n + //linux平台的换行符为/n + toStringValue.append(exceptionStack.replaceAll(CARRIAGE_RETURN_CHARACTER_PATTERN, "") + .replaceAll(NEW_LINE_CHARACTER_PATTERN, SPAN_ATTR_SPILT_CHARACTER) + SPAN_FIELD_SPILT_PATTERN); } else { toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); @@ -92,8 +97,12 @@ public class Span extends SpanData { if (isNonBlank(businessKey)) { - toStringValue.append(businessKey.replaceAll(NEW_LINE_CHARACTER_PATTERN, - BUSINESSKEY_SPILT_PATTERN) + SPAN_FIELD_SPILT_PATTERN); + //换行符在各个系统中表现不一致, + //windows平台的换行符为/r/n + //linux平台的换行符为/n + toStringValue.append(businessKey.replaceAll(CARRIAGE_RETURN_CHARACTER_PATTERN, "") + .replaceAll(NEW_LINE_CHARACTER_PATTERN, SPAN_ATTR_SPILT_CHARACTER) + + SPAN_FIELD_SPILT_PATTERN); } else { toStringValue.append(" " + SPAN_FIELD_SPILT_PATTERN); } @@ -134,4 +143,5 @@ public class Span extends SpanData { } this.exceptionStack = expMessage.toString(); } + } diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java index f3ab72e96..01dd054e8 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/SpanData.java @@ -2,10 +2,10 @@ package com.ai.cloud.skywalking.protocol; public abstract class SpanData { - protected static final String SPAN_FIELD_SPILT_PATTERN = ".\u007F"; - protected static final String BUSINESSKEY_SPILT_PATTERN = "'\u007F"; - protected static final String NEW_LINE_CHARACTER_PATTERN = "\r\n"; - protected static final String EXCEPTION_SPILT_PATTERN = ";\u007F"; + protected static final String SPAN_FIELD_SPILT_PATTERN = "@~"; + protected static final String SPAN_ATTR_SPILT_CHARACTER = "#~"; + protected static final String NEW_LINE_CHARACTER_PATTERN = "\n"; + protected static final String CARRIAGE_RETURN_CHARACTER_PATTERN = "\r"; protected String traceId; protected String parentLevel; @@ -123,4 +123,5 @@ public abstract class SpanData { public String getApplicationId() { return applicationId; } + } diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Constants.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Constants.java index a3a477846..9107b73f7 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Constants.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Constants.java @@ -1,9 +1,7 @@ package com.ai.cloud.skywalking.reciever.conf; public class Constants { - public static final String spiltRegx = "\\^\\~"; - public static final String HEALTH_DATA_SPILT_PATTERN = "^~"; - public static final String DATA_SPILT = ","; + public static final String DATA_SPILT = "#&"; }