private synchronized void startTimer() {
        if (timer != null) {
            LOG.warn(prefix + " metrics system timer already started!");
            return;
        }
        logicalTime = 0;
        long millis = period * 1000;
        timer = new Timer("Timer for '" + prefix + "' metrics system", true);
        timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                try {
                    onTimerEvent();
                } catch (Exception e) {
                    LOG.warn(e);
                }
            }
        }, millis, millis);
        LOG.info("Scheduled snapshot period at " + period + " second(s).");
    }