pinpoint表结构(转)

在这里插入图片描述图片的资源:
https://download.csdn.net/download/qq_37822914/12466664

资源参考:
https://www.jianshu.com/p/f230377c64d4

https://aidodoo.com/post/others/pinpoint数据结构/
https://aidodoo.com/post/others/pinpoint数据结构/ 中的内容为:

本文主要基于源码整理pinpoint的hbase的表结构,以便于作为参考,二次开发或者定义我们自己的架构数据结构。

AgentInfo
用途
主键
总共32字节,前24字节为agentId,后8字节为Long.MAX_VALUE-time

byte[] agentId = Bytes.toBytes(agentInfo.getAgentId());
long reverseKey = TimeUtils.reverseTimeMillis(agentInfo.getStartTimestamp());
byte[] rowKey = RowKeyUtils.concatFixedByteAndLong(agentId, HBaseTables.AGENT_NAME_MAX_LEN, reverseKey);
列簇和列
列簇:Info
public static final byte[] AGENTINFO_CF_INFO = Bytes.toBytes(“Info”);
列:i
public static final byte[] AGENTINFO_CF_INFO_IDENTIFIER = Bytes.toBytes(“i”);
可能包含的信息如下:
i hostName
ip
ports
agentId
applicationName
serviceTypeCode
pid
vmVersion
agentVersion
startTime
endTimeStamp
endStatus
serverMetaData
jvmInfo
列:m
public static final byte[] AGENTINFO_CF_INFO_SERVER_META_DATA = Bytes.toBytes(“m”);
可能包含的信息如下:

m serverInfo
vmArgs
serviceInfos
列:j
public static final byte[] AGENTINFO_CF_INFO_JVM = Bytes.toBytes(“j”);
可能包含的信息如下:

j version
jvmVersion
gcTypeName
AgentStatV2
用途
主键
前24字节为agentId,后8字节为Long.MAX_VALUE-time,中间的为AgentStatType,其中AgentStatType取值如下:

UNKNOWN(0, “Unknown”),
JVM_GC(1, “JVM GC”),
JVM_GC_DETAILED(2, “JVM GC Detailed”),
CPU_LOAD(3, “Cpu Usage”),
TRANSACTION((byte) 4, “Transaction”),
ACTIVE_TRACE((byte) 5, “Active Trace”),
DATASOURCE((byte) 6, “DataSource”),
RESPONSE_TIME((byte) 7, “Response Time”),
DEADLOCK((byte) 8, “Deadlock”);
key构建代码如下:

byte[] bAgentId = BytesUtils.toBytes(component.getAgentId());
byte[] bStatType = new byte[]{component.getAgentStatType().getRawTypeCode()};
byte[] rowKey = new byte[AGENT_NAME_MAX_LEN + bStatType.length + BytesUtils.LONG_BYTE_LENGTH];
BytesUtils.writeBytes(rowKey, 0, bAgentId);
BytesUtils.writeBytes(rowKey, AGENT_NAME_MAX_LEN, bStatType);
BytesUtils.writeLong(TimeUtils.reverseTimeMillis(component.getBaseTimestamp()), rowKey, AGENT_NAME_MAX_LEN + bStatType.length);
该key构建完成后,看源码又通过com.sematext.hbase.wd.AbstractRowKeyDistributor进行一次离散化。

byte[] distributedRowKey = this.rowKeyDistributor.getDistributedKey(rowKey);
AbstractRowKeyDistributor在hbasewd中原生主要有RowKeyDistributorByOneBytePrefix和RowKeyDistributorByHashPrefix两个实现,主要是在rowkey前面再添加hashkey以实现离散化,具体的可以去研究,基本原理可参考通过顺序RowKey避免HBase RegionServer热点问题

列簇和列
表AgentStatV2能写入的信息比较多,主要是JVM、CPU等统计信息。
其中HbaseActiveTraceDao、HbaseCpuLoadDao、HbaseDataSourceListDao、HbaseJvmGcDao、HbaseJvmGcDetailedDao、HbaseResponseTimeDao、HbaseTransactionDao均实现了AgentStatDaoV2接口中定义的insert方法。

以HbaseCpuLoadDao为例,其实现AgentStatDaoV2,含有如下四个成员变量,主要用于序列化和rowkey构建和数据插入到hbase

