|
@@ -34,11 +34,23 @@ public class StoreCollector extends Collector implements InstanceRegistry {
|
|
|
private static final String STORE = "canal_instance_store";
|
|
|
private static final String PRODUCE_MEM = "canal_instance_store_produce_mem";
|
|
|
private static final String CONSUME_MEM = "canal_instance_store_consume_mem";
|
|
|
+ private static final String PUT_DELAY = "canal_instance_put_delay";
|
|
|
+ private static final String GET_DELAY = "canal_instance_get_delay";
|
|
|
+ private static final String ACK_DELAY = "canal_instance_ack_delay";
|
|
|
+ private static final String PUT_ROWS = "canal_instance_put_rows";
|
|
|
+ private static final String GET_ROWS = "canal_instance_get_rows";
|
|
|
+ private static final String ACK_ROWS = "canal_instance_ack_rows";
|
|
|
private static final String PRODUCE_HELP = "Produced events counter of canal instance";
|
|
|
private static final String CONSUME_HELP = "Consumed events counter of canal instance";
|
|
|
private static final String STORE_HELP = "Canal instance info";
|
|
|
private static final String PRODUCE_MEM_HELP = "Produced mem bytes of canal instance";
|
|
|
private static final String CONSUME_MEM_HELP = "Consumed mem bytes of canal instance";
|
|
|
+ private static final String PUT_DELAY_HELP = "Traffic delay of canal instance put";
|
|
|
+ private static final String GET_DELAY_HELP = "Traffic delay of canal instance get";
|
|
|
+ private static final String ACK_DELAY_HELP = "Traffic delay of canal instance ack";
|
|
|
+ private static final String PUT_ROWS_HELP = "Put table rows of canal instance";
|
|
|
+ private static final String GET_ROWS_HELP = "Got table rows of canal instance";
|
|
|
+ private static final String ACK_ROWS_HELP = "Acked table rows of canal instance";
|
|
|
private final ConcurrentMap<String, StoreMetricsHolder> instances = new ConcurrentHashMap<String, StoreMetricsHolder>();
|
|
|
private final List<String> storeLabelsList = Arrays.asList(DEST, "batchMode", "size");
|
|
|
|
|
@@ -65,11 +77,40 @@ public class StoreCollector extends Collector implements InstanceRegistry {
|
|
|
PRODUCE_MEM_HELP, DEST_LABELS_LIST);
|
|
|
CounterMetricFamily ackMem = new CounterMetricFamily(CONSUME_MEM,
|
|
|
CONSUME_MEM_HELP, DEST_LABELS_LIST);
|
|
|
+ GaugeMetricFamily putDelay = new GaugeMetricFamily(PUT_DELAY,
|
|
|
+ PUT_DELAY_HELP, DEST_LABELS_LIST);
|
|
|
+ GaugeMetricFamily getDelay = new GaugeMetricFamily(GET_DELAY,
|
|
|
+ GET_DELAY_HELP, DEST_LABELS_LIST);
|
|
|
+ GaugeMetricFamily ackDelay = new GaugeMetricFamily(ACK_DELAY,
|
|
|
+ ACK_DELAY_HELP, DEST_LABELS_LIST);
|
|
|
+ CounterMetricFamily putRows = new CounterMetricFamily(PUT_ROWS,
|
|
|
+ PUT_ROWS_HELP, DEST_LABELS_LIST);
|
|
|
+ CounterMetricFamily getRows = new CounterMetricFamily(GET_ROWS,
|
|
|
+ GET_ROWS_HELP, DEST_LABELS_LIST);
|
|
|
+ CounterMetricFamily ackRows = new CounterMetricFamily(ACK_ROWS,
|
|
|
+ ACK_ROWS_HELP, DEST_LABELS_LIST);
|
|
|
boolean hasMem = false;
|
|
|
for (StoreMetricsHolder smh : instances.values()) {
|
|
|
final boolean isMem = smh.batchMode.isMemSize();
|
|
|
put.addMetric(smh.destLabelValues, smh.putSeq.doubleValue());
|
|
|
ack.addMetric(smh.destLabelValues, smh.ackSeq.doubleValue());
|
|
|
+ long pet = smh.putExecTime.get();
|
|
|
+ // 防止出现启动时,未消费造成的get, ack延时小于前阶段的情况
|
|
|
+ long get = Math.min(smh.getExecTime.get(), pet);
|
|
|
+ long aet = Math.min(smh.ackExecTime.get(), get);
|
|
|
+ long now = System.currentTimeMillis();
|
|
|
+ if (now >= pet) {
|
|
|
+ putDelay.addMetric(smh.destLabelValues, (now - pet));
|
|
|
+ }
|
|
|
+ if (now >= get) {
|
|
|
+ getDelay.addMetric(smh.destLabelValues, (now - get));
|
|
|
+ }
|
|
|
+ if (now >= aet) {
|
|
|
+ ackDelay.addMetric(smh.destLabelValues, (now - aet));
|
|
|
+ }
|
|
|
+ putRows.addMetric(smh.destLabelValues, smh.putTableRows.doubleValue());
|
|
|
+ getRows.addMetric(smh.destLabelValues, smh.getTableRows.doubleValue());
|
|
|
+ ackRows.addMetric(smh.destLabelValues, smh.ackTableRows.doubleValue());
|
|
|
store.addMetric(smh.storeLabelValues, 1);
|
|
|
if (isMem) {
|
|
|
hasMem = true;
|
|
@@ -80,6 +121,12 @@ public class StoreCollector extends Collector implements InstanceRegistry {
|
|
|
mfs.add(put);
|
|
|
mfs.add(ack);
|
|
|
mfs.add(store);
|
|
|
+ mfs.add(putDelay);
|
|
|
+ mfs.add(getDelay);
|
|
|
+ mfs.add(ackDelay);
|
|
|
+ mfs.add(putRows);
|
|
|
+ mfs.add(getRows);
|
|
|
+ mfs.add(ackRows);
|
|
|
if (hasMem) {
|
|
|
mfs.add(putMem);
|
|
|
mfs.add(ackMem);
|
|
@@ -102,6 +149,12 @@ public class StoreCollector extends Collector implements InstanceRegistry {
|
|
|
holder.destLabelValues = Collections.singletonList(destination);
|
|
|
holder.size = memStore.getBufferSize();
|
|
|
holder.storeLabelValues = Arrays.asList(destination, holder.batchMode.name(), Integer.toString(holder.size));
|
|
|
+ holder.putExecTime = memStore.getPutExecTime();
|
|
|
+ holder.getExecTime = memStore.getGetExecTime();
|
|
|
+ holder.ackExecTime = memStore.getAckExecTime();
|
|
|
+ holder.putTableRows = memStore.getPutTableRows();
|
|
|
+ holder.getTableRows = memStore.getGetTableRows();
|
|
|
+ holder.ackTableRows = memStore.getAckTableRows();
|
|
|
Preconditions.checkNotNull(holder.batchMode);
|
|
|
Preconditions.checkNotNull(holder.putSeq);
|
|
|
Preconditions.checkNotNull(holder.ackSeq);
|
|
@@ -129,6 +182,12 @@ public class StoreCollector extends Collector implements InstanceRegistry {
|
|
|
private BatchMode batchMode;
|
|
|
private AtomicLong putMemSize;
|
|
|
private AtomicLong ackMemSize;
|
|
|
+ private AtomicLong putExecTime;
|
|
|
+ private AtomicLong getExecTime;
|
|
|
+ private AtomicLong ackExecTime;
|
|
|
+ private AtomicLong putTableRows;
|
|
|
+ private AtomicLong getTableRows;
|
|
|
+ private AtomicLong ackTableRows;
|
|
|
private int size;
|
|
|
private List<String> destLabelValues;
|
|
|
private List<String> storeLabelValues;
|