feat(outputs.wavefront): Add TLS and HTTP Timeout configuration fields (#13349)

This commit is contained in:
Luke Winikates 2023-06-05 09:34:31 -04:00 committed by GitHub
parent eea3bf3c0a
commit 28073ab034
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 1 deletions

View File

@ -75,6 +75,24 @@ to use them.
## of metrics will block for a longer time, but this will be handled gracefully by the internal buffering in ## of metrics will block for a longer time, but this will be handled gracefully by the internal buffering in
## Telegraf. ## Telegraf.
#immediate_flush = true #immediate_flush = true
## Optional TLS Config
## Set to true/false to enforce TLS being enabled/disabled. If not set,
## enable TLS only if any of the other options are specified.
# tls_enable =
## Trusted root certificates for server
# tls_ca = "/path/to/cafile"
## Used for TLS client certificate authentication
# tls_cert = "/path/to/certfile"
## Used for TLS client certificate authentication
# tls_key = "/path/to/keyfile"
## Send the specified TLS server name via SNI
# tls_server_name = "kubernetes.example.com"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
## HTTP Timeout
#timeout="10s"
``` ```
### Convert Path & Metric Separator ### Convert Path & Metric Separator

View File

@ -50,3 +50,21 @@
## of metrics will block for a longer time, but this will be handled gracefully by the internal buffering in ## of metrics will block for a longer time, but this will be handled gracefully by the internal buffering in
## Telegraf. ## Telegraf.
#immediate_flush = true #immediate_flush = true
## Optional TLS Config
## Set to true/false to enforce TLS being enabled/disabled. If not set,
## enable TLS only if any of the other options are specified.
# tls_enable =
## Trusted root certificates for server
# tls_ca = "/path/to/cafile"
## Used for TLS client certificate authentication
# tls_cert = "/path/to/certfile"
## Used for TLS client certificate authentication
# tls_key = "/path/to/keyfile"
## Send the specified TLS server name via SNI
# tls_server_name = "kubernetes.example.com"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
## HTTP Timeout
#timeout="10s"

View File

@ -7,11 +7,13 @@ import (
"net/url" "net/url"
"regexp" "regexp"
"strings" "strings"
"time"
wavefront "github.com/wavefronthq/wavefront-sdk-go/senders" wavefront "github.com/wavefronthq/wavefront-sdk-go/senders"
"github.com/influxdata/telegraf" "github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/config" "github.com/influxdata/telegraf/config"
"github.com/influxdata/telegraf/plugins/common/tls"
"github.com/influxdata/telegraf/plugins/outputs" "github.com/influxdata/telegraf/plugins/outputs"
serializer "github.com/influxdata/telegraf/plugins/serializers/wavefront" serializer "github.com/influxdata/telegraf/plugins/serializers/wavefront"
) )
@ -32,13 +34,14 @@ type Wavefront struct {
ConvertPaths bool `toml:"convert_paths"` ConvertPaths bool `toml:"convert_paths"`
ConvertBool bool `toml:"convert_bool"` ConvertBool bool `toml:"convert_bool"`
HTTPMaximumBatchSize int `toml:"http_maximum_batch_size"` HTTPMaximumBatchSize int `toml:"http_maximum_batch_size"`
Timeout config.Duration `toml:"timeout"`
UseRegex bool `toml:"use_regex"` UseRegex bool `toml:"use_regex"`
UseStrict bool `toml:"use_strict"` UseStrict bool `toml:"use_strict"`
TruncateTags bool `toml:"truncate_tags"` TruncateTags bool `toml:"truncate_tags"`
ImmediateFlush bool `toml:"immediate_flush"` ImmediateFlush bool `toml:"immediate_flush"`
SourceOverride []string `toml:"source_override"` SourceOverride []string `toml:"source_override"`
StringToNumber map[string][]map[string]float64 `toml:"string_to_number" deprecated:"1.9.0;use the enum processor instead"` StringToNumber map[string][]map[string]float64 `toml:"string_to_number" deprecated:"1.9.0;use the enum processor instead"`
tls.ClientConfig
sender wavefront.Sender sender wavefront.Sender
Log telegraf.Logger `toml:"-"` Log telegraf.Logger `toml:"-"`
} }
@ -97,9 +100,16 @@ func (w *Wavefront) Connect() error {
connectionURL = senderURLFromHostAndPort(w.Host, w.Port) connectionURL = senderURLFromHostAndPort(w.Host, w.Port)
} }
tlsConfig, err := w.TLSConfig()
if err != nil {
return err
}
sender, err := wavefront.NewSender(connectionURL, sender, err := wavefront.NewSender(connectionURL,
wavefront.BatchSize(w.HTTPMaximumBatchSize), wavefront.BatchSize(w.HTTPMaximumBatchSize),
wavefront.FlushIntervalSeconds(flushSeconds), wavefront.FlushIntervalSeconds(flushSeconds),
wavefront.TLSConfigOptions(tlsConfig),
wavefront.Timeout(time.Duration(w.Timeout)),
) )
if err != nil { if err != nil {
@ -306,6 +316,7 @@ func init() {
TruncateTags: false, TruncateTags: false,
ImmediateFlush: true, ImmediateFlush: true,
HTTPMaximumBatchSize: 10000, HTTPMaximumBatchSize: 10000,
Timeout: config.Duration(10 * time.Second),
} }
}) })
} }

View File

@ -383,6 +383,8 @@ func TestSenderURLFromURLAndToken(t *testing.T) {
func TestDefaults(t *testing.T) { func TestDefaults(t *testing.T) {
defaultWavefront := outputs.Outputs["wavefront"]().(*Wavefront) defaultWavefront := outputs.Outputs["wavefront"]().(*Wavefront)
require.Equal(t, 10000, defaultWavefront.HTTPMaximumBatchSize) require.Equal(t, 10000, defaultWavefront.HTTPMaximumBatchSize)
require.Equal(t, config.Duration(10*time.Second), defaultWavefront.Timeout)
require.Equal(t, "", defaultWavefront.TLSCA)
} }
// Benchmarks to test performance of string replacement via Regex and Sanitize // Benchmarks to test performance of string replacement via Regex and Sanitize