private HbaseOperations2 hbaseTemplate;
private TableNameProvider tableNameProvider;
private AgentStatHbaseOperationFactory agentStatHbaseOperationFactory;
private CpuLoadSerializer cpuLoadSerializer;

接口AgentStatDaoV2定义如下:

public interface AgentStatDaoV2 {
void insert(String agentId, List agentStatDataPoints);
}
而AgentStatDataPoint的实现类如下:

进而能写入所有实现了AgentStatDataPoint接口的类的数据。
列簇名均为S

public static final byte[] AGENT_STAT_CF_STATISTICS = Bytes.toBytes(“S”)
具体内容因AgentStatDataPoint的实现类不同,列举如下:

写入ActiveTraceBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private short version = 0;
private int histogramSchemaType;
private ActiveTraceHistogram activeTraceHistogram;
写入CpuLoadBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private double jvmCpuLoad = UNCOLLECTED_VALUE;
private double systemCpuLoad = UNCOLLECTED_VALUE;
写入DataSourceBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private int id = UNCOLLECTED_INT_VALUE;
private short serviceTypeCode = UNCOLLECTED_SERVICE_TYPE_VALUE.getCode();
private String databaseName = UNCOLLECTED_STRING_VALUE;
private String jdbcUrl = UNCOLLECTED_STRING_VALUE;
private int activeConnectionSize = UNCOLLECTED_INT_VALUE;
private int maxConnectionSize = UNCOLLECTED_INT_VALUE;
写入DeadlockBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private int deadlockedThreadCount = UNCOLLECTED_INT_VALUE;
private List threadDumpList;
写入JvmGcBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private JvmGcType gcType = JvmGcType.UNKNOWN;
private long heapUsed = UNCOLLECTED_VALUE;
private long heapMax = UNCOLLECTED_VALUE;
private long nonHeapUsed = UNCOLLECTED_VALUE;
private long nonHeapMax = UNCOLLECTED_VALUE;
private long gcOldCount = UNCOLLECTED_VALUE;
private long gcOldTime = UNCOLLECTED_VALUE
写入JvmGcDetailedBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private long gcNewCount = UNCOLLECTED_VALUE;
private long gcNewTime = UNCOLLECTED_VALUE;
private double codeCacheUsed = UNCOLLECTED_PERCENTAGE;
private double newGenUsed = UNCOLLECTED_PERCENTAGE;
private double oldGenUsed = UNCOLLECTED_PERCENTAGE;
private double survivorSpaceUsed = UNCOLLECTED_PERCENTAGE;
private double permGenUsed = UNCOLLECTED_PERCENTAGE;
private double metaspaceUsed = UNCOLLECTED_PERCENTAGE
写入ResponseTimeBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private long avg = 0;
private long max = 0;
写入TransactionBo信息时,可选项

private String agentId;
private long startTimestamp;
private long timestamp;
private long collectInterval = UNCOLLECTED_VALUE;
private long sampledNewCount = UNCOLLECTED_VALUE;
private long sampledContinuationCount = UNCOLLECTED_VALUE;
private long unsampledNewCount = UNCOLLECTED_VALUE;
private long unsampledContinuationCount = UNCOLLECTED_VALUE;
ApplicationStatAggre
用途
主键
applicationId+statType+baseTimestamp
具体构建如下:

byte[] bApplicationId = BytesUtils.toBytes(component.getApplicationId());
byte[] bStatType = new byte[]{component.getStatType().getRawTypeCode()};
byte[] rowKey = new byte[APPLICATION_NAME_MAX_LEN + bStatType.length + BytesUtils.LONG_BYTE_LENGTH];

BytesUtils.writeBytes(rowKey, 0, bApplicationId);
BytesUtils.writeBytes(rowKey, APPLICATION_NAME_MAX_LEN, bStatType);
BytesUtils.writeLong(TimeUtils.reverseTimeMillis(component.getBaseTimestamp()), rowKey, APPLICATION_NAME_MAX_LEN + bStatType.length);
列簇
public static final byte[] APPLICATION_STAT_CF_STATISTICS = Bytes.toBytes(“S”);
ApplicationStatAggre能写入实现JoinStatBo接口的类的信息,其实现主要位于com.navercorp.pinpoint.common.server.bo.stat.join包,如下:

