private void putUpWebUI() throws IOException {
    int port = conf.getInt(HBASE_CANARY_INFO_PORT, -1);
    // -1 is for disabling info server
    if (port < 0) {
      return;
    }
    if (zookeeperMode) {
      LOG.info("WebUI is not supported in Zookeeper mode");
    } else if (regionServerMode) {
      LOG.info("WebUI is not supported in RegionServer mode");
    } else {
      String addr = conf.get(HBASE_CANARY_INFO_BINDADDRESS, "0.0.0.0");
      try {
        InfoServer infoServer = new InfoServer("canary", addr, port, false, conf);
        infoServer.addUnprivilegedServlet("canary", "/canary-status", CanaryStatusServlet.class);
        infoServer.setAttribute("sink", getSink(conf, RegionStdOutSink.class));
        infoServer.start();
        LOG.info("Bind Canary http info server to {}:{} ", addr, port);
      } catch (BindException e) {
        LOG.warn("Failed binding Canary http info server to {}:{}", addr, port, e);
      }
    }
  }
HBase Canary Tool for "canary monitoring" of a running HBase cluster. There are three modes:
<ol>
<li>region mode (Default): For each region, try to get one row per column family outputting
information on failure (ERROR) or else the latency.</li>
<li>regionserver mode: For each regionserver try to get one row from one table selected randomly
outputting information on failure (ERROR) or else the latency.</li>
<li>zookeeper mode: for each zookeeper instance, selects a znode outputting information on
failure (ERROR) or else the latency.</li>
</ol>
hbase-server/src/main/java/org/apache/hadoop/hbase/tool/CanaryTool.java