observe(value, labels, timestamp) {
		const hash = this.hashingLabels(labels);
		let item = this.values.get(hash);
		if (!item) {
			item = this.resetItem({
				labels: _.pick(labels, this.labelNames)
			});

			if (this.rate) item.rate = new MetricRate(this, item, 1);

			this.values.set(hash, item);
		}

		item.timestamp = timestamp == null ? Date.now() : timestamp;
		item.sum += value;
		item.count++;
		item.lastValue = value;

		if (item.bucketValues) {
			const len = this.buckets.length;
			for (let i = 0; i < len; i++) {
				if (value <= this.buckets[i]) {
					item.bucketValues[this.buckets[i]] += 1;
				}
			}
		}

		if (item.quantileValues) {
			item.quantileValues.add(value);
		}

		if (item.rate) item.rate.update(item.count);

		this.changed(value, labels, timestamp);

		return item;
	}
Observe a value.

@param {Number} value
@param {Object?} labels
@param {Number?} timestamp
@returns
@memberof HistogramMetric