写入JoinActiveTraceBo信息时,可选项

private String id = UNKNOWN_ID;
private long timestamp = Long.MIN_VALUE;
private int histogramSchemaType = DEFAULT_HISTOGRAM_SCHEMA_TYPE;
private short version = DEFAULT_VERSION;
private int totalCount = UNCOLLECTED_VALUE;
private String maxTotalCountAgentId = UNKNOWN_AGENT;
private int maxTotalCount = UNCOLLECTED_VALUE;
private String minTotalCountAgentId = UNKNOWN_AGENT;
private int minTotalCount = UNCOLLECTED_VALUE;
写入JoinCpuLoadBo信息时,可选项

private String id = UNKNOWN_ID;
private long timestamp = Long.MIN_VALUE;

private double jvmCpuLoad = UNCOLLECTED_VALUE;
private String maxJvmCpuAgentId = UNKNOWN_AGENT;
private double maxJvmCpuLoad = UNCOLLECTED_VALUE;
private String minJvmCpuAgentId = UNKNOWN_AGENT;
private double minJvmCpuLoad = UNCOLLECTED_VALUE;

private double systemCpuLoad = UNCOLLECTED_VALUE;
private String maxSysCpuAgentId = UNKNOWN_AGENT;
private double maxSystemCpuLoad = UNCOLLECTED_VALUE;
private String minSysCpuAgentId = UNKNOWN_AGENT;
private double minSystemCpuLoad = UNCOLLECTED_VALUE;
写入JoinDataSourceBo信息时,可选项

private short serviceTypeCode = UNDEFINED_CATEGORY;
private String url = EMPTY_URL;
private int avgActiveConnectionSize = UNCOLLECTED_VALUE;
private int minActiveConnectionSize = UNCOLLECTED_VALUE;
private String minActiveConnectionAgentId = UNKNOWN_AGENT;
private int maxActiveConnectionSize = UNCOLLECTED_VALUE;
private String maxActiveConnectionAgentId = UNKNOWN_AGENT;
写入JoinMemoryBo信息时,可选项

private String id = UNKNOWN_ID;
private long timestamp = Long.MIN_VALUE;
private long heapUsed = UNCOLLECTED_VALUE;
private long minHeapUsed = UNCOLLECTED_VALUE;
private long maxHeapUsed = UNCOLLECTED_VALUE;
private String minHeapAgentId = UNKNOWN_AGENT;
private String maxHeapAgentId = UNKNOWN_AGENT;
private long nonHeapUsed = UNCOLLECTED_VALUE;
private long minNonHeapUsed = UNCOLLECTED_VALUE;
private long maxNonHeapUsed = UNCOLLECTED_VALUE;
private String minNonHeapAgentId = UNKNOWN_AGENT;
private String maxNonHeapAgentId = UNKNOWN_AGENT;
写入JoinResponseTimeBo信息时,可选项

private String id = UNKNOWN_ID;
private long timestamp = Long.MIN_VALUE;
private long avg = UNCOLLECTED_VALUE;
private String maxAvgAgentId = UNKNOWN_AGENT;
private long maxAvg = UNCOLLECTED_VALUE;
private String minAvgAgentId = UNKNOWN_AGENT;
private long minAvg = UNCOLLECTED_VALUE;
写入JoinTransactionBo信息时,可选项

private String id = UNKNOWN_ID;
private long collectInterval = UNCOLLECTED_VALUE;
private long totalCount = UNCOLLECTED_VALUE;
private String maxTotalCountAgentId = UNKNOWN_AGENT;
private long maxTotalCount = UNCOLLECTED_VALUE;
private String minTotalCountAgentId = UNKNOWN_AGENT;
private long minTotalCount = UNCOLLECTED_VALUE;
private long timestamp = Long.MIN_VALUE;
ApplicationIndex
用途
主键
​ ApplicationName

列簇
public static final byte[] APPLICATION_INDEX_CF_AGENTS = Bytes.toBytes(“Agents”);

​ agentId 内容为ServiceType,具体代码

Put put = new Put(Bytes.toBytes(agentInfo.getApplicationName()));
byte[] qualifier = Bytes.toBytes(agentInfo.getAgentId());
byte[] value = Bytes.toBytes(agentInfo.getServiceType());

