func main() { foo_rpc_latency := metrics.CreateHistogram(&metrics.HistogramSpecification{ Starts: metrics.EquallySizedBucketsFor(0, 200, 4), BucketMaker: metrics.AccumulatingBucketBuilder(metrics.EvictAndReplaceWith(10, maths.Average), 50), ReportablePercentiles: []float64{0.01, 0.05, 0.5, 0.90, 0.99}, }) foo_rpc_calls := &metrics.GaugeMetric{} bar_rpc_latency := metrics.CreateHistogram(&metrics.HistogramSpecification{ Starts: metrics.EquallySizedBucketsFor(0, 200, 4), BucketMaker: metrics.AccumulatingBucketBuilder(metrics.EvictAndReplaceWith(10, maths.Average), 50), ReportablePercentiles: []float64{0.01, 0.05, 0.5, 0.90, 0.99}, }) bar_rpc_calls := &metrics.GaugeMetric{} zed_rpc_latency := metrics.CreateHistogram(&metrics.HistogramSpecification{ Starts: metrics.EquallySizedBucketsFor(0, 200, 4), BucketMaker: metrics.AccumulatingBucketBuilder(metrics.EvictAndReplaceWith(10, maths.Average), 50), ReportablePercentiles: []float64{0.01, 0.05, 0.5, 0.90, 0.99}, }) zed_rpc_calls := &metrics.GaugeMetric{} metrics := registry.NewRegistry() metrics.Register("rpc_latency_foo_microseconds", foo_rpc_latency) metrics.Register("rpc_calls_foo_total", foo_rpc_calls) metrics.Register("rpc_latency_bar_microseconds", bar_rpc_latency) metrics.Register("rpc_calls_bar_total", bar_rpc_calls) metrics.Register("rpc_latency_zed_microseconds", zed_rpc_latency) metrics.Register("rpc_calls_zed_total", zed_rpc_calls) go func() { for { foo_rpc_latency.Add(rand.Float64() * 200) foo_rpc_calls.Increment() bar_rpc_latency.Add((rand.NormFloat64() * 10.0) + 100.0) bar_rpc_calls.Increment() zed_rpc_latency.Add(rand.ExpFloat64()) zed_rpc_calls.Increment() time.Sleep(100 * time.Millisecond) } }() exporter := metrics.YieldExporter() http.Handle("/metrics.json", exporter) http.ListenAndServe(":8080", nil) }
getLabelNameFingerprints = "get_label_name_fingerprints" getMetricForFingerprint = "get_metric_for_fingerprint" getRangeValues = "get_range_values" getValueAtTime = "get_value_at_time" hasIndexMetric = "has_index_metric" hasLabelName = "has_label_name" hasLabelPair = "has_label_pair" indexMetric = "index_metric" setLabelNameFingerprints = "set_label_name_fingerprints" setLabelPairFingerprints = "set_label_pair_fingerprints" ) var ( diskLatencyHistogram = &metrics.HistogramSpecification{ Starts: metrics.LogarithmicSizedBucketsFor(0, 5000), BucketBuilder: metrics.AccumulatingBucketBuilder(metrics.EvictAndReplaceWith(10, maths.Average), 100), ReportablePercentiles: []float64{0.01, 0.05, 0.5, 0.90, 0.99}, } storageOperations = metrics.NewCounter() storageLatency = metrics.NewHistogram(diskLatencyHistogram) ) func recordOutcome(counter metrics.Counter, latency metrics.Histogram, duration time.Duration, err error, success, failure map[string]string) { labels := success if err != nil { labels = failure } counter.Increment(labels) latency.Add(labels, float64(duration/time.Microsecond))