@Override
    public synchronized void start() {
        Contracts.checkNotNull(prefix, "prefix");
        if (monitoring) {
            LOG.warn(prefix + " metrics system already started!", new MetricsException("Illegal start"));
            return;
        }
        for (Callback cb : callbacks)
            cb.preStart();
        configure(prefix);
        startTimer();
        monitoring = true;
        LOG.info(prefix + " metrics system started");
        for (Callback cb : callbacks)
            cb.postStart();
    }