put.addColumn(APPLICATION_INDEX_CF_AGENTS, qualifier, value);
AgentLifeCycle
用途
主键
agentId+reverseTime+reverseEventCounter
具体代码:

byte[] agentIdKey = Bytes.toBytes(agentId);
long reverseStartTimestamp = TimeUtils.reverseTimeMillis(startTimestamp);
long reverseEventCounter = TimeUtils.reverseTimeMillis(eventIdentifier);
byte[] rowKey = new byte[HBaseTables.AGENT_NAME_MAX_LEN + BytesUtils.LONG_BYTE_LENGTH + BytesUtils.LONG_BYTE_LENGTH];
BytesUtils.writeBytes(rowKey, 0, agentIdKey);
int offset = HBaseTables.AGENT_NAME_MAX_LEN;
BytesUtils.writeLong(reverseStartTimestamp, rowKey, offset);
offset += BytesUtils.LONG_BYTE_LENGTH;
BytesUtils.writeLong(reverseEventCounter, rowKey, offset);
列簇
public static final byte[] AGENT_LIFECYCLE_CF_STATUS = Bytes.toBytes(“S”);

public static final byte[] AGENT_LIFECYCLE_CF_STATUS_QUALI_STATES = Bytes.toBytes(“states”);
具体内容为AgentLifeCycleBo,可选项

private final byte version;
private final String agentId;
private final long startTimestamp;
private final long eventTimestamp;
private final long eventIdentifier;
private final AgentLifeCycleState agentLifeCycleState;
AgentEvent
用途
主键
​ agentId+reverseTime 具体构建代码:

byte[] agentIdKey = BytesUtils.toBytes(agentId);
long reverseStartTimestamp = TimeUtils.reverseTimeMillis(eventTimestamp);
return RowKeyUtils.concatFixedByteAndLong(agentIdKey, HBaseTables.AGENT_NAME_MAX_LEN, reverseStartTimestamp);
列簇
public static final byte[] AGENT_EVENT_CF_EVENTS = Bytes.toBytes(“E”)

列主要是agent的事件类型AgentEventType,可选项:

AGENT_CONNECTED(10100, “Agent connected”, Void.class, DURATIONAL, AGENT_LIFECYCLE),
AGENT_PING(10199, “Agent ping”, Void.class, AGENT_LIFECYCLE),
AGENT_SHUTDOWN(10200, “Agent shutdown”, Void.class, DURATIONAL, AGENT_LIFECYCLE),
AGENT_UNEXPECTED_SHUTDOWN(10201, “Agent unexpected shutdown”, Void.class, DURATIONAL, AGENT_LIFECYCLE),
AGENT_CLOSED_BY_SERVER(10300, “Agent connection closed by server”, Void.class, DURATIONAL, AGENT_LIFECYCLE),
AGENT_UNEXPECTED_CLOSE_BY_SERVER(10301, “Agent connection unexpectedly closed by server”, Void.class, DURATIONAL, AGENT_LIFECYCLE),
AGENT_DEADLOCK_DETECTED(10401, “Agent deadlock detected”, TDeadlock.class, AGENT_LIFECYCLE),
USER_THREAD_DUMP(20100, “Thread dump by user”, TCommandThreadDumpResponse.class, USER_REQUEST, THREAD_DUMP),
OTHER(-1, “Other event”, String.class, AgentEventTypeCategory.OTHER);
内容主要是AgentEventBo,可选项

private final byte version;
private final String agentId;
private final long startTimestamp;
private final long eventTimestamp;
private final AgentEventType eventType;
private byte[] eventBody;
StringMetaData
用途
主键
agentId+startTime+stringId
具体代码

final byte[] buffer = new byte[AGENT_NAME_MAX_LEN + LONG_BYTE_LENGTH + INT_BYTE_LENGTH];
BytesUtils.writeBytes(buffer, 0, agentBytes)
long reverseCurrentTimeMillis = TimeUtils.reverseTimeMillis(agentStartTime);
BytesUtils.writeLong(reverseCurrentTimeMillis, buffer, AGENT_NAME_MAX_LEN);
BytesUtils.writeInt(keyCode, buffer, AGENT_NAME_MAX_LEN + LONG_BYTE_LENGTH);
组合完后还需要在前面添加前缀

