Add ability to exclude db/bucket tag from influxdb outputs (#6184)
This commit is contained in:
@@ -26,6 +26,9 @@ The InfluxDB output plugin writes metrics to the [InfluxDB v2.x] HTTP service.
|
||||
## tag is not set the 'bucket' option is used as the default.
|
||||
# bucket_tag = ""
|
||||
|
||||
## If true, the bucket tag will not be added to the metric.
|
||||
# exclude_bucket_tag = false
|
||||
|
||||
## Timeout for HTTP messages.
|
||||
# timeout = "5s"
|
||||
|
||||
|
||||
@@ -40,28 +40,30 @@ const (
|
||||
)
|
||||
|
||||
type HTTPConfig struct {
|
||||
URL *url.URL
|
||||
Token string
|
||||
Organization string
|
||||
Bucket string
|
||||
BucketTag string
|
||||
Timeout time.Duration
|
||||
Headers map[string]string
|
||||
Proxy *url.URL
|
||||
UserAgent string
|
||||
ContentEncoding string
|
||||
TLSConfig *tls.Config
|
||||
URL *url.URL
|
||||
Token string
|
||||
Organization string
|
||||
Bucket string
|
||||
BucketTag string
|
||||
ExcludeBucketTag bool
|
||||
Timeout time.Duration
|
||||
Headers map[string]string
|
||||
Proxy *url.URL
|
||||
UserAgent string
|
||||
ContentEncoding string
|
||||
TLSConfig *tls.Config
|
||||
|
||||
Serializer *influx.Serializer
|
||||
}
|
||||
|
||||
type httpClient struct {
|
||||
ContentEncoding string
|
||||
Timeout time.Duration
|
||||
Headers map[string]string
|
||||
Organization string
|
||||
Bucket string
|
||||
BucketTag string
|
||||
ContentEncoding string
|
||||
Timeout time.Duration
|
||||
Headers map[string]string
|
||||
Organization string
|
||||
Bucket string
|
||||
BucketTag string
|
||||
ExcludeBucketTag bool
|
||||
|
||||
client *http.Client
|
||||
serializer *influx.Serializer
|
||||
@@ -130,13 +132,14 @@ func NewHTTPClient(config *HTTPConfig) (*httpClient, error) {
|
||||
Timeout: timeout,
|
||||
Transport: transport,
|
||||
},
|
||||
url: config.URL,
|
||||
ContentEncoding: config.ContentEncoding,
|
||||
Timeout: timeout,
|
||||
Headers: headers,
|
||||
Organization: config.Organization,
|
||||
Bucket: config.Bucket,
|
||||
BucketTag: config.BucketTag,
|
||||
url: config.URL,
|
||||
ContentEncoding: config.ContentEncoding,
|
||||
Timeout: timeout,
|
||||
Headers: headers,
|
||||
Organization: config.Organization,
|
||||
Bucket: config.Bucket,
|
||||
BucketTag: config.BucketTag,
|
||||
ExcludeBucketTag: config.ExcludeBucketTag,
|
||||
}
|
||||
return client, nil
|
||||
}
|
||||
@@ -185,6 +188,10 @@ func (c *httpClient) Write(ctx context.Context, metrics []telegraf.Metric) error
|
||||
batches[bucket] = make([]telegraf.Metric, 0)
|
||||
}
|
||||
|
||||
if c.ExcludeBucketTag {
|
||||
metric.RemoveTag(c.BucketTag)
|
||||
}
|
||||
|
||||
batches[bucket] = append(batches[bucket], metric)
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,9 @@ var sampleConfig = `
|
||||
## tag is not set the 'bucket' option is used as the default.
|
||||
# bucket_tag = ""
|
||||
|
||||
## If true, the bucket tag will not be added to the metric.
|
||||
# exclude_bucket_tag = false
|
||||
|
||||
## Timeout for HTTP messages.
|
||||
# timeout = "5s"
|
||||
|
||||
@@ -78,17 +81,18 @@ type Client interface {
|
||||
}
|
||||
|
||||
type InfluxDB struct {
|
||||
URLs []string `toml:"urls"`
|
||||
Token string `toml:"token"`
|
||||
Organization string `toml:"organization"`
|
||||
Bucket string `toml:"bucket"`
|
||||
BucketTag string `toml:"bucket_tag"`
|
||||
Timeout internal.Duration `toml:"timeout"`
|
||||
HTTPHeaders map[string]string `toml:"http_headers"`
|
||||
HTTPProxy string `toml:"http_proxy"`
|
||||
UserAgent string `toml:"user_agent"`
|
||||
ContentEncoding string `toml:"content_encoding"`
|
||||
UintSupport bool `toml:"influx_uint_support"`
|
||||
URLs []string `toml:"urls"`
|
||||
Token string `toml:"token"`
|
||||
Organization string `toml:"organization"`
|
||||
Bucket string `toml:"bucket"`
|
||||
BucketTag string `toml:"bucket_tag"`
|
||||
ExcludeBucketTag bool `toml:"exclude_bucket_tag"`
|
||||
Timeout internal.Duration `toml:"timeout"`
|
||||
HTTPHeaders map[string]string `toml:"http_headers"`
|
||||
HTTPProxy string `toml:"http_proxy"`
|
||||
UserAgent string `toml:"user_agent"`
|
||||
ContentEncoding string `toml:"content_encoding"`
|
||||
UintSupport bool `toml:"influx_uint_support"`
|
||||
tls.ClientConfig
|
||||
|
||||
clients []Client
|
||||
@@ -179,18 +183,19 @@ func (i *InfluxDB) getHTTPClient(ctx context.Context, url *url.URL, proxy *url.U
|
||||
}
|
||||
|
||||
config := &HTTPConfig{
|
||||
URL: url,
|
||||
Token: i.Token,
|
||||
Organization: i.Organization,
|
||||
Bucket: i.Bucket,
|
||||
BucketTag: i.BucketTag,
|
||||
Timeout: i.Timeout.Duration,
|
||||
Headers: i.HTTPHeaders,
|
||||
Proxy: proxy,
|
||||
UserAgent: i.UserAgent,
|
||||
ContentEncoding: i.ContentEncoding,
|
||||
TLSConfig: tlsConfig,
|
||||
Serializer: i.serializer,
|
||||
URL: url,
|
||||
Token: i.Token,
|
||||
Organization: i.Organization,
|
||||
Bucket: i.Bucket,
|
||||
BucketTag: i.BucketTag,
|
||||
ExcludeBucketTag: i.ExcludeBucketTag,
|
||||
Timeout: i.Timeout.Duration,
|
||||
Headers: i.HTTPHeaders,
|
||||
Proxy: proxy,
|
||||
UserAgent: i.UserAgent,
|
||||
ContentEncoding: i.ContentEncoding,
|
||||
TLSConfig: tlsConfig,
|
||||
Serializer: i.serializer,
|
||||
}
|
||||
|
||||
c, err := NewHTTPClient(config)
|
||||
|
||||
Reference in New Issue
Block a user