Метрика zk_max|avg|min_latency
рассчитывается, начиная с запуска ZK-сервера.
Команда mntr
обрабатывается MonitorCommand , который запрашивает метрики запроса max / avg / min из ZooKeeperServer.serverStats.requestLatency
ZKDatabase zkdb = zkServer.getZKDatabase();
ServerStats stats = zkServer.serverStats();
print("version", Version.getFullVersion());
print("avg_latency", stats.getAvgLatency());
print("max_latency", stats.getMaxLatency());
print("min_latency", stats.getMinLatency());
ServerStats.java
// getters
public long getMinLatency() {
return requestLatency.getMin();
}
public double getAvgLatency() {
return requestLatency.getAvg();
}
public long getMaxLatency() {
return requestLatency.getMax();
}
И задержка запроса обновляется на ServerStats.updateLatency () . Класс реализации ядра - AvgMinMaxCounter .
public void updateLatency(Request request, long currentTime) {
long latency = currentTime - request.createTime;
if (latency < 0) {
return;
}
requestLatency.addDataPoint(latency);
if (request.getHdr() != null) {
// Only quorum request should have header
ServerMetrics.UPDATE_LATENCY.add(latency);
} else {
// All read request should goes here
ServerMetrics.READ_LATENCY.add(latency);
}
}