2018-11-14 09:18:03 +00:00
package types
import (
2021-03-23 16:48:04 +00:00
"net"
"os"
2019-06-17 09:48:05 +00:00
"time"
2020-08-17 16:04:03 +00:00
"github.com/traefik/paerser/types"
2018-11-14 09:18:03 +00:00
)
2019-07-18 19:36:05 +00:00
// Metrics provides options to expose and send Traefik metrics to different third party monitoring systems.
2018-11-14 09:18:03 +00:00
type Metrics struct {
2024-01-30 15:28:05 +00:00
AddInternals bool ` description:"Enables metrics for internal services (ping, dashboard, etc...)." json:"addInternals,omitempty" toml:"addInternals,omitempty" yaml:"addInternals,omitempty" export:"true" `
2024-02-06 09:04:05 +00:00
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" `
InfluxDB2 * InfluxDB2 ` description:"InfluxDB v2 metrics exporter type." json:"influxDB2,omitempty" toml:"influxDB2,omitempty" yaml:"influxDB2,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true" `
OTLP * OTLP ` description:"OpenTelemetry metrics exporter type." json:"otlp,omitempty" toml:"otlp,omitempty" yaml:"otlp,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true" `
2018-11-14 09:18:03 +00:00
}
2019-07-18 19:36:05 +00:00
// Prometheus can contain specific configuration used by the Prometheus Metrics exporter.
2018-11-14 09:18:03 +00:00
type Prometheus struct {
2023-03-20 17:06:07 +00:00
Buckets [ ] float64 ` description:"Buckets for latency metrics." json:"buckets,omitempty" toml:"buckets,omitempty" yaml:"buckets,omitempty" export:"true" `
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" `
EntryPoint string ` description:"EntryPoint" json:"entryPoint,omitempty" toml:"entryPoint,omitempty" yaml:"entryPoint,omitempty" export:"true" `
ManualRouting bool ` description:"Manual routing" json:"manualRouting,omitempty" toml:"manualRouting,omitempty" yaml:"manualRouting,omitempty" export:"true" `
HeaderLabels map [ string ] string ` description:"Defines the extra labels for the requests_total metrics, and for each of them, the request header containing the value for this label." json:"headerLabels,omitempty" toml:"headerLabels,omitempty" yaml:"headerLabels,omitempty" export:"true" `
2019-06-17 09:48:05 +00:00
}
// SetDefaults sets the default values.
func ( p * Prometheus ) SetDefaults ( ) {
p . Buckets = [ ] float64 { 0.1 , 0.3 , 1.2 , 5 }
2019-07-18 19:36:05 +00:00
p . AddEntryPointsLabels = true
p . AddServicesLabels = true
2019-09-06 13:08:04 +00:00
p . EntryPoint = "traefik"
2018-11-14 09:18:03 +00:00
}
2019-09-02 10:18:04 +00:00
// Datadog contains address and metrics pushing interval configuration.
type Datadog struct {
2020-08-17 16:04:03 +00:00
Address string ` description:"Datadog's address." json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty" `
PushInterval types . Duration ` description:"Datadog push interval." json:"pushInterval,omitempty" toml:"pushInterval,omitempty" yaml:"pushInterval,omitempty" export:"true" `
AddEntryPointsLabels bool ` description:"Enable metrics on entry points." json:"addEntryPointsLabels,omitempty" toml:"addEntryPointsLabels,omitempty" yaml:"addEntryPointsLabels,omitempty" export:"true" `
2021-04-30 08:22:04 +00:00
AddRoutersLabels bool ` description:"Enable metrics on routers." json:"addRoutersLabels,omitempty" toml:"addRoutersLabels,omitempty" yaml:"addRoutersLabels,omitempty" export:"true" `
2020-08-17 16:04:03 +00:00
AddServicesLabels bool ` description:"Enable metrics on services." json:"addServicesLabels,omitempty" toml:"addServicesLabels,omitempty" yaml:"addServicesLabels,omitempty" export:"true" `
2021-10-06 15:34:07 +00:00
Prefix string ` description:"Prefix to use for metrics collection." json:"prefix,omitempty" toml:"prefix,omitempty" yaml:"prefix,omitempty" export:"true" `
2019-06-17 09:48:05 +00:00
}
// SetDefaults sets the default values.
2019-09-02 10:18:04 +00:00
func ( d * Datadog ) SetDefaults ( ) {
2021-03-23 16:48:04 +00:00
host , ok := os . LookupEnv ( "DD_AGENT_HOST" )
if ! ok {
host = "localhost"
}
port , ok := os . LookupEnv ( "DD_DOGSTATSD_PORT" )
if ! ok {
port = "8125"
}
d . Address = net . JoinHostPort ( host , port )
2020-08-17 16:04:03 +00:00
d . PushInterval = types . Duration ( 10 * time . Second )
2019-07-18 19:36:05 +00:00
d . AddEntryPointsLabels = true
d . AddServicesLabels = true
2021-10-06 15:34:07 +00:00
d . Prefix = "traefik"
2018-11-14 09:18:03 +00:00
}
2019-07-18 19:36:05 +00:00
// Statsd contains address and metrics pushing interval configuration.
2018-11-14 09:18:03 +00:00
type Statsd struct {
2020-08-17 16:04:03 +00:00
Address string ` description:"StatsD address." json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty" `
PushInterval types . Duration ` description:"StatsD push interval." json:"pushInterval,omitempty" toml:"pushInterval,omitempty" yaml:"pushInterval,omitempty" export:"true" `
AddEntryPointsLabels bool ` description:"Enable metrics on entry points." json:"addEntryPointsLabels,omitempty" toml:"addEntryPointsLabels,omitempty" yaml:"addEntryPointsLabels,omitempty" export:"true" `
2021-04-30 08:22:04 +00:00
AddRoutersLabels bool ` description:"Enable metrics on routers." json:"addRoutersLabels,omitempty" toml:"addRoutersLabels,omitempty" yaml:"addRoutersLabels,omitempty" export:"true" `
2020-08-17 16:04:03 +00:00
AddServicesLabels bool ` description:"Enable metrics on services." json:"addServicesLabels,omitempty" toml:"addServicesLabels,omitempty" yaml:"addServicesLabels,omitempty" export:"true" `
Prefix string ` description:"Prefix to use for metrics collection." json:"prefix,omitempty" toml:"prefix,omitempty" yaml:"prefix,omitempty" export:"true" `
2019-06-17 09:48:05 +00:00
}
// SetDefaults sets the default values.
func ( s * Statsd ) SetDefaults ( ) {
s . Address = "localhost:8125"
2020-08-17 16:04:03 +00:00
s . PushInterval = types . Duration ( 10 * time . Second )
2019-07-18 19:36:05 +00:00
s . AddEntryPointsLabels = true
s . AddServicesLabels = true
2019-11-12 17:18:04 +00:00
s . Prefix = "traefik"
2018-11-14 09:18:03 +00:00
}
2022-02-09 14:32:12 +00:00
// 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" `
Token string ` description:"InfluxDB v2 access token." json:"token,omitempty" toml:"token,omitempty" yaml:"token,omitempty" loggable:"false" `
PushInterval types . Duration ` description:"InfluxDB v2 push interval." json:"pushInterval,omitempty" toml:"pushInterval,omitempty" yaml:"pushInterval,omitempty" export:"true" `
Org string ` description:"InfluxDB v2 org ID." json:"org,omitempty" toml:"org,omitempty" yaml:"org,omitempty" export:"true" `
Bucket string ` description:"InfluxDB v2 bucket ID." json:"bucket,omitempty" toml:"bucket,omitempty" yaml:"bucket,omitempty" export:"true" `
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" `
2022-02-21 13:05:28 +00:00
AdditionalLabels map [ string ] string ` description:"Additional labels (influxdb tags) on all metrics" json:"additionalLabels,omitempty" toml:"additionalLabels,omitempty" yaml:"additionalLabels,omitempty" export:"true" `
2022-02-09 14:32:12 +00:00
}
// SetDefaults sets the default values.
func ( i * InfluxDB2 ) SetDefaults ( ) {
i . Address = "http://localhost:8086"
i . PushInterval = types . Duration ( 10 * time . Second )
i . AddEntryPointsLabels = true
i . AddServicesLabels = true
}
2024-02-06 09:04:05 +00:00
// OTLP contains specific configuration used by the OpenTelemetry Metrics exporter.
type OTLP struct {
2024-05-21 08:42:04 +00:00
GRPC * OtelGRPC ` description:"gRPC configuration for the OpenTelemetry collector." json:"grpc,omitempty" toml:"grpc,omitempty" yaml:"grpc,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true" `
HTTP * OtelHTTP ` description:"HTTP configuration for the OpenTelemetry collector." json:"http,omitempty" toml:"http,omitempty" yaml:"http,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true" `
2022-11-29 14:34:05 +00:00
2024-02-06 09:04:05 +00:00
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" `
ExplicitBoundaries [ ] float64 ` description:"Boundaries for latency metrics." json:"explicitBoundaries,omitempty" toml:"explicitBoundaries,omitempty" yaml:"explicitBoundaries,omitempty" export:"true" `
PushInterval types . Duration ` description:"Period between calls to collect a checkpoint." json:"pushInterval,omitempty" toml:"pushInterval,omitempty" yaml:"pushInterval,omitempty" export:"true" `
2022-11-29 14:34:05 +00:00
}
// SetDefaults sets the default values.
2024-02-06 09:04:05 +00:00
func ( o * OTLP ) SetDefaults ( ) {
o . HTTP = & OtelHTTP { }
o . HTTP . SetDefaults ( )
2022-11-29 14:34:05 +00:00
o . AddEntryPointsLabels = true
o . AddServicesLabels = true
2024-03-12 08:48:04 +00:00
o . ExplicitBoundaries = [ ] float64 { .005 , .01 , .025 , .05 , .075 , .1 , .25 , .5 , .75 , 1 , 2.5 , 5 , 7.5 , 10 }
2022-11-29 14:34:05 +00:00
o . PushInterval = types . Duration ( 10 * time . Second )
}
2019-07-18 19:36:05 +00:00
// Statistics provides options for monitoring request and response stats.
2019-06-17 09:48:05 +00:00
type Statistics struct {
2019-07-01 09:30:05 +00:00
RecentErrors int ` description:"Number of recent errors logged." json:"recentErrors,omitempty" toml:"recentErrors,omitempty" yaml:"recentErrors,omitempty" export:"true" `
2018-11-14 09:18:03 +00:00
}
2019-06-17 09:48:05 +00:00
// SetDefaults sets the default values.
func ( s * Statistics ) SetDefaults ( ) {
s . RecentErrors = 10
2018-11-14 09:18:03 +00:00
}
2024-02-06 09:04:05 +00:00
// OtelGRPC provides configuration settings for the gRPC open-telemetry.
type OtelGRPC struct {
Endpoint string ` description:"Sets the gRPC endpoint (host:port) of the collector." json:"endpoint,omitempty" toml:"endpoint,omitempty" yaml:"endpoint,omitempty" `
Insecure bool ` description:"Disables client transport security for the exporter." json:"insecure,omitempty" toml:"insecure,omitempty" yaml:"insecure,omitempty" export:"true" `
TLS * ClientTLS ` description:"Defines client transport security parameters." json:"tls,omitempty" toml:"tls,omitempty" yaml:"tls,omitempty" export:"true" `
Headers map [ string ] string ` description:"Headers sent with payload." json:"headers,omitempty" toml:"headers,omitempty" yaml:"headers,omitempty" `
}
// SetDefaults sets the default values.
func ( c * OtelGRPC ) SetDefaults ( ) {
c . Endpoint = "localhost:4317"
}
// OtelHTTP provides configuration settings for the HTTP open-telemetry.
type OtelHTTP struct {
Endpoint string ` description:"Sets the HTTP endpoint (scheme://host:port/path) of the collector." json:"endpoint,omitempty" toml:"endpoint,omitempty" yaml:"endpoint,omitempty" `
TLS * ClientTLS ` description:"Defines client transport security parameters." json:"tls,omitempty" toml:"tls,omitempty" yaml:"tls,omitempty" export:"true" `
Headers map [ string ] string ` description:"Headers sent with payload." json:"headers,omitempty" toml:"headers,omitempty" yaml:"headers,omitempty" `
}
// SetDefaults sets the default values.
func ( c * OtelHTTP ) SetDefaults ( ) {
c . Endpoint = "https://localhost:4318"
}