final byte[] rowKey = getDistributedKey(stringMetaDataBo.toRowKey());
private byte[] getDistributedKey(byte[] rowKey) {
return rowKeyDistributorByHashPrefix.getDistributedKey(rowKey);
}
列簇
public static final byte[] STRING_METADATA_CF_STR = Bytes.toBytes(“Str”)

private java.lang.String agentId; // required
private long agentStartTime; // required
private int stringId; // required
private java.lang.String stringValue; // required
ApiMetaData
用途
主键
AgentId+AgentStartTime+ApiId
组合完后还需要在前面添加前缀

final byte[] rowKey = getDistributedKey(stringMetaDataBo.toRowKey());
private byte[] getDistributedKey(byte[] rowKey) {
return rowKeyDistributorByHashPrefix.getDistributedKey(rowKey);
}
列簇
public static final byte[] API_METADATA_CF_API = Bytes.toBytes(“Api”);

public static final byte[] API_METADATA_CF_API_QUALI_SIGNATURE = Bytes.toBytes(“P_api_signature”);
内容:

private java.lang.String agentId; // required
private long agentStartTime; // required
private int apiId; // required
private java.lang.String apiInfo; // required
private int line; // optional
private int type; // optional
SqlMetaData_Ver2
用途
主键
AgentId+AgentStartTime+SqlId
组合完后还需要在前面添加前缀

final byte[] rowKey = getDistributedKey(sqlMetaDataBo.toRowKey());
private byte[] getDistributedKey(byte[] rowKey) {
return rowKeyDistributorByHashPrefix.getDistributedKey(rowKey);
}
列簇
public static final byte[] SQL_METADATA_VER2_CF_SQL = Bytes.toBytes(“Sql”);

public static final byte[] SQL_METADATA_VER2_CF_SQL_QUALI_SQLSTATEMENT = Bytes.toBytes(“P_sql_statement”);
内容:

private java.lang.String agentId; // required
private long agentStartTime; // required
private int sqlId; // required
private java.lang.String sql; // required
TraceV2
用途
主键
​ AgentId+AgentStartTime+TransactionSequence

组合完后还需要在前面添加前缀

final byte[] rowKey = getDistributedKey(stringMetaDataBo.toRowKey());
private byte[] getDistributedKey(byte[] rowKey) {
return rowKeyDistributorByHashPrefix.getDistributedKey(rowKey);
}

return wrapDistributedRowKey(rowKey);
private byte[] wrapDistributedRowKey(byte[] rowKey) {
return rowKeyDistributor.getDistributedKey(rowKey);
}
列簇
​ public static final byte[] TRACE_V2_CF_SPAN = Bytes.toBytes(“S”); //Span


列名的构造代码如下:

private ByteBuffer encodeQualifier(byte type, String applicationId, String agentId, long agentStartTime, long spanId, SpanEventBo firstEvent) {
final Buffer buffer = new AutomaticBuffer(128);
buffer.putByte(type);
buffer.putPrefixedString(applicationId);
buffer.putPrefixedString(agentId);
buffer.putVLong(agentStartTime);
buffer.putLong(spanId);

if (firstEvent != null) {
    buffer.putSVInt(firstEvent.getSequence());

    final byte bitField = SpanEventQualifierBitField.buildBitField(firstEvent);
    buffer.putByte(bitField);
    // case : async span
    if (SpanEventQualifierBitField.isSetAsync(bitField)) {
        buffer.putInt(firstEvent.getAsyncId());
        buffer.putVInt(firstEvent.getAsyncSequence());
    }
} else {
    // simple trace case

// buffer.putSVInt((short) -1);

// byte cfBitField = SpanEventQualifierBitField.setAsync((byte) 0, false);
// buffer.putByte(cfBitField);
}

return buffer.wrapByteBuffer();

}
列的内容如下,主要由SpanBo构造而成

