func ExampleHistogram() { temps := prometheus.NewHistogram(prometheus.HistogramOpts{ Name: "pond_temperature_celsius", Help: "The temperature of the frog pond.", // Sorry, we can't measure how badly it smells. Buckets: prometheus.LinearBuckets(20, 5, 5), // 5 buckets, each 5 centigrade wide. }) // Simulate some observations. for i := 0; i < 1000; i++ { temps.Observe(30 + math.Floor(120*math.Sin(float64(i)*0.1))/10) } // Just for demonstration, let's check the state of the histogram by // (ab)using its Write method (which is usually only used by Prometheus // internally). metric := &dto.Metric{} temps.Write(metric) fmt.Println(proto.MarshalTextString(metric)) // Output: // histogram: < // sample_count: 1000 // sample_sum: 29969.50000000001 // bucket: < // cumulative_count: 192 // upper_bound: 20 // > // bucket: < // cumulative_count: 366 // upper_bound: 25 // > // bucket: < // cumulative_count: 501 // upper_bound: 30 // > // bucket: < // cumulative_count: 638 // upper_bound: 35 // > // bucket: < // cumulative_count: 816 // upper_bound: 40 // > // > }
// class to handle prometheus metric recording package main import ( "fmt" prom "github.com/heems/bssim/Godeps/_workspace/src/github.com/prometheus/client_golang/prometheus" "time" ) var ( fields = []string{"latency", "bandwidth", "block_size"} // NewSummaryVec(opts, ["filename", "pid", "latency", "bandwidth"] fileTimes = prom.NewHistogramVec(prom.HistogramOpts{ Name: "file_times_ms", Help: "Time for peer to get a file.", Buckets: prom.LinearBuckets(1, .25, 12), }, fields) blockTimes = prom.NewHistogramVec(prom.HistogramOpts{ Name: "block_times_ms", Help: "Time for peer to get a block.", Buckets: prom.ExponentialBuckets(0.005, 10, 10), //Buckets: prom.LinearBuckets(0, .05, 100), }, fields) dupBlocks = prom.NewGaugeVec(prom.GaugeOpts{ Name: "dup_blocks_count", Help: "Count of total duplicate blocks received.", }, fields) )