Skip to content

Commit

Permalink
Add ability to exclude db/bucket tag from influxdb outputs (influxda…
Browse files Browse the repository at this point in the history
  • Loading branch information
glinton authored and idohalevi committed Sep 23, 2020
1 parent 299d0fe commit 019a9bb
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 47 deletions.
3 changes: 3 additions & 0 deletions plugins/outputs/influxdb/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
# 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
## Telegraf with a user without permissions to create databases or when the
## database already exists.
Expand Down
5 changes: 5 additions & 0 deletions plugins/outputs/influxdb/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ type HTTPConfig struct {
ContentEncoding string
Database string
DatabaseTag string
ExcludeDatabaseTag bool
RetentionPolicy string
Consistency string
SkipDatabaseCreation bool
Expand Down Expand Up @@ -250,6 +251,10 @@ func (c *httpClient) Write(ctx context.Context, metrics []telegraf.Metric) error
batches[db] = make([]telegraf.Metric, 0)
}

if c.config.ExcludeDatabaseTag {
metric.RemoveTag(c.config.DatabaseTag)
}

batches[db] = append(batches[db], metric)
}

Expand Down
5 changes: 5 additions & 0 deletions plugins/outputs/influxdb/influxdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ type InfluxDB struct {
Password string
Database string
DatabaseTag string `toml:"database_tag"`
ExcludeDatabaseTag bool `toml:"exclude_database_tag"`
UserAgent string
RetentionPolicy string
WriteConsistency string
Expand Down Expand Up @@ -77,6 +78,9 @@ var sampleConfig = `
## tag is not set the 'database' option is used as the default.
# 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
## Telegraf with a user without permissions to create databases or when the
## database already exists.
Expand Down Expand Up @@ -262,6 +266,7 @@ func (i *InfluxDB) httpClient(ctx context.Context, url *url.URL, proxy *url.URL)
Headers: i.HTTPHeaders,
Database: i.Database,
DatabaseTag: i.DatabaseTag,
ExcludeDatabaseTag: i.ExcludeDatabaseTag,
SkipDatabaseCreation: i.SkipDatabaseCreation,
RetentionPolicy: i.RetentionPolicy,
Consistency: i.WriteConsistency,
Expand Down
3 changes: 3 additions & 0 deletions plugins/outputs/influxdb_v2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
55 changes: 31 additions & 24 deletions plugins/outputs/influxdb_v2/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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)
}

Expand Down
51 changes: 28 additions & 23 deletions plugins/outputs/influxdb_v2/influxdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 019a9bb

Please sign in to comment.