diff --git a/README.md b/README.md index 6e967ab06..7d0faa8ce 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ _(But if you'd rather configure some of your routes manually, Traefik supports t - Circuit breakers, retry - See the magic through its clean web UI - Websocket, HTTP/2, gRPC ready -- Provides metrics (Rest, Prometheus, Datadog, Statsd, InfluxDB) +- Provides metrics (Rest, Prometheus, Datadog, Statsd, InfluxDB 2.X) - Keeps access logs (JSON, CLF) - Fast - Exposes a Rest API diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index 89580c553..434144db5 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -523,16 +523,6 @@ func registerMetricClients(metricsConfig *types.Metrics) []metrics.Registry { Msg("Configured StatsD metrics") } - if metricsConfig.InfluxDB != nil { - logger := log.With().Str(logs.MetricsProviderName, "influxdb").Logger() - - registries = append(registries, metrics.RegisterInfluxDB(logger.WithContext(context.Background()), metricsConfig.InfluxDB)) - logger.Debug(). - Str("address", metricsConfig.InfluxDB.Address). - Str("pushInterval", metricsConfig.InfluxDB.PushInterval.String()). - Msg("Configured InfluxDB metrics") - } - if metricsConfig.InfluxDB2 != nil { logger := log.With().Str(logs.MetricsProviderName, "influxdb2").Logger() diff --git a/docs/content/migration/v2-to-v3.md b/docs/content/migration/v2-to-v3.md index 6c8d36e5e..3a9c7e4c4 100644 --- a/docs/content/migration/v2-to-v3.md +++ b/docs/content/migration/v2-to-v3.md @@ -29,7 +29,7 @@ In v3, the reported status code for gRPC requests is now the value of the `Grpc- - The `tls.caOptional` option has been removed from the ForwardAuth middleware, as well as from the HTTP, Consul, Etcd, Redis, ZooKeeper, Consul Catalog, and Docker providers. - `sslRedirect`, `sslTemporaryRedirect`, `sslHost`, `sslForceHost` and `featurePolicy` options of the Headers middleware have been removed. - The `forceSlash` option of the StripPrefix middleware has been removed. -- the `preferServerCipherSuites` option has been removed. +- The `preferServerCipherSuites` option has been removed. ## Matchers @@ -76,3 +76,7 @@ As such, Rancher 2.x users should utilize the [Kubernetes CRD provider](../provi ## Marathon provider In v3, the Marathon provider has been removed. + +## InfluxDB v1 + +In v3, the InfluxDB v1 metrics provider has been removed because InfluxDB v1.x maintenance [ended in 2021](https://www.influxdata.com/blog/influxdb-oss-and-enterprise-roadmap-update-from-influxdays-emea/). diff --git a/docs/content/observability/metrics/influxdb.md b/docs/content/observability/metrics/influxdb.md deleted file mode 100644 index 0eb05e23c..000000000 --- a/docs/content/observability/metrics/influxdb.md +++ /dev/null @@ -1,268 +0,0 @@ ---- -title: "Traefik InfluxDB Documentation" -description: "Traefik supports several metrics backends, including InfluxDB. Learn how to implement it for observability in Traefik Proxy. Read the technical documentation." ---- - -# InfluxDB - -To enable the InfluxDB: - -```yaml tab="File (YAML)" -metrics: - influxDB: {} -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] -``` - -```bash tab="CLI" ---metrics.influxdb=true -``` - -#### `address` - -_Required, Default="localhost:8089"_ - -Address instructs exporter to send metrics to influxdb at this address. - -```yaml tab="File (YAML)" -metrics: - influxDB: - address: localhost:8089 -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - address = "localhost:8089" -``` - -```bash tab="CLI" ---metrics.influxdb.address=localhost:8089 -``` - -#### `protocol` - -_Required, Default="udp"_ - -InfluxDB's address protocol (udp or http). - -```yaml tab="File (YAML)" -metrics: - influxDB: - protocol: udp -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - protocol = "udp" -``` - -```bash tab="CLI" ---metrics.influxdb.protocol=udp -``` - -#### `database` - -_Optional, Default=""_ - -InfluxDB database used when protocol is http. - -```yaml tab="File (YAML)" -metrics: - influxDB: - database: db -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - database = "db" -``` - -```bash tab="CLI" ---metrics.influxdb.database=db -``` - -#### `retentionPolicy` - -_Optional, Default=""_ - -InfluxDB retention policy used when protocol is http. - -```yaml tab="File (YAML)" -metrics: - influxDB: - retentionPolicy: two_hours -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - retentionPolicy = "two_hours" -``` - -```bash tab="CLI" ---metrics.influxdb.retentionPolicy=two_hours -``` - -#### `username` - -_Optional, Default=""_ - -InfluxDB username (only with http). - -```yaml tab="File (YAML)" -metrics: - influxDB: - username: john -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - username = "john" -``` - -```bash tab="CLI" ---metrics.influxdb.username=john -``` - -#### `password` - -_Optional, Default=""_ - -InfluxDB password (only with http). - -```yaml tab="File (YAML)" -metrics: - influxDB: - password: secret -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - password = "secret" -``` - -```bash tab="CLI" ---metrics.influxdb.password=secret -``` - -#### `addEntryPointsLabels` - -_Optional, Default=true_ - -Enable metrics on entry points. - -```yaml tab="File (YAML)" -metrics: - influxDB: - addEntryPointsLabels: true -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - addEntryPointsLabels = true -``` - -```bash tab="CLI" ---metrics.influxdb.addEntryPointsLabels=true -``` - -#### `addRoutersLabels` - -_Optional, Default=false_ - -Enable metrics on routers. - -```yaml tab="File (YAML)" -metrics: - influxDB: - addRoutersLabels: true -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - addRoutersLabels = true -``` - -```bash tab="CLI" ---metrics.influxdb.addrouterslabels=true -``` - -#### `addServicesLabels` - -_Optional, Default=true_ - -Enable metrics on services. - -```yaml tab="File (YAML)" -metrics: - influxDB: - addServicesLabels: true -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - addServicesLabels = true -``` - -```bash tab="CLI" ---metrics.influxdb.addServicesLabels=true -``` - -#### `pushInterval` - -_Optional, Default=10s_ - -The interval used by the exporter to push metrics to influxdb. - -```yaml tab="File (YAML)" -metrics: - influxDB: - pushInterval: 10s -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - pushInterval = "10s" -``` - -```bash tab="CLI" ---metrics.influxdb.pushInterval=10s -``` - -#### `additionalLabels` - -_Optional, Default={}_ - -Additional labels (influxdb tags) on all metrics. - -```yaml tab="File (YAML)" -metrics: - influxDB: - additionalLabels: - host: example.com - environment: production -``` - -```toml tab="File (TOML)" -[metrics] - [metrics.influxDB] - [metrics.influxDB.additionalLabels] - host = "example.com" - environment = "production" -``` - -```bash tab="CLI" ---metrics.influxdb.additionallabels.host=example.com --metrics.influxdb.additionallabels.environment=production -``` diff --git a/docs/content/observability/metrics/overview.md b/docs/content/observability/metrics/overview.md index 0fce7e76c..2a3e1d9c7 100644 --- a/docs/content/observability/metrics/overview.md +++ b/docs/content/observability/metrics/overview.md @@ -1,6 +1,6 @@ --- title: "Traefik Metrics Overview" -description: "Traefik Proxy supports these metrics backend systems: Datadog, InfluxDB, Prometheus, and StatsD. Read the full documentation to get started." +description: "Traefik Proxy supports these metrics backend systems: Datadog, InfluxDB 2.X, Prometheus, and StatsD. Read the full documentation to get started." --- # Metrics @@ -8,7 +8,6 @@ description: "Traefik Proxy supports these metrics backend systems: Datadog, Inf Traefik supports these metrics backends: - [Datadog](./datadog.md) -- [InfluxDB](./influxdb.md) - [InfluxDB2](./influxdb2.md) - [Prometheus](./prometheus.md) - [StatsD](./statsd.md) @@ -35,7 +34,7 @@ config.reload.lastSuccessTimestamp tls.certs.notAfterTimestamp ``` -```influxdb tab="InfluxDB / InfluxDB2" +```influxdb tab="InfluxDB2" traefik.config.reload.total traefik.config.reload.lastSuccessTimestamp traefik.tls.certs.notAfterTimestamp @@ -77,7 +76,7 @@ entrypoint.requests.bytes.total entrypoint.responses.bytes.total ``` -```influxdb tab="InfluxDB / InfluxDB2" +```influxdb tab="InfluxDB2" traefik.entrypoint.requests.total traefik.entrypoint.requests.tls.total traefik.entrypoint.request.duration @@ -125,7 +124,7 @@ router.requests.bytes.total router.responses.bytes.total ``` -```influxdb tab="InfluxDB / InfluxDB2" +```influxdb tab="InfluxDB2" traefik.router.requests.total traefik.router.requests.tls.total traefik.router.request.duration @@ -179,7 +178,7 @@ service.requests.bytes.total service.responses.bytes.total ``` -```influxdb tab="InfluxDB / InfluxDB2" +```influxdb tab="InfluxDB2" traefik.service.requests.total traefik.service.requests.tls.total traefik.service.request.duration diff --git a/docs/content/reference/static-configuration/cli-ref.md b/docs/content/reference/static-configuration/cli-ref.md index 1a95f346b..00bb3af7f 100644 --- a/docs/content/reference/static-configuration/cli-ref.md +++ b/docs/content/reference/static-configuration/cli-ref.md @@ -288,42 +288,6 @@ Prefix to use for metrics collection. (Default: ```traefik```) `--metrics.datadog.pushinterval`: Datadog push interval. (Default: ```10```) -`--metrics.influxdb`: -InfluxDB metrics exporter type. (Default: ```false```) - -`--metrics.influxdb.addentrypointslabels`: -Enable metrics on entry points. (Default: ```true```) - -`--metrics.influxdb.additionallabels.`: -Additional labels (influxdb tags) on all metrics - -`--metrics.influxdb.address`: -InfluxDB address. (Default: ```localhost:8089```) - -`--metrics.influxdb.addrouterslabels`: -Enable metrics on routers. (Default: ```false```) - -`--metrics.influxdb.addserviceslabels`: -Enable metrics on services. (Default: ```true```) - -`--metrics.influxdb.database`: -InfluxDB database used when protocol is http. - -`--metrics.influxdb.password`: -InfluxDB password (only with http). - -`--metrics.influxdb.protocol`: -InfluxDB address protocol (udp or http). (Default: ```udp```) - -`--metrics.influxdb.pushinterval`: -InfluxDB push interval. (Default: ```10```) - -`--metrics.influxdb.retentionpolicy`: -InfluxDB retention policy used when protocol is http. - -`--metrics.influxdb.username`: -InfluxDB username (only with http). - `--metrics.influxdb2`: InfluxDB v2 metrics exporter type. (Default: ```false```) diff --git a/docs/content/reference/static-configuration/env-ref.md b/docs/content/reference/static-configuration/env-ref.md index 065ae8bff..b6a7429a8 100644 --- a/docs/content/reference/static-configuration/env-ref.md +++ b/docs/content/reference/static-configuration/env-ref.md @@ -288,9 +288,6 @@ Prefix to use for metrics collection. (Default: ```traefik```) `TRAEFIK_METRICS_DATADOG_PUSHINTERVAL`: Datadog push interval. (Default: ```10```) -`TRAEFIK_METRICS_INFLUXDB`: -InfluxDB metrics exporter type. (Default: ```false```) - `TRAEFIK_METRICS_INFLUXDB2`: InfluxDB v2 metrics exporter type. (Default: ```false```) @@ -321,39 +318,6 @@ InfluxDB v2 push interval. (Default: ```10```) `TRAEFIK_METRICS_INFLUXDB2_TOKEN`: InfluxDB v2 access token. -`TRAEFIK_METRICS_INFLUXDB_ADDENTRYPOINTSLABELS`: -Enable metrics on entry points. (Default: ```true```) - -`TRAEFIK_METRICS_INFLUXDB_ADDITIONALLABELS_`: -Additional labels (influxdb tags) on all metrics - -`TRAEFIK_METRICS_INFLUXDB_ADDRESS`: -InfluxDB address. (Default: ```localhost:8089```) - -`TRAEFIK_METRICS_INFLUXDB_ADDROUTERSLABELS`: -Enable metrics on routers. (Default: ```false```) - -`TRAEFIK_METRICS_INFLUXDB_ADDSERVICESLABELS`: -Enable metrics on services. (Default: ```true```) - -`TRAEFIK_METRICS_INFLUXDB_DATABASE`: -InfluxDB database used when protocol is http. - -`TRAEFIK_METRICS_INFLUXDB_PASSWORD`: -InfluxDB password (only with http). - -`TRAEFIK_METRICS_INFLUXDB_PROTOCOL`: -InfluxDB address protocol (udp or http). (Default: ```udp```) - -`TRAEFIK_METRICS_INFLUXDB_PUSHINTERVAL`: -InfluxDB push interval. (Default: ```10```) - -`TRAEFIK_METRICS_INFLUXDB_RETENTIONPOLICY`: -InfluxDB retention policy used when protocol is http. - -`TRAEFIK_METRICS_INFLUXDB_USERNAME`: -InfluxDB username (only with http). - `TRAEFIK_METRICS_OPENTELEMETRY`: OpenTelemetry metrics exporter type. (Default: ```false```) diff --git a/docs/content/reference/static-configuration/file.toml b/docs/content/reference/static-configuration/file.toml index 5b68317a9..29ccadce7 100644 --- a/docs/content/reference/static-configuration/file.toml +++ b/docs/content/reference/static-configuration/file.toml @@ -269,20 +269,6 @@ addRoutersLabels = true addServicesLabels = true prefix = "foobar" - [metrics.influxDB] - address = "foobar" - protocol = "foobar" - pushInterval = "42s" - database = "foobar" - retentionPolicy = "foobar" - username = "foobar" - password = "foobar" - addEntryPointsLabels = true - addRoutersLabels = true - addServicesLabels = true - [metrics.influxDB.additionalLabels] - name0 = "foobar" - name1 = "foobar" [metrics.influxDB2] address = "foobar" token = "foobar" diff --git a/docs/content/reference/static-configuration/file.yaml b/docs/content/reference/static-configuration/file.yaml index 1ce4ec6c1..10284c874 100644 --- a/docs/content/reference/static-configuration/file.yaml +++ b/docs/content/reference/static-configuration/file.yaml @@ -298,20 +298,6 @@ metrics: addRoutersLabels: true addServicesLabels: true prefix: foobar - influxDB: - address: foobar - protocol: foobar - pushInterval: 42s - database: foobar - retentionPolicy: foobar - username: foobar - password: foobar - addEntryPointsLabels: true - addRoutersLabels: true - addServicesLabels: true - additionalLabels: - name0: foobar - name1: foobar influxDB2: address: foobar token: foobar diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 4819e16c8..179be7ae5 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -151,7 +151,6 @@ nav: - 'Metrics': - 'Overview': 'observability/metrics/overview.md' - 'Datadog': 'observability/metrics/datadog.md' - - 'InfluxDB': 'observability/metrics/influxdb.md' - 'InfluxDB2': 'observability/metrics/influxdb2.md' - 'OpenTelemetry': 'observability/metrics/opentelemetry.md' - 'Prometheus': 'observability/metrics/prometheus.md' diff --git a/pkg/config/dynamic/fixtures/sample.toml b/pkg/config/dynamic/fixtures/sample.toml index 58534c553..6d37b8ab7 100644 --- a/pkg/config/dynamic/fixtures/sample.toml +++ b/pkg/config/dynamic/fixtures/sample.toml @@ -93,14 +93,6 @@ [metrics.statsD] address = "foobar" pushInterval = "10s" - [metrics.influxDB] - address = "foobar" - protocol = "foobar" - pushInterval = "10s" - database = "foobar" - retentionPolicy = "foobar" - username = "foobar" - password = "foobar" [ping] entryPoint = "foobar" diff --git a/pkg/metrics/influxdb.go b/pkg/metrics/influxdb.go deleted file mode 100644 index d90ec75fc..000000000 --- a/pkg/metrics/influxdb.go +++ /dev/null @@ -1,249 +0,0 @@ -package metrics - -import ( - "bytes" - "context" - "fmt" - "net/url" - "regexp" - "time" - - "github.com/go-kit/kit/metrics/influx" - influxdb "github.com/influxdata/influxdb1-client/v2" - "github.com/rs/zerolog/log" - "github.com/traefik/traefik/v2/pkg/logs" - "github.com/traefik/traefik/v2/pkg/safe" - "github.com/traefik/traefik/v2/pkg/types" -) - -var ( - influxDBClient *influx.Influx - influxDBTicker *time.Ticker -) - -const ( - influxDBConfigReloadsName = "traefik.config.reload.total" - influxDBConfigReloadsFailureName = influxDBConfigReloadsName + ".failure" - influxDBLastConfigReloadSuccessName = "traefik.config.reload.lastSuccessTimestamp" - influxDBLastConfigReloadFailureName = "traefik.config.reload.lastFailureTimestamp" - - influxDBTLSCertsNotAfterTimestampName = "traefik.tls.certs.notAfterTimestamp" - - influxDBEntryPointReqsName = "traefik.entrypoint.requests.total" - influxDBEntryPointReqsTLSName = "traefik.entrypoint.requests.tls.total" - influxDBEntryPointReqDurationName = "traefik.entrypoint.request.duration" - influxDBEntryPointOpenConnsName = "traefik.entrypoint.connections.open" - influxDBEntryPointReqsBytesName = "traefik.entrypoint.requests.bytes.total" - influxDBEntryPointRespsBytesName = "traefik.entrypoint.responses.bytes.total" - - influxDBRouterReqsName = "traefik.router.requests.total" - influxDBRouterReqsTLSName = "traefik.router.requests.tls.total" - influxDBRouterReqsDurationName = "traefik.router.request.duration" - influxDBORouterOpenConnsName = "traefik.router.connections.open" - influxDBRouterReqsBytesName = "traefik.router.requests.bytes.total" - influxDBRouterRespsBytesName = "traefik.router.responses.bytes.total" - - influxDBServiceReqsName = "traefik.service.requests.total" - influxDBServiceReqsTLSName = "traefik.service.requests.tls.total" - influxDBServiceReqsDurationName = "traefik.service.request.duration" - influxDBServiceRetriesTotalName = "traefik.service.retries.total" - influxDBServiceOpenConnsName = "traefik.service.connections.open" - influxDBServiceServerUpName = "traefik.service.server.up" - influxDBServiceReqsBytesName = "traefik.service.requests.bytes.total" - influxDBServiceRespsBytesName = "traefik.service.responses.bytes.total" -) - -const ( - protocolHTTP = "http" - protocolUDP = "udp" -) - -// RegisterInfluxDB registers the metrics pusher if this didn't happen yet and creates a InfluxDB Registry instance. -func RegisterInfluxDB(ctx context.Context, config *types.InfluxDB) Registry { - if influxDBClient == nil { - influxDBClient = initInfluxDBClient(ctx, config) - } - if influxDBTicker == nil { - influxDBTicker = initInfluxDBTicker(ctx, config) - } - - registry := &standardRegistry{ - configReloadsCounter: influxDBClient.NewCounter(influxDBConfigReloadsName), - configReloadsFailureCounter: influxDBClient.NewCounter(influxDBConfigReloadsFailureName), - lastConfigReloadSuccessGauge: influxDBClient.NewGauge(influxDBLastConfigReloadSuccessName), - lastConfigReloadFailureGauge: influxDBClient.NewGauge(influxDBLastConfigReloadFailureName), - tlsCertsNotAfterTimestampGauge: influxDBClient.NewGauge(influxDBTLSCertsNotAfterTimestampName), - } - - if config.AddEntryPointsLabels { - registry.epEnabled = config.AddEntryPointsLabels - registry.entryPointReqsCounter = influxDBClient.NewCounter(influxDBEntryPointReqsName) - registry.entryPointReqsTLSCounter = influxDBClient.NewCounter(influxDBEntryPointReqsTLSName) - registry.entryPointReqDurationHistogram, _ = NewHistogramWithScale(influxDBClient.NewHistogram(influxDBEntryPointReqDurationName), time.Second) - registry.entryPointOpenConnsGauge = influxDBClient.NewGauge(influxDBEntryPointOpenConnsName) - registry.entryPointReqsBytesCounter = influxDBClient.NewCounter(influxDBEntryPointReqsBytesName) - registry.entryPointRespsBytesCounter = influxDBClient.NewCounter(influxDBEntryPointRespsBytesName) - } - - if config.AddRoutersLabels { - registry.routerEnabled = config.AddRoutersLabels - registry.routerReqsCounter = influxDBClient.NewCounter(influxDBRouterReqsName) - registry.routerReqsTLSCounter = influxDBClient.NewCounter(influxDBRouterReqsTLSName) - registry.routerReqDurationHistogram, _ = NewHistogramWithScale(influxDBClient.NewHistogram(influxDBRouterReqsDurationName), time.Second) - registry.routerOpenConnsGauge = influxDBClient.NewGauge(influxDBORouterOpenConnsName) - registry.routerReqsBytesCounter = influxDBClient.NewCounter(influxDBRouterReqsBytesName) - registry.routerRespsBytesCounter = influxDBClient.NewCounter(influxDBRouterRespsBytesName) - } - - if config.AddServicesLabels { - registry.svcEnabled = config.AddServicesLabels - registry.serviceReqsCounter = influxDBClient.NewCounter(influxDBServiceReqsName) - registry.serviceReqsTLSCounter = influxDBClient.NewCounter(influxDBServiceReqsTLSName) - registry.serviceReqDurationHistogram, _ = NewHistogramWithScale(influxDBClient.NewHistogram(influxDBServiceReqsDurationName), time.Second) - registry.serviceRetriesCounter = influxDBClient.NewCounter(influxDBServiceRetriesTotalName) - registry.serviceOpenConnsGauge = influxDBClient.NewGauge(influxDBServiceOpenConnsName) - registry.serviceServerUpGauge = influxDBClient.NewGauge(influxDBServiceServerUpName) - registry.serviceReqsBytesCounter = influxDBClient.NewCounter(influxDBServiceReqsBytesName) - registry.serviceRespsBytesCounter = influxDBClient.NewCounter(influxDBServiceRespsBytesName) - } - - return registry -} - -// initInfluxDBClient creates a influxDBClient. -func initInfluxDBClient(ctx context.Context, config *types.InfluxDB) *influx.Influx { - logger := log.Ctx(ctx) - - // TODO deprecated: move this switch into configuration.SetEffectiveConfiguration when web provider will be removed. - switch config.Protocol { - case protocolUDP: - if len(config.Database) > 0 || len(config.RetentionPolicy) > 0 { - logger.Warn().Msg("Database and RetentionPolicy options have no effect with UDP.") - config.Database = "" - config.RetentionPolicy = "" - } - case protocolHTTP: - if u, err := url.Parse(config.Address); err == nil { - if u.Scheme != "http" && u.Scheme != "https" { - logger.Warn().Msgf("InfluxDB address %s should specify a scheme (http or https): falling back on HTTP.", config.Address) - config.Address = "http://" + config.Address - } - } else { - logger.Error().Err(err).Msg("Unable to parse the InfluxDB address: falling back on UDP.") - config.Protocol = protocolUDP - config.Database = "" - config.RetentionPolicy = "" - } - default: - logger.Warn().Msgf("Unsupported protocol %s: falling back on UDP.", config.Protocol) - config.Protocol = protocolUDP - config.Database = "" - config.RetentionPolicy = "" - } - - return influx.New( - config.AdditionalLabels, - influxdb.BatchPointsConfig{ - Database: config.Database, - RetentionPolicy: config.RetentionPolicy, - }, - logs.NewGoKitWrapper(*logger), - ) -} - -// initInfluxDBTicker initializes metrics pusher. -func initInfluxDBTicker(ctx context.Context, config *types.InfluxDB) *time.Ticker { - report := time.NewTicker(time.Duration(config.PushInterval)) - - safe.Go(func() { - var buf bytes.Buffer - influxDBClient.WriteLoop(ctx, report.C, &influxDBWriter{buf: buf, config: config}) - }) - - return report -} - -// StopInfluxDB stops internal influxDBTicker which controls the pushing of metrics to InfluxDB Agent and resets it to `nil`. -func StopInfluxDB() { - if influxDBTicker != nil { - influxDBTicker.Stop() - } - influxDBTicker = nil -} - -type influxDBWriter struct { - buf bytes.Buffer - config *types.InfluxDB -} - -// Write creates a http or udp client and attempts to write BatchPoints. -// If a "database not found" error is encountered, a CREATE DATABASE -// query is attempted when using protocol http. -func (w *influxDBWriter) Write(bp influxdb.BatchPoints) error { - c, err := w.initWriteClient() - if err != nil { - return err - } - - defer c.Close() - - if writeErr := c.Write(bp); writeErr != nil { - logger := log.With().Str(logs.MetricsProviderName, "influxdb").Logger() - logger.Error().Err(writeErr).Msg("Error while writing to InfluxDB") - - if handleErr := w.handleWriteError(logger.WithContext(context.Background()), c, writeErr); handleErr != nil { - return handleErr - } - // Retry write after successful handling of writeErr - return c.Write(bp) - } - return nil -} - -func (w *influxDBWriter) initWriteClient() (influxdb.Client, error) { - if w.config.Protocol == "http" { - return influxdb.NewHTTPClient(influxdb.HTTPConfig{ - Addr: w.config.Address, - Username: w.config.Username, - Password: w.config.Password, - }) - } - - return influxdb.NewUDPClient(influxdb.UDPConfig{ - Addr: w.config.Address, - }) -} - -func (w *influxDBWriter) handleWriteError(ctx context.Context, c influxdb.Client, writeErr error) error { - if w.config.Protocol != protocolHTTP { - return writeErr - } - - match, matchErr := regexp.MatchString("database not found", writeErr.Error()) - - if matchErr != nil || !match { - return writeErr - } - - qStr := fmt.Sprintf("CREATE DATABASE \"%s\"", w.config.Database) - if w.config.RetentionPolicy != "" { - qStr = fmt.Sprintf("%s WITH NAME \"%s\"", qStr, w.config.RetentionPolicy) - } - - logger := log.Ctx(ctx) - - logger.Debug().Msgf("InfluxDB database not found: attempting to create one with %s", qStr) - - q := influxdb.NewQuery(qStr, "", "") - response, queryErr := c.Query(q) - if queryErr == nil && response.Error() != nil { - queryErr = response.Error() - } - if queryErr != nil { - logger.Error().Err(queryErr).Msg("Error while creating the InfluxDB database") - return queryErr - } - - logger.Debug().Msgf("Successfully created the InfluxDB database %s", w.config.Database) - return nil -} diff --git a/pkg/metrics/influxdb2.go b/pkg/metrics/influxdb2.go index 6cf02e8f7..b23bcc31e 100644 --- a/pkg/metrics/influxdb2.go +++ b/pkg/metrics/influxdb2.go @@ -23,6 +23,38 @@ var ( influxDB2Client influxdb2.Client ) +const ( + influxDBConfigReloadsName = "traefik.config.reload.total" + influxDBConfigReloadsFailureName = influxDBConfigReloadsName + ".failure" + influxDBLastConfigReloadSuccessName = "traefik.config.reload.lastSuccessTimestamp" + influxDBLastConfigReloadFailureName = "traefik.config.reload.lastFailureTimestamp" + + influxDBTLSCertsNotAfterTimestampName = "traefik.tls.certs.notAfterTimestamp" + + influxDBEntryPointReqsName = "traefik.entrypoint.requests.total" + influxDBEntryPointReqsTLSName = "traefik.entrypoint.requests.tls.total" + influxDBEntryPointReqDurationName = "traefik.entrypoint.request.duration" + influxDBEntryPointOpenConnsName = "traefik.entrypoint.connections.open" + influxDBEntryPointReqsBytesName = "traefik.entrypoint.requests.bytes.total" + influxDBEntryPointRespsBytesName = "traefik.entrypoint.responses.bytes.total" + + influxDBRouterReqsName = "traefik.router.requests.total" + influxDBRouterReqsTLSName = "traefik.router.requests.tls.total" + influxDBRouterReqsDurationName = "traefik.router.request.duration" + influxDBORouterOpenConnsName = "traefik.router.connections.open" + influxDBRouterReqsBytesName = "traefik.router.requests.bytes.total" + influxDBRouterRespsBytesName = "traefik.router.responses.bytes.total" + + influxDBServiceReqsName = "traefik.service.requests.total" + influxDBServiceReqsTLSName = "traefik.service.requests.tls.total" + influxDBServiceReqsDurationName = "traefik.service.request.duration" + influxDBServiceRetriesTotalName = "traefik.service.retries.total" + influxDBServiceOpenConnsName = "traefik.service.connections.open" + influxDBServiceServerUpName = "traefik.service.server.up" + influxDBServiceReqsBytesName = "traefik.service.requests.bytes.total" + influxDBServiceRespsBytesName = "traefik.service.responses.bytes.total" +) + // RegisterInfluxDB2 creates metrics exporter for InfluxDB2. func RegisterInfluxDB2(ctx context.Context, config *types.InfluxDB2) Registry { logger := log.Ctx(ctx) diff --git a/pkg/metrics/influxdb2_test.go b/pkg/metrics/influxdb2_test.go index 3fc628d67..441137999 100644 --- a/pkg/metrics/influxdb2_test.go +++ b/pkg/metrics/influxdb2_test.go @@ -6,6 +6,7 @@ import ( "io" "net/http" "net/http/httptest" + "regexp" "strconv" "testing" "time" @@ -155,3 +156,14 @@ func TestInfluxDB2(t *testing.T) { assertMessage(t, *msgServiceOpenConns, expectedServiceOpenConns) } + +func assertMessage(t *testing.T, msg string, patterns []string) { + t.Helper() + for _, pattern := range patterns { + re := regexp.MustCompile(pattern) + match := re.FindStringSubmatch(msg) + if len(match) != 2 { + t.Errorf("Got %q %v, want %q", msg, match, pattern) + } + } +} diff --git a/pkg/metrics/influxdb_test.go b/pkg/metrics/influxdb_test.go deleted file mode 100644 index 38a146697..000000000 --- a/pkg/metrics/influxdb_test.go +++ /dev/null @@ -1,267 +0,0 @@ -package metrics - -import ( - "context" - "fmt" - "io" - "net/http" - "net/http/httptest" - "regexp" - "strconv" - "testing" - "time" - - "github.com/stretchr/testify/require" - "github.com/stvp/go-udp-testing" - ptypes "github.com/traefik/paerser/types" - "github.com/traefik/traefik/v2/pkg/types" -) - -func TestInfluxDB(t *testing.T) { - udp.SetAddr(":8089") - // This is needed to make sure that UDP Listener listens for data a bit longer, otherwise it will quit after a millisecond - udp.Timeout = 5 * time.Second - - influxDBClient = nil - influxDBRegistry := RegisterInfluxDB(context.Background(), - &types.InfluxDB{ - Address: ":8089", - PushInterval: ptypes.Duration(time.Second), - AddEntryPointsLabels: true, - AddRoutersLabels: true, - AddServicesLabels: true, - AdditionalLabels: map[string]string{"tag1": "val1"}, - }) - defer StopInfluxDB() - - if !influxDBRegistry.IsEpEnabled() || !influxDBRegistry.IsRouterEnabled() || !influxDBRegistry.IsSvcEnabled() { - t.Fatalf("InfluxDBRegistry should return true for IsEnabled(), IsRouterEnabled() and IsSvcEnabled()") - } - - expectedServer := []string{ - `(traefik\.config\.reload\.total,tag1=val1 count=1) [\d]{19}`, - `(traefik\.config\.reload\.total\.failure,tag1=val1 count=1) [\d]{19}`, - `(traefik\.config\.reload\.lastSuccessTimestamp,tag1=val1 value=1) [\d]{19}`, - `(traefik\.config\.reload\.lastFailureTimestamp,tag1=val1 value=1) [\d]{19}`, - } - - msgServer := udp.ReceiveString(t, func() { - influxDBRegistry.ConfigReloadsCounter().Add(1) - influxDBRegistry.ConfigReloadsFailureCounter().Add(1) - influxDBRegistry.LastConfigReloadSuccessGauge().Set(1) - influxDBRegistry.LastConfigReloadFailureGauge().Set(1) - }) - - assertMessage(t, msgServer, expectedServer) - - expectedTLS := []string{ - `(traefik\.tls\.certs\.notAfterTimestamp,key=value,tag1=val1 value=1) [\d]{19}`, - } - - msgTLS := udp.ReceiveString(t, func() { - influxDBRegistry.TLSCertsNotAfterTimestampGauge().With("key", "value").Set(1) - }) - - assertMessage(t, msgTLS, expectedTLS) - - expectedEntrypoint := []string{ - `(traefik\.entrypoint\.requests\.total,code=200,entrypoint=test,method=GET,tag1=val1 count=1) [\d]{19}`, - `(traefik\.entrypoint\.requests\.tls\.total,entrypoint=test,tag1=val1,tls_cipher=bar,tls_version=foo count=1) [\d]{19}`, - `(traefik\.entrypoint\.request\.duration(?:,code=[\d]{3})?,entrypoint=test,tag1=val1 p50=10000,p90=10000,p95=10000,p99=10000) [\d]{19}`, - `(traefik\.entrypoint\.connections\.open,entrypoint=test,tag1=val1 value=1) [\d]{19}`, - `(traefik\.entrypoint\.requests\.bytes\.total,code=200,entrypoint=test,method=GET,tag1=val1 count=1) [\d]{19}`, - `(traefik\.entrypoint\.responses\.bytes\.total,code=200,entrypoint=test,method=GET,tag1=val1 count=1) [\d]{19}`, - } - - msgEntrypoint := udp.ReceiveString(t, func() { - influxDBRegistry.EntryPointReqsCounter().With("entrypoint", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.EntryPointReqsTLSCounter().With("entrypoint", "test", "tls_version", "foo", "tls_cipher", "bar").Add(1) - influxDBRegistry.EntryPointReqDurationHistogram().With("entrypoint", "test").Observe(10000) - influxDBRegistry.EntryPointOpenConnsGauge().With("entrypoint", "test").Set(1) - influxDBRegistry.EntryPointReqsBytesCounter().With("entrypoint", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.EntryPointRespsBytesCounter().With("entrypoint", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - }) - - assertMessage(t, msgEntrypoint, expectedEntrypoint) - - expectedRouter := []string{ - `(traefik\.router\.requests\.total,code=200,method=GET,router=demo,service=test,tag1=val1 count=1) [\d]{19}`, - `(traefik\.router\.requests\.total,code=404,method=GET,router=demo,service=test,tag1=val1 count=1) [\d]{19}`, - `(traefik\.router\.requests\.tls\.total,router=demo,service=test,tag1=val1,tls_cipher=bar,tls_version=foo count=1) [\d]{19}`, - `(traefik\.router\.request\.duration,code=200,router=demo,service=test,tag1=val1 p50=10000,p90=10000,p95=10000,p99=10000) [\d]{19}`, - `(traefik\.router\.connections\.open,router=demo,service=test,tag1=val1 value=1) [\d]{19}`, - `(traefik\.router\.requests\.bytes\.total,code=200,method=GET,router=demo,service=test,tag1=val1 count=1) [\d]{19}`, - `(traefik\.router\.responses\.bytes\.total,code=200,method=GET,router=demo,service=test,tag1=val1 count=1) [\d]{19}`, - } - - msgRouter := udp.ReceiveString(t, func() { - influxDBRegistry.RouterReqsCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusNotFound), "method", http.MethodGet).Add(1) - influxDBRegistry.RouterReqsCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.RouterReqsTLSCounter().With("router", "demo", "service", "test", "tls_version", "foo", "tls_cipher", "bar").Add(1) - influxDBRegistry.RouterReqDurationHistogram().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK)).Observe(10000) - influxDBRegistry.RouterOpenConnsGauge().With("router", "demo", "service", "test").Set(1) - influxDBRegistry.RouterReqsBytesCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.RouterRespsBytesCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - }) - - assertMessage(t, msgRouter, expectedRouter) - - expectedService := []string{ - `(traefik\.service\.requests\.total,code=200,method=GET,service=test,tag1=val1 count=1) [\d]{19}`, - `(traefik\.service\.requests\.total,code=404,method=GET,service=test,tag1=val1 count=1) [\d]{19}`, - `(traefik\.service\.requests\.tls\.total,service=test,tag1=val1,tls_cipher=bar,tls_version=foo count=1) [\d]{19}`, - `(traefik\.service\.request\.duration,code=200,service=test,tag1=val1 p50=10000,p90=10000,p95=10000,p99=10000) [\d]{19}`, - `(traefik\.service\.retries\.total(?:,code=[\d]{3},method=GET)?,service=test,tag1=val1 count=2) [\d]{19}`, - `(traefik\.service\.server\.up,service=test,tag1=val1,url=http://127.0.0.1 value=1) [\d]{19}`, - `(traefik\.service\.connections\.open,service=test,tag1=val1 value=1) [\d]{19}`, - `(traefik\.service\.requests\.bytes\.total,code=200,method=GET,service=test,tag1=val1 count=1) [\d]{19}`, - `(traefik\.service\.responses\.bytes\.total,code=200,method=GET,service=test,tag1=val1 count=1) [\d]{19}`, - } - - msgService := udp.ReceiveString(t, func() { - influxDBRegistry.ServiceReqsCounter().With("service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.ServiceReqsCounter().With("service", "test", "code", strconv.Itoa(http.StatusNotFound), "method", http.MethodGet).Add(1) - influxDBRegistry.ServiceReqsTLSCounter().With("service", "test", "tls_version", "foo", "tls_cipher", "bar").Add(1) - influxDBRegistry.ServiceReqDurationHistogram().With("service", "test", "code", strconv.Itoa(http.StatusOK)).Observe(10000) - influxDBRegistry.ServiceOpenConnsGauge().With("service", "test").Set(1) - influxDBRegistry.ServiceRetriesCounter().With("service", "test").Add(1) - influxDBRegistry.ServiceRetriesCounter().With("service", "test").Add(1) - influxDBRegistry.ServiceServerUpGauge().With("service", "test", "url", "http://127.0.0.1").Set(1) - influxDBRegistry.ServiceReqsBytesCounter().With("service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.ServiceRespsBytesCounter().With("service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - }) - - assertMessage(t, msgService, expectedService) -} - -func TestInfluxDBHTTP(t *testing.T) { - c := make(chan *string) - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - body, err := io.ReadAll(r.Body) - require.NoError(t, err) - - bodyStr := string(body) - c <- &bodyStr - _, _ = fmt.Fprintln(w, "ok") - })) - defer ts.Close() - - influxDBClient = nil - influxDBRegistry := RegisterInfluxDB(context.Background(), - &types.InfluxDB{ - Address: ts.URL, - Protocol: "http", - PushInterval: ptypes.Duration(10 * time.Millisecond), - Database: "test", - RetentionPolicy: "autogen", - AddEntryPointsLabels: true, - AddServicesLabels: true, - AddRoutersLabels: true, - }) - defer StopInfluxDB() - - if !influxDBRegistry.IsEpEnabled() || !influxDBRegistry.IsRouterEnabled() || !influxDBRegistry.IsSvcEnabled() { - t.Fatalf("InfluxDB registry must be epEnabled") - } - - expectedServer := []string{ - `(traefik\.config\.reload\.total count=1) [\d]{19}`, - `(traefik\.config\.reload\.total\.failure count=1) [\d]{19}`, - `(traefik\.config\.reload\.lastSuccessTimestamp value=1) [\d]{19}`, - `(traefik\.config\.reload\.lastFailureTimestamp value=1) [\d]{19}`, - } - - influxDBRegistry.ConfigReloadsCounter().Add(1) - influxDBRegistry.ConfigReloadsFailureCounter().Add(1) - influxDBRegistry.LastConfigReloadSuccessGauge().Set(1) - influxDBRegistry.LastConfigReloadFailureGauge().Set(1) - msgServer := <-c - - assertMessage(t, *msgServer, expectedServer) - - expectedTLS := []string{ - `(traefik\.tls\.certs\.notAfterTimestamp,key=value value=1) [\d]{19}`, - } - - influxDBRegistry.TLSCertsNotAfterTimestampGauge().With("key", "value").Set(1) - msgTLS := <-c - - assertMessage(t, *msgTLS, expectedTLS) - - expectedEntrypoint := []string{ - `(traefik\.entrypoint\.requests\.total,code=200,entrypoint=test,method=GET count=1) [\d]{19}`, - `(traefik\.entrypoint\.requests\.tls\.total,entrypoint=test,tls_cipher=bar,tls_version=foo count=1) [\d]{19}`, - `(traefik\.entrypoint\.request\.duration(?:,code=[\d]{3})?,entrypoint=test p50=10000,p90=10000,p95=10000,p99=10000) [\d]{19}`, - `(traefik\.entrypoint\.connections\.open,entrypoint=test value=1) [\d]{19}`, - `(traefik\.entrypoint\.requests\.bytes\.total,code=200,entrypoint=test,method=GET count=1) [\d]{19}`, - `(traefik\.entrypoint\.responses\.bytes\.total,code=200,entrypoint=test,method=GET count=1) [\d]{19}`, - } - - influxDBRegistry.EntryPointReqsCounter().With("entrypoint", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.EntryPointReqsTLSCounter().With("entrypoint", "test", "tls_version", "foo", "tls_cipher", "bar").Add(1) - influxDBRegistry.EntryPointReqDurationHistogram().With("entrypoint", "test").Observe(10000) - influxDBRegistry.EntryPointOpenConnsGauge().With("entrypoint", "test").Set(1) - influxDBRegistry.EntryPointReqsBytesCounter().With("entrypoint", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.EntryPointRespsBytesCounter().With("entrypoint", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - msgEntrypoint := <-c - - assertMessage(t, *msgEntrypoint, expectedEntrypoint) - - expectedRouter := []string{ - `(traefik\.router\.requests\.total,code=200,method=GET,router=demo,service=test count=1) [\d]{19}`, - `(traefik\.router\.requests\.total,code=404,method=GET,router=demo,service=test count=1) [\d]{19}`, - `(traefik\.router\.requests\.tls\.total,router=demo,service=test,tls_cipher=bar,tls_version=foo count=1) [\d]{19}`, - `(traefik\.router\.request\.duration,code=200,router=demo,service=test p50=10000,p90=10000,p95=10000,p99=10000) [\d]{19}`, - `(traefik\.router\.connections\.open,router=demo,service=test value=1) [\d]{19}`, - `(traefik\.router\.requests\.bytes\.total,code=200,method=GET,router=demo,service=test count=1) [\d]{19}`, - `(traefik\.router\.responses\.bytes\.total,code=200,method=GET,router=demo,service=test count=1) [\d]{19}`, - } - - influxDBRegistry.RouterReqsCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusNotFound), "method", http.MethodGet).Add(1) - influxDBRegistry.RouterReqsCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.RouterReqsTLSCounter().With("router", "demo", "service", "test", "tls_version", "foo", "tls_cipher", "bar").Add(1) - influxDBRegistry.RouterReqDurationHistogram().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK)).Observe(10000) - influxDBRegistry.RouterOpenConnsGauge().With("router", "demo", "service", "test").Set(1) - influxDBRegistry.RouterReqsBytesCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.RouterRespsBytesCounter().With("router", "demo", "service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - msgRouter := <-c - - assertMessage(t, *msgRouter, expectedRouter) - - expectedService := []string{ - `(traefik\.service\.requests\.total,code=200,method=GET,service=test count=1) [\d]{19}`, - `(traefik\.service\.requests\.total,code=404,method=GET,service=test count=1) [\d]{19}`, - `(traefik\.service\.requests\.tls\.total,service=test,tls_cipher=bar,tls_version=foo count=1) [\d]{19}`, - `(traefik\.service\.request\.duration,code=200,service=test p50=10000,p90=10000,p95=10000,p99=10000) [\d]{19}`, - `(traefik\.service\.retries\.total(?:,code=[\d]{3},method=GET)?,service=test count=2) [\d]{19}`, - `(traefik\.service\.server\.up,service=test,url=http://127.0.0.1 value=1) [\d]{19}`, - `(traefik\.service\.connections\.open,service=test value=1) [\d]{19}`, - `(traefik\.service\.requests\.bytes\.total,code=200,method=GET,service=test count=1) [\d]{19}`, - `(traefik\.service\.responses\.bytes\.total,code=200,method=GET,service=test count=1) [\d]{19}`, - } - - influxDBRegistry.ServiceReqsCounter().With("service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.ServiceReqsCounter().With("service", "test", "code", strconv.Itoa(http.StatusNotFound), "method", http.MethodGet).Add(1) - influxDBRegistry.ServiceReqsTLSCounter().With("service", "test", "tls_version", "foo", "tls_cipher", "bar").Add(1) - influxDBRegistry.ServiceReqDurationHistogram().With("service", "test", "code", strconv.Itoa(http.StatusOK)).Observe(10000) - influxDBRegistry.ServiceOpenConnsGauge().With("service", "test").Set(1) - influxDBRegistry.ServiceRetriesCounter().With("service", "test").Add(1) - influxDBRegistry.ServiceRetriesCounter().With("service", "test").Add(1) - influxDBRegistry.ServiceServerUpGauge().With("service", "test", "url", "http://127.0.0.1").Set(1) - influxDBRegistry.ServiceReqsBytesCounter().With("service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - influxDBRegistry.ServiceRespsBytesCounter().With("service", "test", "code", strconv.Itoa(http.StatusOK), "method", http.MethodGet).Add(1) - msgService := <-c - - assertMessage(t, *msgService, expectedService) -} - -func assertMessage(t *testing.T, msg string, patterns []string) { - t.Helper() - for _, pattern := range patterns { - re := regexp.MustCompile(pattern) - match := re.FindStringSubmatch(msg) - if len(match) != 2 { - t.Errorf("Got %q %v, want %q", msg, match, pattern) - } - } -} diff --git a/pkg/redactor/redactor_config_test.go b/pkg/redactor/redactor_config_test.go index 468b34251..49a4a292d 100644 --- a/pkg/redactor/redactor_config_test.go +++ b/pkg/redactor/redactor_config_test.go @@ -784,17 +784,6 @@ func TestDo_staticConfiguration(t *testing.T) { AddServicesLabels: true, Prefix: "MyPrefix", }, - InfluxDB: &types.InfluxDB{ - Address: "localhost:8183", - Protocol: "http", - PushInterval: 42, - Database: "myDB", - RetentionPolicy: "12", - Username: "a", - Password: "aaaa", - AddEntryPointsLabels: true, - AddServicesLabels: true, - }, } config.Ping = &ping.Handler{ diff --git a/pkg/redactor/testdata/anonymized-static-config.json b/pkg/redactor/testdata/anonymized-static-config.json index 35a447ef4..14d587559 100644 --- a/pkg/redactor/testdata/anonymized-static-config.json +++ b/pkg/redactor/testdata/anonymized-static-config.json @@ -284,17 +284,6 @@ "addEntryPointsLabels": true, "addServicesLabels": true, "prefix": "MyPrefix" - }, - "influxDB": { - "address": "xxxx", - "protocol": "xxxx", - "pushInterval": "42ns", - "database": "myDB", - "retentionPolicy": "12", - "username": "xxxx", - "password": "xxxx", - "addEntryPointsLabels": true, - "addServicesLabels": true } }, "ping": { diff --git a/pkg/server/server.go b/pkg/server/server.go index 421437a38..962cf6c28 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -111,7 +111,6 @@ func (s *Server) Close() { func stopMetricsClients() { metrics.StopDatadog() metrics.StopStatsd() - metrics.StopInfluxDB() metrics.StopInfluxDB2() metrics.StopOpenTelemetry() } diff --git a/pkg/types/metrics.go b/pkg/types/metrics.go index ddcf71d96..775dc7a16 100644 --- a/pkg/types/metrics.go +++ b/pkg/types/metrics.go @@ -13,7 +13,6 @@ type Metrics struct { Prometheus *Prometheus `description:"Prometheus metrics exporter type." json:"prometheus,omitempty" toml:"prometheus,omitempty" yaml:"prometheus,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true"` Datadog *Datadog `description:"Datadog metrics exporter type." json:"datadog,omitempty" toml:"datadog,omitempty" yaml:"datadog,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true"` StatsD *Statsd `description:"StatsD metrics exporter type." json:"statsD,omitempty" toml:"statsD,omitempty" yaml:"statsD,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true"` - InfluxDB *InfluxDB `description:"InfluxDB metrics exporter type." json:"influxDB,omitempty" toml:"influxDB,omitempty" yaml:"influxDB,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true"` InfluxDB2 *InfluxDB2 `description:"InfluxDB v2 metrics exporter type." json:"influxDB2,omitempty" toml:"influxDB2,omitempty" yaml:"influxDB2,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true"` OpenTelemetry *OpenTelemetry `description:"OpenTelemetry metrics exporter type." json:"openTelemetry,omitempty" toml:"openTelemetry,omitempty" yaml:"openTelemetry,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true"` } @@ -83,30 +82,6 @@ func (s *Statsd) SetDefaults() { s.Prefix = "traefik" } -// InfluxDB contains address, login and metrics pushing interval configuration. -type InfluxDB struct { - Address string `description:"InfluxDB address." json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty"` - Protocol string `description:"InfluxDB address protocol (udp or http)." json:"protocol,omitempty" toml:"protocol,omitempty" yaml:"protocol,omitempty"` - PushInterval types.Duration `description:"InfluxDB push interval." json:"pushInterval,omitempty" toml:"pushInterval,omitempty" yaml:"pushInterval,omitempty" export:"true"` - Database string `description:"InfluxDB database used when protocol is http." json:"database,omitempty" toml:"database,omitempty" yaml:"database,omitempty" export:"true"` - RetentionPolicy string `description:"InfluxDB retention policy used when protocol is http." json:"retentionPolicy,omitempty" toml:"retentionPolicy,omitempty" yaml:"retentionPolicy,omitempty" export:"true"` - Username string `description:"InfluxDB username (only with http)." json:"username,omitempty" toml:"username,omitempty" yaml:"username,omitempty" loggable:"false"` - Password string `description:"InfluxDB password (only with http)." json:"password,omitempty" toml:"password,omitempty" yaml:"password,omitempty" loggable:"false"` - AddEntryPointsLabels bool `description:"Enable metrics on entry points." json:"addEntryPointsLabels,omitempty" toml:"addEntryPointsLabels,omitempty" yaml:"addEntryPointsLabels,omitempty" export:"true"` - AddRoutersLabels bool `description:"Enable metrics on routers." json:"addRoutersLabels,omitempty" toml:"addRoutersLabels,omitempty" yaml:"addRoutersLabels,omitempty" export:"true"` - AddServicesLabels bool `description:"Enable metrics on services." json:"addServicesLabels,omitempty" toml:"addServicesLabels,omitempty" yaml:"addServicesLabels,omitempty" export:"true"` - AdditionalLabels map[string]string `description:"Additional labels (influxdb tags) on all metrics" json:"additionalLabels,omitempty" toml:"additionalLabels,omitempty" yaml:"additionalLabels,omitempty" export:"true"` -} - -// SetDefaults sets the default values. -func (i *InfluxDB) SetDefaults() { - i.Address = "localhost:8089" - i.Protocol = "udp" - i.PushInterval = types.Duration(10 * time.Second) - i.AddEntryPointsLabels = true - i.AddServicesLabels = true -} - // InfluxDB2 contains address, token and metrics pushing interval configuration. type InfluxDB2 struct { Address string `description:"InfluxDB v2 address." json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty"`