Add ability to exclude db/bucket tag from influxdb outputs (#6184)

This commit is contained in:
Greg 2019-07-30 15:16:51 -06:00 committed by Daniel Nelson
parent 3f63c14179
commit a1bff8f550
6 changed files with 75 additions and 47 deletions

View File

@ -23,6 +23,9 @@ The InfluxDB output plugin writes metrics to the [InfluxDB v1.x] HTTP or UDP ser
## tag is not set the 'database' option is used as the default. ## tag is not set the 'database' option is used as the default.
# database_tag = "" # database_tag = ""
## If true, the database tag will not be added to the metric.
# exclude_database_tag = false
## If true, no CREATE DATABASE queries will be sent. Set to true when using ## If true, no CREATE DATABASE queries will be sent. Set to true when using
## Telegraf with a user without permissions to create databases or when the ## Telegraf with a user without permissions to create databases or when the
## database already exists. ## database already exists.

View File

@ -94,6 +94,7 @@ type HTTPConfig struct {
ContentEncoding string ContentEncoding string
Database string Database string
DatabaseTag string DatabaseTag string
ExcludeDatabaseTag bool
RetentionPolicy string RetentionPolicy string
Consistency string Consistency string
SkipDatabaseCreation bool SkipDatabaseCreation bool
@ -250,6 +251,10 @@ func (c *httpClient) Write(ctx context.Context, metrics []telegraf.Metric) error
batches[db] = make([]telegraf.Metric, 0) batches[db] = make([]telegraf.Metric, 0)
} }
if c.config.ExcludeDatabaseTag {
metric.RemoveTag(c.config.DatabaseTag)
}
batches[db] = append(batches[db], metric) batches[db] = append(batches[db], metric)
} }

View File

@ -38,6 +38,7 @@ type InfluxDB struct {
Password string Password string
Database string Database string
DatabaseTag string `toml:"database_tag"` DatabaseTag string `toml:"database_tag"`
ExcludeDatabaseTag bool `toml:"exclude_database_tag"`
UserAgent string UserAgent string
RetentionPolicy string RetentionPolicy string
WriteConsistency string WriteConsistency string
@ -77,6 +78,9 @@ var sampleConfig = `
## tag is not set the 'database' option is used as the default. ## tag is not set the 'database' option is used as the default.
# database_tag = "" # database_tag = ""
## If true, the database tag will not be added to the metric.
# exclude_database_tag = false
## If true, no CREATE DATABASE queries will be sent. Set to true when using ## If true, no CREATE DATABASE queries will be sent. Set to true when using
## Telegraf with a user without permissions to create databases or when the ## Telegraf with a user without permissions to create databases or when the
## database already exists. ## database already exists.
@ -262,6 +266,7 @@ func (i *InfluxDB) httpClient(ctx context.Context, url *url.URL, proxy *url.URL)
Headers: i.HTTPHeaders, Headers: i.HTTPHeaders,
Database: i.Database, Database: i.Database,
DatabaseTag: i.DatabaseTag, DatabaseTag: i.DatabaseTag,
ExcludeDatabaseTag: i.ExcludeDatabaseTag,
SkipDatabaseCreation: i.SkipDatabaseCreation, SkipDatabaseCreation: i.SkipDatabaseCreation,
RetentionPolicy: i.RetentionPolicy, RetentionPolicy: i.RetentionPolicy,
Consistency: i.WriteConsistency, Consistency: i.WriteConsistency,

View File

@ -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. ## tag is not set the 'bucket' option is used as the default.
# bucket_tag = "" # bucket_tag = ""
## If true, the bucket tag will not be added to the metric.
# exclude_bucket_tag = false
## Timeout for HTTP messages. ## Timeout for HTTP messages.
# timeout = "5s" # timeout = "5s"

View File

@ -45,6 +45,7 @@ type HTTPConfig struct {
Organization string Organization string
Bucket string Bucket string
BucketTag string BucketTag string
ExcludeBucketTag bool
Timeout time.Duration Timeout time.Duration
Headers map[string]string Headers map[string]string
Proxy *url.URL Proxy *url.URL
@ -62,6 +63,7 @@ type httpClient struct {
Organization string Organization string
Bucket string Bucket string
BucketTag string BucketTag string
ExcludeBucketTag bool
client *http.Client client *http.Client
serializer *influx.Serializer serializer *influx.Serializer
@ -137,6 +139,7 @@ func NewHTTPClient(config *HTTPConfig) (*httpClient, error) {
Organization: config.Organization, Organization: config.Organization,
Bucket: config.Bucket, Bucket: config.Bucket,
BucketTag: config.BucketTag, BucketTag: config.BucketTag,
ExcludeBucketTag: config.ExcludeBucketTag,
} }
return client, nil return client, nil
} }
@ -185,6 +188,10 @@ func (c *httpClient) Write(ctx context.Context, metrics []telegraf.Metric) error
batches[bucket] = make([]telegraf.Metric, 0) batches[bucket] = make([]telegraf.Metric, 0)
} }
if c.ExcludeBucketTag {
metric.RemoveTag(c.BucketTag)
}
batches[bucket] = append(batches[bucket], metric) batches[bucket] = append(batches[bucket], metric)
} }

View File

@ -42,6 +42,9 @@ var sampleConfig = `
## tag is not set the 'bucket' option is used as the default. ## tag is not set the 'bucket' option is used as the default.
# bucket_tag = "" # bucket_tag = ""
## If true, the bucket tag will not be added to the metric.
# exclude_bucket_tag = false
## Timeout for HTTP messages. ## Timeout for HTTP messages.
# timeout = "5s" # timeout = "5s"
@ -83,6 +86,7 @@ type InfluxDB struct {
Organization string `toml:"organization"` Organization string `toml:"organization"`
Bucket string `toml:"bucket"` Bucket string `toml:"bucket"`
BucketTag string `toml:"bucket_tag"` BucketTag string `toml:"bucket_tag"`
ExcludeBucketTag bool `toml:"exclude_bucket_tag"`
Timeout internal.Duration `toml:"timeout"` Timeout internal.Duration `toml:"timeout"`
HTTPHeaders map[string]string `toml:"http_headers"` HTTPHeaders map[string]string `toml:"http_headers"`
HTTPProxy string `toml:"http_proxy"` HTTPProxy string `toml:"http_proxy"`
@ -184,6 +188,7 @@ func (i *InfluxDB) getHTTPClient(ctx context.Context, url *url.URL, proxy *url.U
Organization: i.Organization, Organization: i.Organization,
Bucket: i.Bucket, Bucket: i.Bucket,
BucketTag: i.BucketTag, BucketTag: i.BucketTag,
ExcludeBucketTag: i.ExcludeBucketTag,
Timeout: i.Timeout.Duration, Timeout: i.Timeout.Duration,
Headers: i.HTTPHeaders, Headers: i.HTTPHeaders,
Proxy: proxy, Proxy: proxy,