mirror of https://github.com/status-im/consul.git
Merge pull request #1293 from talwai/master
Add options to send telemetry to DogStatsD
This commit is contained in:
commit
8defe75387
|
@ -15,6 +15,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/armon/go-metrics"
|
"github.com/armon/go-metrics"
|
||||||
|
"github.com/armon/go-metrics/datadog"
|
||||||
"github.com/hashicorp/consul/watch"
|
"github.com/hashicorp/consul/watch"
|
||||||
"github.com/hashicorp/go-checkpoint"
|
"github.com/hashicorp/go-checkpoint"
|
||||||
"github.com/hashicorp/go-syslog"
|
"github.com/hashicorp/go-syslog"
|
||||||
|
@ -604,6 +605,23 @@ func (c *Command) Run(args []string) int {
|
||||||
fanout = append(fanout, sink)
|
fanout = append(fanout, sink)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Configure the DogStatsd sink
|
||||||
|
if config.DogStatsdAddr != "" {
|
||||||
|
var tags []string
|
||||||
|
|
||||||
|
if config.DogStatsdTags != nil {
|
||||||
|
tags = config.DogStatsdTags
|
||||||
|
}
|
||||||
|
|
||||||
|
sink, err := datadog.NewDogStatsdSink(config.DogStatsdAddr, metricsConf.HostName)
|
||||||
|
if err != nil {
|
||||||
|
c.Ui.Error(fmt.Sprintf("Failed to start DogStatsd sink. Got: %s", err))
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
sink.SetTags(tags)
|
||||||
|
fanout = append(fanout, sink)
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize the global sink
|
// Initialize the global sink
|
||||||
if len(fanout) > 0 {
|
if len(fanout) > 0 {
|
||||||
fanout = append(fanout, inm)
|
fanout = append(fanout, inm)
|
||||||
|
|
|
@ -184,6 +184,14 @@ type Config struct {
|
||||||
// metrics will be sent to that instance.
|
// metrics will be sent to that instance.
|
||||||
StatsdAddr string `mapstructure:"statsd_addr"`
|
StatsdAddr string `mapstructure:"statsd_addr"`
|
||||||
|
|
||||||
|
// DogStatsdAddr is the address of a dogstatsd instance. If provided,
|
||||||
|
// metrics will be sent to that instance
|
||||||
|
DogStatsdAddr string `mapstructure:"dogstatsd_addr"`
|
||||||
|
|
||||||
|
// DogStatsdTags are the global tags that should be sent with each packet to dogstatsd
|
||||||
|
// It is a list of strings, where each string looks like "my_tag_name:my_tag_value"
|
||||||
|
DogStatsdTags []string `mapstructure:"dogstatsd_tags"`
|
||||||
|
|
||||||
// Protocol is the Consul protocol version to use.
|
// Protocol is the Consul protocol version to use.
|
||||||
Protocol int `mapstructure:"protocol"`
|
Protocol int `mapstructure:"protocol"`
|
||||||
|
|
||||||
|
@ -916,6 +924,12 @@ func MergeConfig(a, b *Config) *Config {
|
||||||
if b.StatsdAddr != "" {
|
if b.StatsdAddr != "" {
|
||||||
result.StatsdAddr = b.StatsdAddr
|
result.StatsdAddr = b.StatsdAddr
|
||||||
}
|
}
|
||||||
|
if b.DogStatsdAddr != "" {
|
||||||
|
result.DogStatsdAddr = b.DogStatsdAddr
|
||||||
|
}
|
||||||
|
if b.DogStatsdTags != nil {
|
||||||
|
result.DogStatsdTags = b.DogStatsdTags
|
||||||
|
}
|
||||||
if b.EnableDebug {
|
if b.EnableDebug {
|
||||||
result.EnableDebug = true
|
result.EnableDebug = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -629,6 +629,28 @@ func TestDecodeConfig(t *testing.T) {
|
||||||
t.Fatalf("bad: %#v", config)
|
t.Fatalf("bad: %#v", config)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dogstatsd
|
||||||
|
input = `{"dogstatsd_addr": "127.0.0.1:7254", "dogstatsd_tags":["tag_1:val_1", "tag_2:val_2"]}`
|
||||||
|
config, err = DecodeConfig(bytes.NewReader([]byte(input)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if config.DogStatsdAddr != "127.0.0.1:7254" {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(config.DogStatsdTags) != 2 {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.DogStatsdTags[0] != "tag_1:val_1" {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.DogStatsdTags[1] != "tag_2:val_2" {
|
||||||
|
t.Fatalf("bad: %#v", config)
|
||||||
|
}
|
||||||
|
|
||||||
// Statsite prefix
|
// Statsite prefix
|
||||||
input = `{"statsite_prefix": "my_prefix"}`
|
input = `{"statsite_prefix": "my_prefix"}`
|
||||||
config, err = DecodeConfig(bytes.NewReader([]byte(input)))
|
config, err = DecodeConfig(bytes.NewReader([]byte(input)))
|
||||||
|
@ -1216,6 +1238,8 @@ func TestMergeConfig(t *testing.T) {
|
||||||
StatsiteAddr: "127.0.0.1:7250",
|
StatsiteAddr: "127.0.0.1:7250",
|
||||||
StatsitePrefix: "stats_prefix",
|
StatsitePrefix: "stats_prefix",
|
||||||
StatsdAddr: "127.0.0.1:7251",
|
StatsdAddr: "127.0.0.1:7251",
|
||||||
|
DogStatsdAddr: "127.0.0.1:7254",
|
||||||
|
DogStatsdTags: []string{"tag_1:val_1", "tag_2:val_2"},
|
||||||
DisableUpdateCheck: true,
|
DisableUpdateCheck: true,
|
||||||
DisableAnonymousSignature: true,
|
DisableAnonymousSignature: true,
|
||||||
HTTPAPIResponseHeaders: map[string]string{
|
HTTPAPIResponseHeaders: map[string]string{
|
||||||
|
|
|
@ -562,6 +562,15 @@ definitions support being updated during a reload.
|
||||||
This can be used to capture runtime information. This sends UDP packets only and can be used with statsd
|
This can be used to capture runtime information. This sends UDP packets only and can be used with statsd
|
||||||
or statsite.
|
or statsite.
|
||||||
|
|
||||||
|
* <a name="dogstatsd_addr"></a><a href="#dogstatsd_addr">`dogstatsd_addr`</a> This provides the
|
||||||
|
address of a DogStatsD instance. DogStatsD is a protocol-compatible flavor of statsd, with the added ability
|
||||||
|
to decorate metrics with tags and event information. If provided, Consul will send various telemetry information
|
||||||
|
to that instance for aggregation. This can be used to capture runtime information.
|
||||||
|
|
||||||
|
* <a name="dogstatsd_tags"></a><a href="#dogstatsd_tags">`dogstatsd_tags`</a> This provides a list of global tags
|
||||||
|
that will be added to all telemetry packets sent to DogStatsD. It is a list of strings, where each string
|
||||||
|
looks like "my_tag_name:my_tag_value".
|
||||||
|
|
||||||
* <a name="statsite_addr"></a><a href="#statsite_addr">`statsite_addr`</a> This provides the address of a
|
* <a name="statsite_addr"></a><a href="#statsite_addr">`statsite_addr`</a> This provides the address of a
|
||||||
statsite instance. If provided, Consul will stream various telemetry information to that instance for
|
statsite instance. If provided, Consul will stream various telemetry information to that instance for
|
||||||
aggregation. This can be used to capture runtime information. This streams via
|
aggregation. This can be used to capture runtime information. This streams via
|
||||||
|
|
Loading…
Reference in New Issue