public ByteBuffer encodeSpanColumnValue(SpanEncodingContext encodingContext) {
final SpanBo span = encodingContext.getValue();

final SpanBitFiled bitField = SpanBitFiled.build(span);

final Buffer buffer = new AutomaticBuffer(256);

final byte version = span.getRawVersion();
buffer.putByte(version);

// bit field
buffer.putByte(bitField.getBitField());


final short serviceType = span.getServiceType();
buffer.putShort(serviceType);

switch (bitField.getApplicationServiceTypeEncodingStrategy()) {
    case PREV_EQUALS:
        break;
    case RAW:
        buffer.putShort(span.getApplicationServiceType());
        break;
    default:
        throw new IllegalStateException("applicationServiceType");
}


// insert for rowkey
// buffer.put(spanID);
if (!bitField.isRoot()) {
    buffer.putLong(span.getParentSpanId());
}

// prevSpanEvent coding
final long startTime = span.getStartTime();
final long startTimeDelta = span.getCollectorAcceptTime() - startTime;
buffer.putVLong(startTimeDelta);
buffer.putVInt(span.getElapsed());


buffer.putPrefixedString(span.getRpc());

buffer.putPrefixedString(span.getEndPoint());
buffer.putPrefixedString(span.getRemoteAddr());
buffer.putSVInt(span.getApiId());


// BIT flag
if (bitField.isSetErrorCode()) {
    buffer.putInt(span.getErrCode());
}

if (bitField.isSetHasException()) {
    buffer.putSVInt(span.getExceptionId());
    buffer.putPrefixedString(span.getExceptionMessage());
}

if (bitField.isSetFlag()) {
    buffer.putShort(span.getFlag());
}


if (bitField.isSetLoggingTransactionInfo()) {
    buffer.putByte(span.getLoggingTransactionInfo());
}

buffer.putPrefixedString(span.getAcceptorHost());

if (bitField.isSetAnnotation()) {
    List<AnnotationBo> annotationBoList = span.getAnnotationBoList();
    writeAnnotationList(buffer, annotationBoList, encodingContext);
}

final List<SpanEventBo> spanEventBoList = span.getSpanEventBoList();
writeSpanEventList(buffer, spanEventBoList, encodingContext);

return buffer.wrapByteBuffer();

}
ApplicationTraceIndex
用途
主键
applicationName+acceptedTime
代码如下:

public static byte[] getApplicationTraceIndexRowKey(String applicationName, long timestamp) {
if (applicationName == null) {
throw new IllegalArgumentException(“agentId must not null”);
}
final byte[] bApplicationName = BytesUtils.toBytes(applicationName);
return RowKeyUtils.concatFixedByteAndLong(bApplicationName, AGENT_NAME_MAX_LEN, TimeUtils.reverseTimeMillis(timestamp));
}
列簇
​ public static final byte[] APPLICATION_TRACE_INDEX_CF_TRACE = Bytes.toBytes(“I”);


列名主要通过getVarTransactionId生成:

public static byte[] getVarTransactionId(TSpan span) {
if (span == null) {
throw new NullPointerException(“span must not be null”);
}
final byte[] transactionIdBytes = span.getTransactionId();
TransactionId transactionId = TransactionIdUtils.parseTransactionId(transactionIdBytes);
String agentId = transactionId.getAgentId();
if (agentId == null) {
agentId = span.getAgentId();
}

final Buffer buffer= new AutomaticBuffer(32);
buffer.putPrefixedString(agentId);
buffer.putSVLong(transactionId.getAgentStartTime());
buffer.putVLong(transactionId.getTransactionSequence());
return buffer.getBuffer();

}
内容如下:

final Buffer buffer = new AutomaticBuffer(10 + AGENT_NAME_MAX_LEN);
buffer.putVInt(span.getElapsed());
buffer.putSVInt(span.getErr());
buffer.putPrefixedString(span.getAgentId());
final byte[] value = buffer.getBuffer();

ApplicationMapStatisticsCaller_Ver2
用途
主键
​ “APPLICATIONNAME(max 24bytes)” + apptype(2byte) + “TIMESTAMP(8byte)” 代码如下:

public static byte[] makeRowKey(String applicationName, short applicationType, long timestamp) {
if (applicationName == null) {
throw new NullPointerException(“applicationName must not be null”);
}
final byte[] applicationNameBytes= BytesUtils.toBytes(applicationName);

final Buffer buffer = new AutomaticBuffer(2 + applicationNameBytes.length + 2 + 8);

buffer.putShort((short)applicationNameBytes.length);
buffer.putBytes(applicationNameBytes);
buffer.putShort(applicationType);
long reverseTimeMillis = TimeUtils.reverseTimeMillis(timestamp);
buffer.putLong(reverseTimeMillis);
return buffer.getBuffer();

}
列簇
​ public static final byte[] MAP_STATISTICS_CALLER_VER2_CF_COUNTER = Bytes.toBytes(“C”);


