traceId的生成
public String getTransactionId() { return TransactionIdUtils.formatString(agentId, agentStartTime, transactionSequence); } public static final String TRANSACTION_ID_DELIMITER = "^"; public static String formatString(String agentId, long agentStartTime, long transactionSequence) { if (agentId == null) { throw new NullPointerException("agentId must not be null"); } StringBuilder sb = new StringBuilder(64); sb.append(agentId); sb.append(TRANSACTION_ID_DELIMITER); sb.append(agentStartTime); sb.append(TRANSACTION_ID_DELIMITER); sb.append(transactionSequence); return sb.toString(); }
spanId的生成
public class SpanId { public static final long NULL = -1;// private static final Random seed = new Random(); public static long newSpanId() { final Random random = getRandom(); return createSpanId(random); } // Changed to ThreadLocalRandom because unique value per thread will be enough. // If you need to change Random implementation, modify this method. private static Random getRandom() { return ThreadLocalRandomUtils.current(); } private static long createSpanId(Random seed) { long id = seed.nextLong(); while (id == NULL) { id = seed.nextLong(); } return id; } public static long nextSpanID(long spanId, long parentSpanId) { final Random seed = getRandom(); long newId = createSpanId(seed); while (newId == spanId || newId == parentSpanId) { newId = createSpanId(seed); } return newId; }}
docs