Updates circonus-labs/circonus-gometrics and circonus-labs/circonusllhist.
This commit is contained in:
parent
e522f5a642
commit
0ed936e5e6
|
@ -1,2 +0,0 @@
|
||||||
.DS_Store
|
|
||||||
env.sh
|
|
|
@ -1,69 +0,0 @@
|
||||||
# Setting up dev/test environment
|
|
||||||
|
|
||||||
Get go installed and environment configured
|
|
||||||
|
|
||||||
```sh
|
|
||||||
|
|
||||||
cd $GOPATH
|
|
||||||
mkdir -pv src/github.com/{hashicorp,armon,circonus-labs}
|
|
||||||
|
|
||||||
cd $GOPATH/src/github.com/hashicorp
|
|
||||||
git clone https://github.com/maier/consul.git
|
|
||||||
|
|
||||||
cd $GOPATH/src/github.com/armon
|
|
||||||
git clone https://github.com/maier/go-metrics.git
|
|
||||||
|
|
||||||
cd $GOPATH/src/github.com/circonus-labs
|
|
||||||
git clone https://github.com/maier/circonus-gometrics.git
|
|
||||||
|
|
||||||
|
|
||||||
cd $GOPATH/src/github.com/hashicorp/consul
|
|
||||||
make dev
|
|
||||||
```
|
|
||||||
|
|
||||||
In `$GOPATH/src/github.com/hashicorp/consul/bin` is the binary just created.
|
|
||||||
|
|
||||||
Create a consul configuration file somewhere (e.g. ~/testconfig.json) and add any applicable configuration settings. As an example:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"datacenter": "mcfl",
|
|
||||||
"server": true,
|
|
||||||
"log_level": "debug",
|
|
||||||
"telemetry": {
|
|
||||||
"statsd_address": "127.0.0.1:8125",
|
|
||||||
"circonus_api_token": "...",
|
|
||||||
"circonus_api_host": "..."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
StatsD was used as a check to see what metrics consul was sending and what metrics circonus was receiving. So, it can safely be elided.
|
|
||||||
|
|
||||||
Fill in appropriate cirocnus specific settings:
|
|
||||||
|
|
||||||
* circonus_api_token - required
|
|
||||||
* circonus_api_app - optional, default is circonus-gometrics
|
|
||||||
* circonus_api_host - optional, default is api.circonus.com (for dev stuff yon can use "http://..." to circumvent ssl)
|
|
||||||
* circonus_submission_url - optional
|
|
||||||
* circonus_submission_interval - optional, seconds, defaults to 10 seconds
|
|
||||||
* circonus_check_id - optional
|
|
||||||
* circonus_broker_id - optional (unless you want to use the public one, then add it)
|
|
||||||
|
|
||||||
The actual circonus-gometrics package has more configuraiton options, the above are exposed in the consul configuration.
|
|
||||||
|
|
||||||
CirconusMetrics.InstanceId is derived from consul's config.NodeName and config.Datacenter
|
|
||||||
CirconusMetrics.SearchTag is hardcoded as 'service:consul'
|
|
||||||
|
|
||||||
The defaults are taken for other options.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
To run after creating the config:
|
|
||||||
|
|
||||||
`$GOPATH/src/github.com/hashicorp/consul/bin/consul agent -dev -config-file <config file>`
|
|
||||||
|
|
||||||
or, to add the ui (localhost:8500)
|
|
||||||
|
|
||||||
`$GOPATH/src/github.com/hashicorp/consul/bin/consul agent -dev -ui -config-file <config file>`
|
|
||||||
|
|
|
@ -142,8 +142,6 @@ func main() {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# untested
|
|
||||||
|
|
||||||
### HTTP Handler wrapping
|
### HTTP Handler wrapping
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -156,14 +154,20 @@ http.HandleFunc("/", metrics.TrackHTTPLatency("/", handler_func))
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
metrics "github.com/circonus-labs/circonus-gometrics"
|
cgm "github.com/circonus-labs/circonus-gometrics"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
metrics.WithAuthToken("9fdd5432-5308-4691-acd1-6bf1f7a20f73")
|
cmc := &cgm.Config{}
|
||||||
metrics.WithCheckId(115010)
|
cmc.CheckManager.API.TokenKey = os.Getenv("CIRCONUS_API_TOKEN")
|
||||||
|
|
||||||
|
metrics, err := cgm.NewCirconusMetrics(cmc)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
metrics.Start()
|
metrics.Start()
|
||||||
|
|
||||||
http.HandleFunc("/", metrics.TrackHTTPLatency("/", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/", metrics.TrackHTTPLatency("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
|
@ -68,7 +68,7 @@ type CirconusMetrics struct {
|
||||||
counterFuncs map[string]func() uint64
|
counterFuncs map[string]func() uint64
|
||||||
cfm sync.Mutex
|
cfm sync.Mutex
|
||||||
|
|
||||||
gauges map[string]int64
|
gauges map[string]string
|
||||||
gm sync.Mutex
|
gm sync.Mutex
|
||||||
|
|
||||||
gaugeFuncs map[string]func() int64
|
gaugeFuncs map[string]func() int64
|
||||||
|
@ -94,7 +94,7 @@ func NewCirconusMetrics(cfg *Config) (*CirconusMetrics, error) {
|
||||||
cm := &CirconusMetrics{
|
cm := &CirconusMetrics{
|
||||||
counters: make(map[string]uint64),
|
counters: make(map[string]uint64),
|
||||||
counterFuncs: make(map[string]func() uint64),
|
counterFuncs: make(map[string]func() uint64),
|
||||||
gauges: make(map[string]int64),
|
gauges: make(map[string]string),
|
||||||
gaugeFuncs: make(map[string]func() int64),
|
gaugeFuncs: make(map[string]func() int64),
|
||||||
histograms: make(map[string]*Histogram),
|
histograms: make(map[string]*Histogram),
|
||||||
text: make(map[string]string),
|
text: make(map[string]string),
|
||||||
|
|
|
@ -15,6 +15,13 @@ func (m *CirconusMetrics) IncrementByValue(metric string, val uint64) {
|
||||||
m.Add(metric, val)
|
m.Add(metric, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set a counter to specific value
|
||||||
|
func (m *CirconusMetrics) Set(metric string, val uint64) {
|
||||||
|
m.cm.Lock()
|
||||||
|
defer m.cm.Unlock()
|
||||||
|
m.counters[metric] = val
|
||||||
|
}
|
||||||
|
|
||||||
// Add updates counter by supplied value
|
// Add updates counter by supplied value
|
||||||
func (m *CirconusMetrics) Add(metric string, val uint64) {
|
func (m *CirconusMetrics) Add(metric string, val uint64) {
|
||||||
m.cm.Lock()
|
m.cm.Lock()
|
||||||
|
|
|
@ -5,16 +5,20 @@ package circonusgometrics
|
||||||
// Use a gauge to track metrics which increase and decrease (e.g., amount of
|
// Use a gauge to track metrics which increase and decrease (e.g., amount of
|
||||||
// free memory).
|
// free memory).
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
// Gauge sets a gauge to a value
|
// Gauge sets a gauge to a value
|
||||||
func (m *CirconusMetrics) Gauge(metric string, val int64) {
|
func (m *CirconusMetrics) Gauge(metric string, val interface{}) {
|
||||||
m.SetGauge(metric, val)
|
m.SetGauge(metric, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetGauge sets a gauge to a value
|
// SetGauge sets a gauge to a value
|
||||||
func (m *CirconusMetrics) SetGauge(metric string, val int64) {
|
func (m *CirconusMetrics) SetGauge(metric string, val interface{}) {
|
||||||
m.gm.Lock()
|
m.gm.Lock()
|
||||||
defer m.gm.Unlock()
|
defer m.gm.Unlock()
|
||||||
m.gauges[metric] = val
|
m.gauges[metric] = m.gaugeValString(val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveGauge removes a gauge
|
// RemoveGauge removes a gauge
|
||||||
|
@ -37,3 +41,37 @@ func (m *CirconusMetrics) RemoveGaugeFunc(metric string) {
|
||||||
defer m.gfm.Unlock()
|
defer m.gfm.Unlock()
|
||||||
delete(m.gaugeFuncs, metric)
|
delete(m.gaugeFuncs, metric)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gaugeValString converts an interface value (of a supported type) to a string
|
||||||
|
func (m *CirconusMetrics) gaugeValString(val interface{}) string {
|
||||||
|
vs := ""
|
||||||
|
switch v := val.(type) {
|
||||||
|
default:
|
||||||
|
// ignore it, unsupported type
|
||||||
|
case int:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case int8:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case int16:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case int32:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case int64:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case uint:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case uint8:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case uint16:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case uint32:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case uint64:
|
||||||
|
vs = fmt.Sprintf("%d", v)
|
||||||
|
case float32:
|
||||||
|
vs = fmt.Sprintf("%f", v)
|
||||||
|
case float64:
|
||||||
|
vs = fmt.Sprintf("%f", v)
|
||||||
|
}
|
||||||
|
return vs
|
||||||
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ func (m *CirconusMetrics) Reset() {
|
||||||
|
|
||||||
m.counters = make(map[string]uint64)
|
m.counters = make(map[string]uint64)
|
||||||
m.counterFuncs = make(map[string]func() uint64)
|
m.counterFuncs = make(map[string]func() uint64)
|
||||||
m.gauges = make(map[string]int64)
|
m.gauges = make(map[string]string)
|
||||||
m.gaugeFuncs = make(map[string]func() int64)
|
m.gaugeFuncs = make(map[string]func() int64)
|
||||||
m.histograms = make(map[string]*Histogram)
|
m.histograms = make(map[string]*Histogram)
|
||||||
m.text = make(map[string]string)
|
m.text = make(map[string]string)
|
||||||
|
@ -37,7 +37,7 @@ func (m *CirconusMetrics) Reset() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// snapshot returns a copy of the values of all registered counters and gauges.
|
// snapshot returns a copy of the values of all registered counters and gauges.
|
||||||
func (m *CirconusMetrics) snapshot() (c map[string]uint64, g map[string]int64, h map[string]*circonusllhist.Histogram, t map[string]string) {
|
func (m *CirconusMetrics) snapshot() (c map[string]uint64, g map[string]string, h map[string]*circonusllhist.Histogram, t map[string]string) {
|
||||||
m.cm.Lock()
|
m.cm.Lock()
|
||||||
defer m.cm.Unlock()
|
defer m.cm.Unlock()
|
||||||
|
|
||||||
|
@ -68,13 +68,14 @@ func (m *CirconusMetrics) snapshot() (c map[string]uint64, g map[string]int64, h
|
||||||
c[n] = f()
|
c[n] = f()
|
||||||
}
|
}
|
||||||
|
|
||||||
g = make(map[string]int64, len(m.gauges)+len(m.gaugeFuncs))
|
//g = make(map[string]int64, len(m.gauges)+len(m.gaugeFuncs))
|
||||||
|
g = make(map[string]string, len(m.gauges)+len(m.gaugeFuncs))
|
||||||
for n, v := range m.gauges {
|
for n, v := range m.gauges {
|
||||||
g[n] = v
|
g[n] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
for n, f := range m.gaugeFuncs {
|
for n, f := range m.gaugeFuncs {
|
||||||
g[n] = f()
|
g[n] = m.gaugeValString(f())
|
||||||
}
|
}
|
||||||
|
|
||||||
h = make(map[string]*circonusllhist.Histogram, len(m.histograms))
|
h = make(map[string]*circonusllhist.Histogram, len(m.histograms))
|
||||||
|
|
|
@ -60,20 +60,28 @@
|
||||||
"versionExact": "v1.2.1"
|
"versionExact": "v1.2.1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"checksumSHA1": "b5zgHT9TxBAVh/KP9kQi7QVoz9w=",
|
||||||
"path": "github.com/circonus-labs/circonus-gometrics",
|
"path": "github.com/circonus-labs/circonus-gometrics",
|
||||||
"revision": "8e7296e1945cf2ac4adc0a08df3eb52419b227c3"
|
"revision": "a7c30e0dcc6e2341053132470dcedc12bc7705ef",
|
||||||
|
"revisionTime": "2016-07-22T17:27:10Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"checksumSHA1": "IFiYTxu8jshL4A8BCttUaDhp1m4=",
|
||||||
"path": "github.com/circonus-labs/circonus-gometrics/api",
|
"path": "github.com/circonus-labs/circonus-gometrics/api",
|
||||||
"revision": "8e7296e1945cf2ac4adc0a08df3eb52419b227c3"
|
"revision": "a7c30e0dcc6e2341053132470dcedc12bc7705ef",
|
||||||
|
"revisionTime": "2016-07-22T17:27:10Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"checksumSHA1": "+9vcRzlTdvEjH/Uf8fKC5MXdjNw=",
|
||||||
"path": "github.com/circonus-labs/circonus-gometrics/checkmgr",
|
"path": "github.com/circonus-labs/circonus-gometrics/checkmgr",
|
||||||
"revision": "8e7296e1945cf2ac4adc0a08df3eb52419b227c3"
|
"revision": "a7c30e0dcc6e2341053132470dcedc12bc7705ef",
|
||||||
|
"revisionTime": "2016-07-22T17:27:10Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"checksumSHA1": "C4Z7+l5GOpOCW5DcvNYzheGvQRE=",
|
||||||
"path": "github.com/circonus-labs/circonusllhist",
|
"path": "github.com/circonus-labs/circonusllhist",
|
||||||
"revision": "d724266ae5270ae8b87a5d2e8081f04e307c3c18"
|
"revision": "d724266ae5270ae8b87a5d2e8081f04e307c3c18",
|
||||||
|
"revisionTime": "2016-05-26T04:38:13Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "github.com/elazarl/go-bindata-assetfs",
|
"path": "github.com/elazarl/go-bindata-assetfs",
|
||||||
|
|
Loading…
Reference in New Issue