Now use prometheus_retention_time > 0 to enable prometheus support

This commit is contained in:
Pierre Souchay 2018-04-06 14:21:05 +02:00
parent fd98fb1449
commit 93a01b0949
6 changed files with 19 additions and 11 deletions

View File

@ -89,6 +89,11 @@ func (s *HTTPServer) AgentMetrics(resp http.ResponseWriter, req *http.Request) (
return nil, acl.ErrPermissionDenied return nil, acl.ErrPermissionDenied
} }
if format := req.URL.Query().Get("format"); format == "prometheus" { if format := req.URL.Query().Get("format"); format == "prometheus" {
if s.agent.config.TelemetryPrometheusRetentionTime.Nanoseconds() < 1 {
resp.WriteHeader(http.StatusUnsupportedMediaType)
fmt.Fprint(resp, "Prometheus is not enable since its retention time is not positive")
return nil, nil
}
handlerOptions := promhttp.HandlerOpts{ handlerOptions := promhttp.HandlerOpts{
ErrorLog: s.agent.logger, ErrorLog: s.agent.logger,
ErrorHandling: promhttp.ContinueOnError, ErrorHandling: promhttp.ContinueOnError,

View File

@ -626,7 +626,7 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) {
TelemetryDisableHostname: b.boolVal(c.Telemetry.DisableHostname), TelemetryDisableHostname: b.boolVal(c.Telemetry.DisableHostname),
TelemetryDogstatsdAddr: b.stringVal(c.Telemetry.DogstatsdAddr), TelemetryDogstatsdAddr: b.stringVal(c.Telemetry.DogstatsdAddr),
TelemetryDogstatsdTags: c.Telemetry.DogstatsdTags, TelemetryDogstatsdTags: c.Telemetry.DogstatsdTags,
TelemetryPrometheusDisable: b.boolVal(c.Telemetry.PrometheusDisable), TelemetryPrometheusRetentionTime: b.durationVal("prometheus_retention_time", c.Telemetry.PrometheusRetentionTime),
TelemetryFilterDefault: b.boolVal(c.Telemetry.FilterDefault), TelemetryFilterDefault: b.boolVal(c.Telemetry.FilterDefault),
TelemetryAllowedPrefixes: telemetryAllowedPrefixes, TelemetryAllowedPrefixes: telemetryAllowedPrefixes,
TelemetryBlockedPrefixes: telemetryBlockedPrefixes, TelemetryBlockedPrefixes: telemetryBlockedPrefixes,

View File

@ -394,7 +394,7 @@ type Telemetry struct {
FilterDefault *bool `json:"filter_default,omitempty" hcl:"filter_default" mapstructure:"filter_default"` FilterDefault *bool `json:"filter_default,omitempty" hcl:"filter_default" mapstructure:"filter_default"`
PrefixFilter []string `json:"prefix_filter,omitempty" hcl:"prefix_filter" mapstructure:"prefix_filter"` PrefixFilter []string `json:"prefix_filter,omitempty" hcl:"prefix_filter" mapstructure:"prefix_filter"`
MetricsPrefix *string `json:"metrics_prefix,omitempty" hcl:"metrics_prefix" mapstructure:"metrics_prefix"` MetricsPrefix *string `json:"metrics_prefix,omitempty" hcl:"metrics_prefix" mapstructure:"metrics_prefix"`
PrometheusDisable *bool `json:"prometheus_disable,omitempty" hcl:"prometheus_disable" mapstructure:"prometheus_disable"` PrometheusRetentionTime *string `json:"prometheus_retention_time,omitempty" hcl:"prometheus_retention_time" mapstructure:"prometheus_retention_time"`
StatsdAddr *string `json:"statsd_address,omitempty" hcl:"statsd_address" mapstructure:"statsd_address"` StatsdAddr *string `json:"statsd_address,omitempty" hcl:"statsd_address" mapstructure:"statsd_address"`
StatsiteAddr *string `json:"statsite_address,omitempty" hcl:"statsite_address" mapstructure:"statsite_address"` StatsiteAddr *string `json:"statsite_address,omitempty" hcl:"statsite_address" mapstructure:"statsite_address"`
EnableDeprecatedNames *bool `json:"enable_deprecated_names" hcl:"enable_deprecated_names" mapstructure:"enable_deprecated_names"` EnableDeprecatedNames *bool `json:"enable_deprecated_names" hcl:"enable_deprecated_names" mapstructure:"enable_deprecated_names"`

View File

@ -425,10 +425,10 @@ type RuntimeConfig struct {
// hcl: telemetry { dogstatsd_tags = []string } // hcl: telemetry { dogstatsd_tags = []string }
TelemetryDogstatsdTags []string TelemetryDogstatsdTags []string
// TelemetryPrometheusDisable enables prometheus Support for metrics // PrometheusRetentionTime enables prometheus Support for metrics if greater than 0
// //
// hcl: telemetry { prometheus_disable = (true|false) } // hcl: telemetry { prometheus_retention_time = "duration" }
TelemetryPrometheusDisable bool TelemetryPrometheusRetentionTime time.Duration
// TelemetryFilterDefault is the default for whether to allow a metric that's not // TelemetryFilterDefault is the default for whether to allow a metric that's not
// covered by the filter. // covered by the filter.

View File

@ -2589,7 +2589,7 @@ func TestFullConfig(t *testing.T) {
"prefix_filter": [ "+oJotS8XJ","-cazlEhGn" ], "prefix_filter": [ "+oJotS8XJ","-cazlEhGn" ],
"enable_deprecated_names": true, "enable_deprecated_names": true,
"metrics_prefix": "ftO6DySn", "metrics_prefix": "ftO6DySn",
"prometheus_disable": true, "prometheus_retention_time": "15s",
"statsd_address": "drce87cy", "statsd_address": "drce87cy",
"statsite_address": "HpFwKB8R" "statsite_address": "HpFwKB8R"
}, },
@ -3027,7 +3027,7 @@ func TestFullConfig(t *testing.T) {
prefix_filter = [ "+oJotS8XJ","-cazlEhGn" ] prefix_filter = [ "+oJotS8XJ","-cazlEhGn" ]
enable_deprecated_names = true enable_deprecated_names = true
metrics_prefix = "ftO6DySn" metrics_prefix = "ftO6DySn"
prometheus_disable = true prometheus_retention_time = "15s"
statsd_address = "drce87cy" statsd_address = "drce87cy"
statsite_address = "HpFwKB8R" statsite_address = "HpFwKB8R"
} }
@ -3590,7 +3590,7 @@ func TestFullConfig(t *testing.T) {
TelemetryAllowedPrefixes: []string{"oJotS8XJ", "consul.consul"}, TelemetryAllowedPrefixes: []string{"oJotS8XJ", "consul.consul"},
TelemetryBlockedPrefixes: []string{"cazlEhGn"}, TelemetryBlockedPrefixes: []string{"cazlEhGn"},
TelemetryMetricsPrefix: "ftO6DySn", TelemetryMetricsPrefix: "ftO6DySn",
TelemetryPrometheusDisable: true, TelemetryPrometheusRetentionTime: 15 * time.Second,
TelemetryStatsdAddr: "drce87cy", TelemetryStatsdAddr: "drce87cy",
TelemetryStatsiteAddr: "HpFwKB8R", TelemetryStatsiteAddr: "HpFwKB8R",
TLSCipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384}, TLSCipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384},
@ -4143,7 +4143,7 @@ func TestSanitize(t *testing.T) {
"TelemetryDogstatsdTags": [], "TelemetryDogstatsdTags": [],
"TelemetryFilterDefault": false, "TelemetryFilterDefault": false,
"TelemetryMetricsPrefix": "", "TelemetryMetricsPrefix": "",
"TelemetryPrometheusDisable": false, "TelemetryPrometheusRetentionTime": "0s",
"TelemetryStatsdAddr": "", "TelemetryStatsdAddr": "",
"TelemetryStatsiteAddr": "", "TelemetryStatsiteAddr": "",
"TranslateWANAddrs": false, "TranslateWANAddrs": false,

View File

@ -210,10 +210,13 @@ func dogstatdSink(config *config.RuntimeConfig, hostname string) (metrics.Metric
} }
func prometheusSink(config *config.RuntimeConfig, hostname string) (metrics.MetricSink, error) { func prometheusSink(config *config.RuntimeConfig, hostname string) (metrics.MetricSink, error) {
if config.TelemetryPrometheusDisable { if config.TelemetryPrometheusRetentionTime.Nanoseconds() < 1 {
return nil, nil return nil, nil
} }
sink, err := prometheus.NewPrometheusSink() prometheusOpts := prometheus.PrometheusOpts{
Expiration: config.TelemetryPrometheusRetentionTime,
}
sink, err := prometheus.NewPrometheusSinkFrom(prometheusOpts)
if err != nil { if err != nil {
return nil, err return nil, err
} }