mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-29 18:36:30 +02:00
config: set default tracing sample rate to 1.0 (#5422)
The previous default sample rate of 0.0001 is very low, so traces are unlikely to be visible after enabling them until many thousands of requests have been sent. This could be confusing to users.
This commit is contained in:
parent
c571769adc
commit
6502d68162
5 changed files with 25 additions and 18 deletions
|
@ -187,6 +187,10 @@ func (b *Builder) buildMainHTTPConnectionManagerFilter(
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sampleRate := 1.0
|
||||||
|
if cfg.Options.TracingSampleRate != nil {
|
||||||
|
sampleRate = *cfg.Options.TracingSampleRate
|
||||||
|
}
|
||||||
mgr := &envoy_extensions_filters_network_http_connection_manager.HttpConnectionManager{
|
mgr := &envoy_extensions_filters_network_http_connection_manager.HttpConnectionManager{
|
||||||
AlwaysSetRequestIdInResponse: true,
|
AlwaysSetRequestIdInResponse: true,
|
||||||
StatPrefix: "ingress",
|
StatPrefix: "ingress",
|
||||||
|
@ -199,7 +203,7 @@ func (b *Builder) buildMainHTTPConnectionManagerFilter(
|
||||||
HttpProtocolOptions: http1ProtocolOptions,
|
HttpProtocolOptions: http1ProtocolOptions,
|
||||||
RequestTimeout: durationpb.New(cfg.Options.ReadTimeout),
|
RequestTimeout: durationpb.New(cfg.Options.ReadTimeout),
|
||||||
Tracing: &envoy_extensions_filters_network_http_connection_manager.HttpConnectionManager_Tracing{
|
Tracing: &envoy_extensions_filters_network_http_connection_manager.HttpConnectionManager_Tracing{
|
||||||
RandomSampling: &envoy_type_v3.Percent{Value: cfg.Options.TracingSampleRate * 100},
|
RandomSampling: &envoy_type_v3.Percent{Value: max(0.0, min(1.0, sampleRate)) * 100},
|
||||||
Provider: tracingProvider,
|
Provider: tracingProvider,
|
||||||
},
|
},
|
||||||
// See https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#x-forwarded-for
|
// See https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#x-forwarded-for
|
||||||
|
|
|
@ -52,7 +52,9 @@
|
||||||
},
|
},
|
||||||
"timeout": "10s"
|
"timeout": "10s"
|
||||||
},
|
},
|
||||||
"metadataContextNamespaces": ["com.pomerium.client-certificate-info"],
|
"metadataContextNamespaces": [
|
||||||
|
"com.pomerium.client-certificate-info"
|
||||||
|
],
|
||||||
"statusOnError": {
|
"statusOnError": {
|
||||||
"code": "InternalServerError"
|
"code": "InternalServerError"
|
||||||
},
|
},
|
||||||
|
@ -180,7 +182,7 @@
|
||||||
"statPrefix": "ingress",
|
"statPrefix": "ingress",
|
||||||
"tracing": {
|
"tracing": {
|
||||||
"randomSampling": {
|
"randomSampling": {
|
||||||
"value": 0.01
|
"value": 100
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"useRemoteAddress": true,
|
"useRemoteAddress": true,
|
||||||
|
|
|
@ -211,8 +211,8 @@ type Options struct {
|
||||||
MetricsClientCAFile string `mapstructure:"metrics_client_ca_file" yaml:"metrics_client_ca_file,omitempty"`
|
MetricsClientCAFile string `mapstructure:"metrics_client_ca_file" yaml:"metrics_client_ca_file,omitempty"`
|
||||||
|
|
||||||
// Tracing shared settings
|
// Tracing shared settings
|
||||||
TracingProvider string `mapstructure:"tracing_provider" yaml:"tracing_provider,omitempty"`
|
TracingProvider string `mapstructure:"tracing_provider" yaml:"tracing_provider,omitempty"`
|
||||||
TracingSampleRate float64 `mapstructure:"tracing_sample_rate" yaml:"tracing_sample_rate,omitempty"`
|
TracingSampleRate *float64 `mapstructure:"tracing_sample_rate" yaml:"tracing_sample_rate,omitempty"`
|
||||||
|
|
||||||
// Datadog tracing address
|
// Datadog tracing address
|
||||||
TracingDatadogAddress string `mapstructure:"tracing_datadog_address" yaml:"tracing_datadog_address,omitempty"`
|
TracingDatadogAddress string `mapstructure:"tracing_datadog_address" yaml:"tracing_datadog_address,omitempty"`
|
||||||
|
@ -317,7 +317,6 @@ var defaultOptions = Options{
|
||||||
GRPCAddr: ":443",
|
GRPCAddr: ":443",
|
||||||
GRPCClientTimeout: 10 * time.Second, // Try to withstand transient service failures for a single request
|
GRPCClientTimeout: 10 * time.Second, // Try to withstand transient service failures for a single request
|
||||||
AuthenticateCallbackPath: "/oauth2/callback",
|
AuthenticateCallbackPath: "/oauth2/callback",
|
||||||
TracingSampleRate: 0.0001,
|
|
||||||
|
|
||||||
AutocertOptions: AutocertOptions{
|
AutocertOptions: AutocertOptions{
|
||||||
Folder: dataDir(),
|
Folder: dataDir(),
|
||||||
|
@ -1520,7 +1519,7 @@ func (o *Options) ApplySettings(ctx context.Context, certsIndex *cryptutil.Certi
|
||||||
setCertificate(&o.MetricsCertificate, &o.MetricsCertificateKey, settings.MetricsCertificate)
|
setCertificate(&o.MetricsCertificate, &o.MetricsCertificateKey, settings.MetricsCertificate)
|
||||||
set(&o.MetricsClientCA, settings.MetricsClientCa)
|
set(&o.MetricsClientCA, settings.MetricsClientCa)
|
||||||
set(&o.TracingProvider, settings.TracingProvider)
|
set(&o.TracingProvider, settings.TracingProvider)
|
||||||
set(&o.TracingSampleRate, settings.TracingSampleRate)
|
setOptional(&o.TracingSampleRate, settings.TracingSampleRate)
|
||||||
set(&o.TracingDatadogAddress, settings.TracingDatadogAddress)
|
set(&o.TracingDatadogAddress, settings.TracingDatadogAddress)
|
||||||
set(&o.TracingJaegerCollectorEndpoint, settings.TracingJaegerCollectorEndpoint)
|
set(&o.TracingJaegerCollectorEndpoint, settings.TracingJaegerCollectorEndpoint)
|
||||||
set(&o.TracingJaegerAgentEndpoint, settings.TracingJaegerAgentEndpoint)
|
set(&o.TracingJaegerAgentEndpoint, settings.TracingJaegerAgentEndpoint)
|
||||||
|
@ -1610,7 +1609,7 @@ func (o *Options) ToProto() *config.Config {
|
||||||
settings.MetricsCertificate = toCertificateOrFromFile(o.MetricsCertificate, o.MetricsCertificateKey, o.MetricsCertificateFile, o.MetricsCertificateKeyFile)
|
settings.MetricsCertificate = toCertificateOrFromFile(o.MetricsCertificate, o.MetricsCertificateKey, o.MetricsCertificateFile, o.MetricsCertificateKeyFile)
|
||||||
copySrcToOptionalDest(&settings.MetricsClientCa, valueOrFromFileBase64(o.MetricsClientCA, o.MetricsClientCAFile))
|
copySrcToOptionalDest(&settings.MetricsClientCa, valueOrFromFileBase64(o.MetricsClientCA, o.MetricsClientCAFile))
|
||||||
copySrcToOptionalDest(&settings.TracingProvider, &o.TracingProvider)
|
copySrcToOptionalDest(&settings.TracingProvider, &o.TracingProvider)
|
||||||
copySrcToOptionalDest(&settings.TracingSampleRate, &o.TracingSampleRate)
|
settings.TracingSampleRate = o.TracingSampleRate
|
||||||
copySrcToOptionalDest(&settings.TracingDatadogAddress, &o.TracingDatadogAddress)
|
copySrcToOptionalDest(&settings.TracingDatadogAddress, &o.TracingDatadogAddress)
|
||||||
copySrcToOptionalDest(&settings.TracingJaegerCollectorEndpoint, &o.TracingJaegerCollectorEndpoint)
|
copySrcToOptionalDest(&settings.TracingJaegerCollectorEndpoint, &o.TracingJaegerCollectorEndpoint)
|
||||||
copySrcToOptionalDest(&settings.TracingJaegerAgentEndpoint, &o.TracingJaegerAgentEndpoint)
|
copySrcToOptionalDest(&settings.TracingJaegerAgentEndpoint, &o.TracingJaegerAgentEndpoint)
|
||||||
|
|
|
@ -19,11 +19,15 @@ type TracingOptions = trace.TracingOptions
|
||||||
|
|
||||||
// NewTracingOptions builds a new TracingOptions from core Options
|
// NewTracingOptions builds a new TracingOptions from core Options
|
||||||
func NewTracingOptions(o *Options) (*TracingOptions, error) {
|
func NewTracingOptions(o *Options) (*TracingOptions, error) {
|
||||||
|
sampleRate := 1.0
|
||||||
|
if o.TracingSampleRate != nil {
|
||||||
|
sampleRate = *o.TracingSampleRate
|
||||||
|
}
|
||||||
tracingOpts := TracingOptions{
|
tracingOpts := TracingOptions{
|
||||||
Provider: o.TracingProvider,
|
Provider: o.TracingProvider,
|
||||||
Service: telemetry.ServiceName(o.Services),
|
Service: telemetry.ServiceName(o.Services),
|
||||||
JaegerAgentEndpoint: o.TracingJaegerAgentEndpoint,
|
JaegerAgentEndpoint: o.TracingJaegerAgentEndpoint,
|
||||||
SampleRate: o.TracingSampleRate,
|
SampleRate: sampleRate,
|
||||||
}
|
}
|
||||||
|
|
||||||
switch o.TracingProvider {
|
switch o.TracingProvider {
|
||||||
|
|
|
@ -25,13 +25,13 @@ func Test_NewTracingOptions(t *testing.T) {
|
||||||
{
|
{
|
||||||
"datadog_good",
|
"datadog_good",
|
||||||
&Options{TracingProvider: "datadog"},
|
&Options{TracingProvider: "datadog"},
|
||||||
&TracingOptions{Provider: "datadog", Service: "pomerium"},
|
&TracingOptions{Provider: "datadog", Service: "pomerium", SampleRate: 1},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"jaeger_good",
|
"jaeger_good",
|
||||||
&Options{TracingProvider: "jaeger", TracingJaegerAgentEndpoint: "foo", TracingJaegerCollectorEndpoint: "http://foo", Services: ServiceAll},
|
&Options{TracingProvider: "jaeger", TracingJaegerAgentEndpoint: "foo", TracingJaegerCollectorEndpoint: "http://foo", Services: ServiceAll},
|
||||||
&TracingOptions{Provider: "jaeger", JaegerAgentEndpoint: "foo", JaegerCollectorEndpoint: &url.URL{Scheme: "http", Host: "foo"}, Service: "pomerium"},
|
&TracingOptions{Provider: "jaeger", JaegerAgentEndpoint: "foo", JaegerCollectorEndpoint: &url.URL{Scheme: "http", Host: "foo"}, Service: "pomerium", SampleRate: 1},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -43,7 +43,7 @@ func Test_NewTracingOptions(t *testing.T) {
|
||||||
{
|
{
|
||||||
"zipkin_good",
|
"zipkin_good",
|
||||||
&Options{TracingProvider: "zipkin", ZipkinEndpoint: "https://foo/api/v1/spans", Services: ServiceAuthorize},
|
&Options{TracingProvider: "zipkin", ZipkinEndpoint: "https://foo/api/v1/spans", Services: ServiceAuthorize},
|
||||||
&TracingOptions{Provider: "zipkin", ZipkinEndpoint: &url.URL{Scheme: "https", Host: "foo", Path: "/api/v1/spans"}, Service: "pomerium-authorize"},
|
&TracingOptions{Provider: "zipkin", ZipkinEndpoint: &url.URL{Scheme: "https", Host: "foo", Path: "/api/v1/spans"}, Service: "pomerium-authorize", SampleRate: 1},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -118,9 +118,8 @@ func TestTraceManager(t *testing.T) {
|
||||||
defer srv2.Close()
|
defer srv2.Close()
|
||||||
|
|
||||||
src := NewStaticSource(&Config{Options: &Options{
|
src := NewStaticSource(&Config{Options: &Options{
|
||||||
TracingProvider: "zipkin",
|
TracingProvider: "zipkin",
|
||||||
ZipkinEndpoint: srv1.URL,
|
ZipkinEndpoint: srv1.URL,
|
||||||
TracingSampleRate: 1,
|
|
||||||
}})
|
}})
|
||||||
|
|
||||||
_ = NewTraceManager(ctx, src)
|
_ = NewTraceManager(ctx, src)
|
||||||
|
@ -129,9 +128,8 @@ func TestTraceManager(t *testing.T) {
|
||||||
span.End()
|
span.End()
|
||||||
|
|
||||||
src.SetConfig(ctx, &Config{Options: &Options{
|
src.SetConfig(ctx, &Config{Options: &Options{
|
||||||
TracingProvider: "zipkin",
|
TracingProvider: "zipkin",
|
||||||
ZipkinEndpoint: srv2.URL,
|
ZipkinEndpoint: srv2.URL,
|
||||||
TracingSampleRate: 1,
|
|
||||||
}})
|
}})
|
||||||
|
|
||||||
_, span = trace.StartSpan(ctx, "Example")
|
_, span = trace.StartSpan(ctx, "Example")
|
||||||
|
|
Loading…
Add table
Reference in a new issue