列名如下

public static byte[] makeColumnName(short serviceType, String applicationName, String destHost, short slotNumber) {
if (applicationName == null) {
throw new NullPointerException(“applicationName must not be null”);
}
if (destHost == null) {
// throw new NullPointerException(“destHost must not be null”);
destHost = “”;
}
// approximate size of destHost
final Buffer buffer = new AutomaticBuffer(BytesUtils.SHORT_BYTE_LENGTH + PinpointConstants.APPLICATION_NAME_MAX_LEN + destHost.length() + BytesUtils.SHORT_BYTE_LENGTH);
buffer.putShort(serviceType);
buffer.putShort(slotNumber);
buffer.put2PrefixedString(applicationName);
buffer.putBytes(BytesUtils.toBytes(destHost));
return buffer.getBuffer();
}
主要是统计,内容是数字信息。

ApplicationMapStatisticsCallee_Ver2
用途
主键
​ “APPLICATIONNAME(max 24bytes)” + apptype(2byte) + “TIMESTAMP(8byte)” 代码如下:

public static byte[] makeRowKey(String applicationName, short applicationType, long timestamp) {
if (applicationName == null) {
throw new NullPointerException(“applicationName must not be null”);
}
final byte[] applicationNameBytes= BytesUtils.toBytes(applicationName);

final Buffer buffer = new AutomaticBuffer(2 + applicationNameBytes.length + 2 + 8);

buffer.putShort((short)applicationNameBytes.length);
buffer.putBytes(applicationNameBytes);
buffer.putShort(applicationType);
long reverseTimeMillis = TimeUtils.reverseTimeMillis(timestamp);
buffer.putLong(reverseTimeMillis);
return buffer.getBuffer();

}
列簇
​ public static final byte[] MAP_STATISTICS_CALLER_VER2_CF_COUNTER = Bytes.toBytes(“C”);


列名如下

public static byte[] makeColumnName(short serviceType, String applicationName, String destHost, short slotNumber) {
if (applicationName == null) {
throw new NullPointerException(“applicationName must not be null”);
}
if (destHost == null) {
// throw new NullPointerException(“destHost must not be null”);
destHost = “”;
}
// approximate size of destHost
final Buffer buffer = new AutomaticBuffer(BytesUtils.SHORT_BYTE_LENGTH + PinpointConstants.APPLICATION_NAME_MAX_LEN + destHost.length() + BytesUtils.SHORT_BYTE_LENGTH);
buffer.putShort(serviceType);
buffer.putShort(slotNumber);
buffer.put2PrefixedString(applicationName);
buffer.putBytes(BytesUtils.toBytes(destHost));
return buffer.getBuffer();
}
主要是统计,内容是数字信息。

HostApplicationMap_Ver2
用途
主键
​ parentApplicationName+parentServiceType+statisticsRowSlot+parentAgentId 构建方式:

byte[] createRowKey0(String parentApplicationName, short parentServiceType, long statisticsRowSlot, String parentAgentId) {
final int SIZE = HBaseTables.APPLICATION_NAME_MAX_LEN + 2 + 8;
final Buffer rowKeyBuffer = new AutomaticBuffer(SIZE);
rowKeyBuffer.putPadString(parentApplicationName, HBaseTables.APPLICATION_NAME_MAX_LEN);
rowKeyBuffer.putShort(parentServiceType);
rowKeyBuffer.putLong(TimeUtils.reverseTimeMillis(statisticsRowSlot));
return rowKeyBuffer.getBuffer();
}
列簇
​ public static final byte[] HOST_APPLICATION_MAP_VER2_CF_MAP = Bytes.toBytes(“M”);

#列 列名

private byte[] createColumnName(String host, String bindApplicationName, short bindServiceType) {
Buffer buffer = new AutomaticBuffer();
buffer.putPrefixedString(host);
buffer.putPrefixedString(bindApplicationName);
buffer.putShort(bindServiceType);
return buffer.getBuffer();
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值