From beb5dea7ddb5dd86e9c48f8f5f983acba840af62 Mon Sep 17 00:00:00 2001 From: Paulin Todev Date: Tue, 1 Aug 2023 12:43:29 +0100 Subject: [PATCH 1/4] Fix a bug which prevented the `app_agent_receiver` integration from processing traces (#4655) * Save otel factories in traces instance * Try an http request periodically --- CHANGELOG.md | 7 + .../app_agent_receiver_test.go | 169 ++++++++++++++++++ pkg/traces/instance.go | 13 +- .../servicegraphprocessor/processor_test.go | 2 +- pkg/traces/traces_test.go | 2 +- .../traceutils/otel_meter_settings.go | 0 .../{internal => }/traceutils/server.go | 26 +-- 7 files changed, 198 insertions(+), 21 deletions(-) create mode 100644 pkg/integrations/v2/app_agent_receiver/app_agent_receiver_test.go rename pkg/traces/{internal => }/traceutils/otel_meter_settings.go (100%) rename pkg/traces/{internal => }/traceutils/server.go (90%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9747dc90869b..2275e792bc23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,13 @@ v0.35.2 (2023-07-27) ### Bugfixes +- Fix a bug which prevented the `app_agent_receiver` integration from processing traces. (@ptodev) + +v0.35.2 (2023-07-27) +-------------------- + +### Bugfixes + - Fix issue where the flow mode UI would show an empty page when navigating to an unhealthy `prometheus.operator` component or a healthy `prometheus.operator` component which discovered no custom resources. diff --git a/pkg/integrations/v2/app_agent_receiver/app_agent_receiver_test.go b/pkg/integrations/v2/app_agent_receiver/app_agent_receiver_test.go new file mode 100644 index 000000000000..46cfba937093 --- /dev/null +++ b/pkg/integrations/v2/app_agent_receiver/app_agent_receiver_test.go @@ -0,0 +1,169 @@ +package app_agent_receiver + +import ( + "bytes" + "context" + "fmt" + "io" + "net/http" + "strings" + "testing" + "time" + + "github.com/grafana/agent/pkg/integrations/v2" + "github.com/grafana/agent/pkg/server" + "github.com/grafana/agent/pkg/traces" + "github.com/grafana/agent/pkg/traces/traceutils" + "github.com/grafana/agent/pkg/util" + "github.com/phayes/freeport" + "github.com/prometheus/client_golang/prometheus" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/pdata/ptrace" + "gopkg.in/yaml.v2" +) + +func Test_ReceiveTracesAndRemoteWrite(t *testing.T) { + var err error + + // + // Prepare the traces instance + // + tracesCh := make(chan ptrace.Traces) + tracesAddr := traceutils.NewTestServer(t, func(t ptrace.Traces) { + tracesCh <- t + }) + + tracesCfgText := util.Untab(fmt.Sprintf(` +configs: +- name: TEST_TRACES + receivers: + jaeger: + protocols: + thrift_compact: + remote_write: + - endpoint: %s + insecure: true + batch: + timeout: 100ms + send_batch_size: 1 + `, tracesAddr)) + + var tracesCfg traces.Config + dec := yaml.NewDecoder(strings.NewReader(tracesCfgText)) + dec.SetStrict(true) + err = dec.Decode(&tracesCfg) + require.NoError(t, err) + + traces, err := traces.New(nil, nil, prometheus.NewRegistry(), tracesCfg, &server.HookLogger{}) + require.NoError(t, err) + t.Cleanup(traces.Stop) + + // + // Prepare the app_agent_receiver integration + // + integrationPort, err := freeport.GetFreePort() + require.NoError(t, err) + + var integrationCfg Config + cb := fmt.Sprintf(` +instance: TEST_APP_AGENT_RECEIVER +server: + cors_allowed_origins: + - '*' + host: '0.0.0.0' + max_allowed_payload_size: 5e+07 + port: %d + rate_limiting: + burstiness: 100 + enabled: true + rps: 100 +sourcemaps: + download: true +traces_instance: TEST_TRACES +`, integrationPort) + err = yaml.Unmarshal([]byte(cb), &integrationCfg) + require.NoError(t, err) + + logger := util.TestLogger(t) + globals := integrations.Globals{ + Tracing: traces, + } + + integration, err := integrationCfg.NewIntegration(logger, globals) + require.NoError(t, err) + + ctx := context.Background() + t.Cleanup(func() { ctx.Done() }) + // + // Start the app_agent_receiver integration + // + go func() { + err = integration.RunIntegration(ctx) + require.NoError(t, err) + }() + + // + // Send data to the integration's /collect endpoint + // + const PAYLOAD = ` +{ + "traces": { + "resourceSpans": [{ + "scopeSpans": [{ + "spans": [{ + "name": "TestSpan", + "attributes": [{ + "key": "foo", + "value": { "intValue": "11111" } + }, + { + "key": "boo", + "value": { "intValue": "22222" } + }, + { + "key": "user.email", + "value": { "stringValue": "user@email.com" } + }] + }] + }] + }] + }, + "logs": [], + "exceptions": [], + "measurements": [], + "meta": {} +} +` + + integrationURL := fmt.Sprintf("http://127.0.0.1:%d/collect", integrationPort) + + var httpResponse *http.Response + require.EventuallyWithT(t, func(c *assert.CollectT) { + req, err := http.NewRequest("POST", integrationURL, bytes.NewBuffer([]byte(PAYLOAD))) + assert.NoError(c, err) + + httpResponse, err = http.DefaultClient.Do(req) + assert.NoError(c, err) + }, 5*time.Second, 250*time.Millisecond) + + // + // Check that the data was received by the integration + // + resBody, err := io.ReadAll(httpResponse.Body) + require.NoError(t, err) + require.Equal(t, "ok", string(resBody[:])) + + require.Equal(t, http.StatusAccepted, httpResponse.StatusCode) + + // + // Check that the traces subsystem remote wrote the integration + // + select { + case <-time.After(10 * time.Second): + require.Fail(t, "failed to receive a span after 10 seconds") + case tr := <-tracesCh: + require.Equal(t, 1, tr.SpanCount()) + // Nothing to do, send succeeded. + } +} diff --git a/pkg/traces/instance.go b/pkg/traces/instance.go index ca0eb8cd0fe8..dbab2df3aa4b 100644 --- a/pkg/traces/instance.go +++ b/pkg/traces/instance.go @@ -23,8 +23,8 @@ import ( "github.com/grafana/agent/pkg/metrics/instance" "github.com/grafana/agent/pkg/traces/automaticloggingprocessor" "github.com/grafana/agent/pkg/traces/contextkeys" - "github.com/grafana/agent/pkg/traces/internal/traceutils" "github.com/grafana/agent/pkg/traces/servicegraphprocessor" + "github.com/grafana/agent/pkg/traces/traceutils" "github.com/grafana/agent/pkg/util" prom_client "github.com/prometheus/client_golang/prometheus" "go.opentelemetry.io/otel/trace" @@ -125,6 +125,7 @@ func (i *Instance) buildAndStartPipeline(ctx context.Context, cfg InstanceConfig if err != nil { return fmt.Errorf("failed to load tracing factories: %w", err) } + i.factories = factories appinfo := component.BuildInfo{ Command: "agent", @@ -160,11 +161,11 @@ func (i *Instance) buildAndStartPipeline(ctx context.Context, cfg InstanceConfig i.service, err = service.New(ctx, service.Settings{ BuildInfo: appinfo, - Receivers: receiver.NewBuilder(otelConfig.Receivers, factories.Receivers), - Processors: processor.NewBuilder(otelConfig.Processors, factories.Processors), - Exporters: otelexporter.NewBuilder(otelConfig.Exporters, factories.Exporters), - Connectors: connector.NewBuilder(otelConfig.Connectors, factories.Connectors), - Extensions: extension.NewBuilder(otelConfig.Extensions, factories.Extensions), + Receivers: receiver.NewBuilder(otelConfig.Receivers, i.factories.Receivers), + Processors: processor.NewBuilder(otelConfig.Processors, i.factories.Processors), + Exporters: otelexporter.NewBuilder(otelConfig.Exporters, i.factories.Exporters), + Connectors: connector.NewBuilder(otelConfig.Connectors, i.factories.Connectors), + Extensions: extension.NewBuilder(otelConfig.Extensions, i.factories.Extensions), OtelMetricViews: servicegraphprocessor.OtelMetricViews(), OtelMetricReader: promExporter, DisableProcessMetrics: true, diff --git a/pkg/traces/servicegraphprocessor/processor_test.go b/pkg/traces/servicegraphprocessor/processor_test.go index f9e0d9cb6219..a2577a3d034d 100644 --- a/pkg/traces/servicegraphprocessor/processor_test.go +++ b/pkg/traces/servicegraphprocessor/processor_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/grafana/agent/pkg/traces/internal/traceutils" + "github.com/grafana/agent/pkg/traces/traceutils" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/testutil" "github.com/stretchr/testify/assert" diff --git a/pkg/traces/traces_test.go b/pkg/traces/traces_test.go index 1ebdf1c09cb3..7557a036d29f 100644 --- a/pkg/traces/traces_test.go +++ b/pkg/traces/traces_test.go @@ -7,7 +7,7 @@ import ( "time" "github.com/grafana/agent/pkg/server" - "github.com/grafana/agent/pkg/traces/internal/traceutils" + "github.com/grafana/agent/pkg/traces/traceutils" "github.com/grafana/agent/pkg/util" "github.com/opentracing/opentracing-go" "github.com/prometheus/client_golang/prometheus" diff --git a/pkg/traces/internal/traceutils/otel_meter_settings.go b/pkg/traces/traceutils/otel_meter_settings.go similarity index 100% rename from pkg/traces/internal/traceutils/otel_meter_settings.go rename to pkg/traces/traceutils/otel_meter_settings.go diff --git a/pkg/traces/internal/traceutils/server.go b/pkg/traces/traceutils/server.go similarity index 90% rename from pkg/traces/internal/traceutils/server.go rename to pkg/traces/traceutils/server.go index af37633fbaca..4889e873df42 100644 --- a/pkg/traces/internal/traceutils/server.go +++ b/pkg/traces/traceutils/server.go @@ -27,40 +27,40 @@ import ( "gopkg.in/yaml.v3" ) -// Server is a Tracing testing server that invokes a function every time a span +// server is a Tracing testing server that invokes a function every time a span // is received. -type Server struct { +type server struct { service *service.Service } -// NewTestServer creates a new Server for testing, where received traces will +// NewTestServer creates a new server for testing, where received traces will // call the callback function. The returned string is the address where traces // can be sent using OTLP. func NewTestServer(t *testing.T, callback func(ptrace.Traces)) string { t.Helper() - srv, listenAddr, err := NewServerWithRandomPort(callback) + srv, listenAddr, err := newServerWithRandomPort(callback) if err != nil { t.Fatalf("failed to create OTLP server: %s", err) } t.Cleanup(func() { - err := srv.Stop() + err := srv.stop() assert.NoError(t, err) }) return listenAddr } -// NewServerWithRandomPort calls NewServer with a random port >49152 and +// newServerWithRandomPort calls NewServer with a random port >49152 and // <65535. It will try up to five times before failing. -func NewServerWithRandomPort(callback func(ptrace.Traces)) (srv *Server, addr string, err error) { +func newServerWithRandomPort(callback func(ptrace.Traces)) (srv *server, addr string, err error) { var lastError error for i := 0; i < 5; i++ { port := rand.Intn(65535-49152) + 49152 listenAddr := fmt.Sprintf("127.0.0.1:%d", port) - srv, err = NewServer(listenAddr, callback) + srv, err = newServer(listenAddr, callback) if err != nil { lastError = err continue @@ -72,9 +72,9 @@ func NewServerWithRandomPort(callback func(ptrace.Traces)) (srv *Server, addr st return nil, "", fmt.Errorf("failed 5 times to create a server. last error: %w", lastError) } -// NewServer creates an OTLP-accepting server that calls a function when a +// newServer creates an OTLP-accepting server that calls a function when a // trace is received. This is primarily useful for testing. -func NewServer(addr string, callback func(ptrace.Traces)) (*Server, error) { +func newServer(addr string, callback func(ptrace.Traces)) (*server, error) { conf := util.Untab(fmt.Sprintf(` processors: func_processor: @@ -163,13 +163,13 @@ func NewServer(addr string, callback func(ptrace.Traces)) (*Server, error) { return nil, fmt.Errorf("failed to start Otel service: %w", err) } - return &Server{ + return &server{ service: svc, }, nil } -// Stop stops the testing server. -func (s *Server) Stop() error { +// stop stops the testing server. +func (s *server) stop() error { shutdownCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() From 4632f3608d72bc0f7e8c1202cbc6eea3b526adc0 Mon Sep 17 00:00:00 2001 From: Paulin Todev Date: Tue, 1 Aug 2023 17:53:42 +0100 Subject: [PATCH 2/4] Cleanup static mode after the otel upgrade, fix bug with Jaeger remote sampling (#4640) * Cleanup static mode after the otel upgrade * Fix linter issues * Update docs/sources/flow/upgrade-guide.md Co-authored-by: Robert Fratto * Move breaking change note to static mode doc, add example configs --------- Co-authored-by: Robert Fratto --- CHANGELOG.md | 9 ++ .../static/configuration/traces-config.md | 93 +++++++++--- docs/sources/static/upgrade-guide.md | 27 ++++ go.mod | 5 +- go.sum | 5 +- pkg/traces/config.go | 113 +++++++++++---- pkg/traces/config_test.go | 132 +++++++++++++++--- 7 files changed, 316 insertions(+), 68 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2275e792bc23..eb5eea5df1a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,11 @@ v0.35.2 (2023-07-27) - Fix a bug which prevented the `app_agent_receiver` integration from processing traces. (@ptodev) +- (Agent static mode) Jaeger remote sampling works again, through a new `jaeger_remote_sampling` + entry in the traces config. It is no longer configurable through the jaeger receiver. + Support Jaeger remote sampling was removed accidentally in v0.35, and it is now restored, + albeit via a different config entry. + v0.35.2 (2023-07-27) -------------------- @@ -100,6 +105,10 @@ v0.35.0 (2023-07-18) - The `remote_sampling` block has been removed from `otelcol.receiver.jaeger`. (@ptodev) +- (Agent static mode) Jaeger remote sampling used to be configured using the Jaeger receiver configuration. + This receiver was updated to a new version, where support for remote sampling in the receiver was removed. + Jaeger remote sampling is available as a separate configuration field starting in v0.35.3. (@ptodev) + ### Deprecations - `otelcol.exporter.jaeger` has been deprecated and will be removed in Agent v0.38.0. (@ptodev) diff --git a/docs/sources/static/configuration/traces-config.md b/docs/sources/static/configuration/traces-config.md index 6bc1b6d80086..d0c9fe89bc96 100644 --- a/docs/sources/static/configuration/traces-config.md +++ b/docs/sources/static/configuration/traces-config.md @@ -42,9 +42,9 @@ name: [ batch: ] remote_write: - # host:port to send traces to + # host:port to send traces to. # Here must be the port of gRPC receiver, not the Tempo default port. - # Example for cloud instances: `tempo-us-central1.grafana.net:443` + # Example for cloud instances: `tempo-us-central1.grafana.net:443` # For local / on-premises instances: `localhost:55680` or `tempo.example.com:14250` # Note: for non-encrypted connections you must also set `insecure: true` - endpoint: @@ -77,30 +77,55 @@ remote_write: # Configures opentelemetry exporters to use the OpenTelemetry auth extension `oauth2clientauthextension`. # Can not be used in combination with `basic_auth`. - # See https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/extension/oauth2clientauthextension/README.md + # See https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.80.0/extension/oauth2clientauthextension/README.md oauth2: # Configures the TLS settings specific to the oauth2 client # The client identifier issued to the oauth client [ client_id: ] # The secret string associated with the oauth client [ client_secret: ] + # Additional parameters for requests to the token endpoint + [ endpoint_params: ] # The resource server's token endpoint URL [ token_url: ] # Optional, requested permissions associated with the oauth client [ scopes: [] ] # Optional, specifies the timeout fetching tokens from the token_url. Default: no timeout [ timeout: ] + # TLS client configuration for the underneath client to authorization server. + # https://github.com/open-telemetry/opentelemetry-collector/blob/v0.80.0/config/configtls/README.md tls: # Disable validation of the server certificate. [ insecure: | default = false ] + # InsecureSkipVerify will enable TLS but not verify the certificate. + [ insecure_skip_verify: | default = false ] + # ServerName requested by client for virtual hosting. + # This sets the ServerName in the TLSConfig. Please refer to + # https://godoc.org/crypto/tls#Config for more information. + [ server_name_override: ] # Path to the CA cert. For a client this verifies the server certificate. If empty uses system root CA. [ ca_file: ] + # In memory PEM encoded cert. + [ ca_pem: ] # Path to the TLS cert to use for TLS required connections [ cert_file: ] + # In memory PEM encoded TLS cert to use for TLS required connections. + [ cert_pem: ] # Path to the TLS key to use for TLS required connections [ key_file: ] - - # Controls TLS settings of the exporter's client. See https://github.com/open-telemetry/opentelemetry-collector/blob/v0.21.0/config/configtls/README.md + # In memory PEM encoded TLS key to use for TLS required connections. + [ key_pem: ] + # Minimum acceptable TLS version. + [ min_version: | default = "1.2" ] + # Maximum acceptable TLS version. + # If not set, it is handled by crypto/tls - currently it is "1.3". + [ max_version: | default = "" ] + # ReloadInterval specifies the duration after which the certificate will be reloaded. + # If not set, it will never be reloaded. + [ reload_interval: ] + + # Controls TLS settings of the exporter's client: + # https://prometheus.io/docs/prometheus/2.45/configuration/configuration/#tls_config # This should be used only if `insecure` is set to false tls_config: # Path to the CA cert. For a client this verifies the server certificate. If empty uses system root CA. @@ -163,7 +188,7 @@ automatic_logging: # Receiver configurations are mapped directly into the OpenTelemetry receivers # block. At least one receiver is required. -# The Agent uses OpenTelemetry v0.36.0. Refer to the corresponding receiver's config. +# The Agent uses OpenTelemetry v0.80.0. Refer to the corresponding receiver's config. # # Supported receivers: otlp, jaeger, kafka, opencensus and zipkin. receivers: @@ -292,7 +317,16 @@ load_balancing: [ - ... ] dns: hostname: - [ port: ] + [ port: | default = 4317 ] + # Resolver interval + [ interval: | default = 5s ] + # Resolver timeout + [ timeout: | default = 1s ] + + # routing_key can be either "traceID" or "service": + # * "service": exports spans based on their service name. + # * "traceID": exports spans based on their traceID. + [ routing_key: | default = "traceID" ] # receiver_port is the port the instance will use to receive load balanced traces receiver_port: [ | default = 4318 ] @@ -374,22 +408,41 @@ service_graphs: # grpc status codes not to be considered as failure grpc: [ - ... ] + +# jaeger_remote_sampling configures one or more jaeger remote sampling extensions. +# For more details about the configuration please consult the OpenTelemetry documentation: +# https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/extension/jaegerremotesampling +# +# Example config: +# +# jaeger_remote_sampling: +# - source: +# remote: +# endpoint: jaeger-collector:14250 +# tls: +# insecure: true +# - source: +# reload_interval: 1s +# file: /etc/otelcol/sampling_strategies.json +# +jaeger_remote_sampling: + [ - ... ] ``` > **Note:** More information on the following types can be found on the > documentation for their respective projects: > -* [`attributes.config`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/processor/attributesprocessor) -* [`batch.config`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/1f5dd9f9a566a937ec15093ca3bc377fba86f5f9/processor/batchprocessor) -* [`otlpexporter.sending_queue`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/1f5dd9f9a566a937ec15093ca3bc377fba86f5f9/exporter/otlpexporter) -* [`otlpexporter.retry_on_failure`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/1f5dd9f9a566a937ec15093ca3bc377fba86f5f9/exporter/otlpexporter) +* [`attributes.config`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/processor/attributesprocessor) +* [`batch.config`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/v0.80.0/processor/batchprocessor) +* [`otlpexporter.sending_queue`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/v0.80.0/exporter/otlpexporter) +* [`otlpexporter.retry_on_failure`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/v0.80.0/exporter/otlpexporter) * `receivers`: - * [`jaegerreceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/receiver/jaegerreceiver) - * [`kafkareceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/receiver/kafkareceiver) - * [`otlpreceiver`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/1f5dd9f9a566a937ec15093ca3bc377fba86f5f9/receiver/otlpreceiver) - * [`opencensusreceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/receiver/opencensusreceiver) - * [`zipkinreceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/receiver/zipkinreceiver) -* [`scrape_config`: Prometheus](https://prometheus.io/docs/prometheus/2.42/configuration/configuration/#scrape_config) -* [`spanmetricsprocessor.latency_histogram_buckets`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/processor/spanmetricsprocessor/config.go#L38-L47) -* [`spanmetricsprocessor.dimensions`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/processor/spanmetricsprocessor/config.go#L38-L47) -* [`tailsamplingprocessor.policies`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/b2327211df976e0a57ef0425493448988772a16b/processor/tailsamplingprocessor) + * [`jaegerreceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/receiver/jaegerreceiver) + * [`kafkareceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/receiver/kafkareceiver) + * [`otlpreceiver`: OpenTelemetry-Collector](https://github.com/open-telemetry/opentelemetry-collector/tree/v0.80.0/receiver/otlpreceiver) + * [`opencensusreceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/receiver/opencensusreceiver) + * [`zipkinreceiver`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/receiver/zipkinreceiver) +* [`scrape_config`: Prometheus](https://prometheus.io/docs/prometheus/2.45/configuration/configuration/#scrape_config) +* [`spanmetricsprocessor.latency_histogram_buckets`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.80.0/processor/spanmetricsprocessor/config.go#L37-L39) +* [`spanmetricsprocessor.dimensions`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.80.0/processor/spanmetricsprocessor/config.go#L41-L48) +* [`tailsamplingprocessor.policies`: OpenTelemetry-Collector-Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/processor/tailsamplingprocessor) diff --git a/docs/sources/static/upgrade-guide.md b/docs/sources/static/upgrade-guide.md index 0c65e75f83ef..3a1e8727b211 100644 --- a/docs/sources/static/upgrade-guide.md +++ b/docs/sources/static/upgrade-guide.md @@ -22,6 +22,33 @@ static mode. ## v0.35 +### Breaking change: Jaeger remote sampling no longer configurable using the Jaeger receiver + +Jaeger remote sampling used to be configured using the Jaeger receiver configuration. This receiver was updated to a new version, where support for remote sampling in the receiver was removed. + +Jaeger remote sampling is available as a separate configuration field starting in v0.35.3. + +Old configuration example: + +```yaml +receivers: + jaeger: + protocols: + grpc: + remote_sampling: + strategy_file: /etc/agent/strategies.json + strategy_file_reload_interval: 1s +``` + +New configuration example: + +```yaml +jaeger_remote_sampling: + - source: + file: /etc/agent/strategies.json + reload_interval: 1s +``` + ### Breaking change: `auth` and `version` attributes from `walk_params` block of SNMP integration have been removed The SNMP integrations (both v1 and v2) wrap a new version of SNMP exporter which introduces a new configuration file format. diff --git a/go.mod b/go.mod index bfe248bafb56..6cdda31ed827 100644 --- a/go.mod +++ b/go.mod @@ -106,6 +106,7 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.80.0 github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.80.0 github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.80.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.80.0 github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.80.0 github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.80.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.80.0 @@ -550,8 +551,8 @@ require ( github.com/snowflakedb/gosnowflake v1.6.22 // indirect github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d // indirect github.com/soheilhy/cmux v0.1.5 // indirect - github.com/spf13/afero v1.9.3 // indirect - github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.15.0 // indirect diff --git a/go.sum b/go.sum index 19d422d3ee3a..c0bb63756c9b 100644 --- a/go.sum +++ b/go.sum @@ -2551,6 +2551,8 @@ github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokena github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.80.0/go.mod h1:1uefCMOB5VnqgP5F22GeSoqkm8pYbWUmxFHBUg54WnE= github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.80.0 h1:1g6IDFOWzDpZScQRb+80G54DlPaCckkITJ3l0gUS/dk= github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.80.0/go.mod h1:j6U+t0w0uKYSltgY3s+4BskNVOj7E3+OxGFs3FPOTZs= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.80.0 h1:hglhSIcQRNd/5yuak0LFd1rsH4/rP3hTIaU8/LaOaHY= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.80.0/go.mod h1:C677/QL+Oav+yqeLaCIFOXw7qQAw1Pm4sqTmVwIM7M0= github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.80.0 h1:4+k4uS/pDLbkh2yMmMXSycKHq6oEycWpJToh/SUxLIM= github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.80.0/go.mod h1:YJrHRLfgBQBt8RT5p61Fbkx01KuesGlrpZzOTIE3Mfw= github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.80.0 h1:bDOzezMdoK2m5Q7h/kzd5qBZRqX1B4hrIIzxKiDuFLE= @@ -2988,8 +2990,9 @@ github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= diff --git a/pkg/traces/config.go b/pkg/traces/config.go index 472f65f3ea22..26fef4795dd5 100644 --- a/pkg/traces/config.go +++ b/pkg/traces/config.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "net" + "net/url" "os" "sort" "strings" @@ -14,6 +15,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/jaegerexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter" + "github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor" @@ -36,6 +38,7 @@ import ( "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" "go.uber.org/multierr" + "gopkg.in/yaml.v2" "github.com/grafana/agent/pkg/logs" "github.com/grafana/agent/pkg/traces/automaticloggingprocessor" @@ -69,6 +72,9 @@ const ( // otlp receiver otlpReceiverName = "otlp" + + // A string to print out when marshaling "secrets" strings, like passwords. + secretMarshalString = "" ) // Config controls the configuration of Traces trace pipelines. @@ -117,13 +123,16 @@ type InstanceConfig struct { // RemoteWrite defines one or multiple backends that can receive the pipeline's traffic. RemoteWrite []RemoteWriteConfig `yaml:"remote_write,omitempty"` - // Receivers: https://github.com/open-telemetry/opentelemetry-collector/blob/7d7ae2eb34b5d387627875c498d7f43619f37ee3/receiver/README.md + // Receivers: + // https://github.com/open-telemetry/opentelemetry-collector/blob/v0.80.0/receiver/README.md Receivers ReceiverMap `yaml:"receivers,omitempty"` - // Batch: https://github.com/open-telemetry/opentelemetry-collector/blob/7d7ae2eb34b5d387627875c498d7f43619f37ee3/processor/batchprocessor/config.go#L24 + // Batch: + // https://github.com/open-telemetry/opentelemetry-collector/tree/v0.80.0/processor/batchprocessor Batch map[string]interface{} `yaml:"batch,omitempty"` - // Attributes: https://github.com/open-telemetry/opentelemetry-collector/blob/7d7ae2eb34b5d387627875c498d7f43619f37ee3/processor/attributesprocessor/config.go#L30 + // Attributes: + // https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/processor Attributes map[string]interface{} `yaml:"attributes,omitempty"` // prom service discovery config @@ -131,20 +140,54 @@ type InstanceConfig struct { OperationType string `yaml:"prom_sd_operation_type,omitempty"` PodAssociations []string `yaml:"prom_sd_pod_associations,omitempty"` - // SpanMetricsProcessor: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/spanmetricsprocessor/README.md + // SpanMetricsProcessor: + // https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/processor/spanmetricsprocessor SpanMetrics *SpanMetricsConfig `yaml:"spanmetrics,omitempty"` // AutomaticLogging AutomaticLogging *automaticloggingprocessor.AutomaticLoggingConfig `yaml:"automatic_logging,omitempty"` // TailSampling defines a sampling strategy for the pipeline + // https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/processor/tailsamplingprocessor TailSampling *tailSamplingConfig `yaml:"tail_sampling,omitempty"` // LoadBalancing is used to distribute spans of the same trace to the same agent instance + // https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/exporter/loadbalancingexporter LoadBalancing *loadBalancingConfig `yaml:"load_balancing"` // ServiceGraphs ServiceGraphs *serviceGraphsConfig `yaml:"service_graphs,omitempty"` + + // Jaeger's Remote Sampling extension: + // https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/extension/jaegerremotesampling + JaegerRemoteSampling []JaegerRemoteSamplingConfig `yaml:"jaeger_remote_sampling"` +} + +// A string type for secrets like passwords. +// Hides the value of the string during marshaling. +type SecretString string + +var ( + _ yaml.Marshaler = (*SecretString)(nil) +) + +// MarshalYAML implements yaml.Marshaler. +func (s SecretString) MarshalYAML() (interface{}, error) { + return secretMarshalString, nil +} + +// JaegerRemoteSamplingMap is a set of Jaeger Remote Sampling extensions. +// Because receivers may be configured with an unknown set of sensitive information, +// ReceiverMap will marshal as YAML to the text "". +type JaegerRemoteSamplingConfig map[string]interface{} + +var ( + _ yaml.Marshaler = (*JaegerRemoteSamplingConfig)(nil) +) + +// MarshalYAML implements yaml.Marshaler. +func (jrsm JaegerRemoteSamplingConfig) MarshalYAML() (interface{}, error) { + return secretMarshalString, nil } // ReceiverMap stores a set of receivers. Because receivers may be configured @@ -152,6 +195,11 @@ type InstanceConfig struct { // YAML to the text "". type ReceiverMap map[string]interface{} +var ( + _ yaml.Marshaler = (*ReceiverMap)(nil) + _ yaml.Unmarshaler = (*ReceiverMap)(nil) +) + // UnmarshalYAML implements yaml.Unmarshaler. func (r *ReceiverMap) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain ReceiverMap @@ -193,7 +241,7 @@ func (r *ReceiverMap) UnmarshalYAML(unmarshal func(interface{}) error) error { // MarshalYAML implements yaml.Marshaler. func (r ReceiverMap) MarshalYAML() (interface{}, error) { - return "", nil + return secretMarshalString, nil } const ( @@ -217,25 +265,30 @@ var DefaultRemoteWriteConfig = RemoteWriteConfig{ // TLSClientSetting configures the oauth2client extension TLS; compatible with configtls.TLSClientSetting type TLSClientSetting struct { - CAFile string `yaml:"ca_file,omitempty"` - CertFile string `yaml:"cert_file,omitempty"` - KeyFile string `yaml:"key_file,omitempty"` - MinVersion string `yaml:"min_version,omitempty"` - MaxVersion string `yaml:"max_version,omitempty"` - Insecure bool `yaml:"insecure"` - InsecureSkipVerify bool `yaml:"insecure_skip_verify"` - ServerNameOverride string `yaml:"server_name_override,omitempty"` + CAFile string `yaml:"ca_file,omitempty"` + CAPem SecretString `yaml:"ca_pem,omitempty"` + CertFile string `yaml:"cert_file,omitempty"` + CertPem SecretString `yaml:"cert_pem,omitempty"` + KeyFile string `yaml:"key_file,omitempty"` + KeyPem SecretString `yaml:"key_pem,omitempty"` + MinVersion string `yaml:"min_version,omitempty"` + MaxVersion string `yaml:"max_version,omitempty"` + ReloadInterval time.Duration `yaml:"reload_interval"` + Insecure bool `yaml:"insecure"` + InsecureSkipVerify bool `yaml:"insecure_skip_verify"` + ServerNameOverride string `yaml:"server_name_override,omitempty"` } // OAuth2Config configures the oauth2client extension for a remote_write exporter // compatible with oauth2clientauthextension.Config type OAuth2Config struct { - ClientID string `yaml:"client_id"` - ClientSecret string `yaml:"client_secret"` - TokenURL string `yaml:"token_url"` - Scopes []string `yaml:"scopes,omitempty"` - TLS TLSClientSetting `yaml:"tls,omitempty"` - Timeout time.Duration `yaml:"timeout,omitempty"` + ClientID string `yaml:"client_id"` + ClientSecret SecretString `yaml:"client_secret"` + EndpointParams url.Values `yaml:"endpoint_params,omitempty"` + TokenURL string `yaml:"token_url"` + Scopes []string `yaml:"scopes,omitempty"` + TLS TLSClientSetting `yaml:"tls,omitempty"` + Timeout time.Duration `yaml:"timeout,omitempty"` } // Agent uses standard YAML unmarshalling, while the oauth2clientauthextension relies on @@ -272,8 +325,8 @@ type RemoteWriteConfig struct { BasicAuth *prom_config.BasicAuth `yaml:"basic_auth,omitempty"` Oauth2 *OAuth2Config `yaml:"oauth2,omitempty"` Headers map[string]string `yaml:"headers,omitempty"` - SendingQueue map[string]interface{} `yaml:"sending_queue,omitempty"` // https://github.com/open-telemetry/opentelemetry-collector/blob/7d7ae2eb34b5d387627875c498d7f43619f37ee3/exporter/exporterhelper/queued_retry.go#L30 - RetryOnFailure map[string]interface{} `yaml:"retry_on_failure,omitempty"` // https://github.com/open-telemetry/opentelemetry-collector/blob/7d7ae2eb34b5d387627875c498d7f43619f37ee3/exporter/exporterhelper/queued_retry.go#L54 + SendingQueue map[string]interface{} `yaml:"sending_queue,omitempty"` // https://github.com/open-telemetry/opentelemetry-collector/blob/v0.80.0/exporter/exporterhelper/queued_retry.go + RetryOnFailure map[string]interface{} `yaml:"retry_on_failure,omitempty"` // https://github.com/open-telemetry/opentelemetry-collector/blob/v0.80.0/exporter/exporterhelper/queued_retry.go } // UnmarshalYAML implements yaml.Unmarshaler. @@ -317,7 +370,7 @@ type SpanMetricsConfig struct { // tailSamplingConfig is the configuration for tail-based sampling type tailSamplingConfig struct { // Policies are the strategies used for sampling. Multiple policies can be used in the same pipeline. - // For more information, refer to https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/tailsamplingprocessor + // For more information, refer to https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/processor/tailsamplingprocessor Policies []policy `yaml:"policies"` // DecisionWait defines the time to wait for a complete trace before making a decision DecisionWait time.Duration `yaml:"decision_wait,omitempty"` @@ -342,6 +395,7 @@ type loadBalancingConfig struct { Resolver map[string]interface{} `yaml:"resolver"` // ReceiverPort is the port the instance will use to receive load balanced traces ReceiverPort string `yaml:"receiver_port"` + RoutingKey string `yaml:"routing_key,omitempty"` } // exporterConfig defined the config for an otlp exporter for load balancing @@ -503,6 +557,15 @@ func (c *InstanceConfig) extensions() (map[string]interface{}, error) { } extensions[getAuthExtensionName(exporterName)] = oauthConfig } + if c.JaegerRemoteSampling != nil { + if len(c.JaegerRemoteSampling) == 0 { + return nil, fmt.Errorf("at least one jaeger_remote_sampling configuration must be specified") + } + for i, jrsConfig := range c.JaegerRemoteSampling { + extName := fmt.Sprintf("jaegerremotesampling/%d", i) + extensions[extName] = jrsConfig + } + } return extensions, nil } @@ -544,12 +607,13 @@ func (c *InstanceConfig) loadBalancingExporter() (map[string]interface{}, error) "protocol": map[string]interface{}{ "otlp": exporter, }, - "resolver": resolverCfg, + "resolver": resolverCfg, + "routing_key": c.LoadBalancing.RoutingKey, }, nil } // formatPolicies creates sampling policies (i.e. rules) compatible with OTel's tail sampling processor -// https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.46.0/processor/tailsamplingprocessor +// https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/v0.80.0/processor/tailsamplingprocessor func formatPolicies(cfg []policy) ([]map[string]interface{}, error) { policies := make([]map[string]interface{}, 0, len(cfg)) for i, policy := range cfg { @@ -812,6 +876,7 @@ func (c *InstanceConfig) otelConfig() (*otelcol.Config, error) { func tracingFactories() (otelcol.Factories, error) { extensions, err := extension.MakeFactoryMap( oauth2clientauthextension.NewFactory(), + jaegerremotesampling.NewFactory(), ) if err != nil { return otelcol.Factories{}, err diff --git a/pkg/traces/config_test.go b/pkg/traces/config_test.go index 30285c316b8e..fc5fff7c6c75 100644 --- a/pkg/traces/config_test.go +++ b/pkg/traces/config_test.go @@ -313,19 +313,21 @@ service: `, }, { - name: "jaeger receiver remote_sampling TLS config", + name: "jaeger remote sampling multiple configs", cfg: ` receivers: jaeger: protocols: grpc: - remote_sampling: - host_endpoint: example:54321 - strategy_file: file_path - tls: - insecure: true - insecure_skip_verify: true - server_name_override: hostname +jaeger_remote_sampling: + - source: + remote: + endpoint: jaeger-collector:14250 + tls: + insecure: true + - source: + reload_interval: 1s + file: /etc/otelcol/sampling_strategies.json remote_write: - endpoint: example.com:12345 `, @@ -335,13 +337,6 @@ receivers: jaeger: protocols: grpc: - remote_sampling: - host_endpoint: example:54321 - strategy_file: file_path - tls: - insecure: true - insecure_skip_verify: true - server_name_override: hostname exporters: otlp/0: endpoint: example.com:12345 @@ -349,13 +344,24 @@ exporters: retry_on_failure: max_elapsed_time: 60s processors: {} -extensions: {} +extensions: + jaegerremotesampling/0: + source: + remote: + endpoint: jaeger-collector:14250 + tls: + insecure: true + jaegerremotesampling/1: + source: + reload_interval: 1s + file: /etc/otelcol/sampling_strategies.json service: pipelines: traces: exporters: ["otlp/0"] processors: [] receivers: ["push_receiver", "jaeger"] + extensions: ["jaegerremotesampling/0", "jaegerremotesampling/1"] `, }, { @@ -756,13 +762,16 @@ tail_sampling: - value1 - value2 load_balancing: - receiver_port: 8080 + receiver_port: 8181 + routing_key: service exporter: insecure: true resolver: dns: hostname: agent - port: 8080 + port: 8282 + interval: 12m + timeout: 76s `, expectedConfig: ` receivers: @@ -773,7 +782,7 @@ receivers: otlp/lb: protocols: grpc: - endpoint: "0.0.0.0:8080" + endpoint: "0.0.0.0:8181" exporters: otlp/0: endpoint: example.com:12345 @@ -781,6 +790,7 @@ exporters: retry_on_failure: max_elapsed_time: 60s loadbalancing: + routing_key: service protocol: otlp: tls: @@ -792,7 +802,9 @@ exporters: resolver: dns: hostname: agent - port: 8080 + port: 8282 + interval: 12m + timeout: 76s processors: tail_sampling: decision_wait: 5s @@ -1204,7 +1216,7 @@ service: `, }, { - name: "oauth2 TLS", + name: "oauth2 TLS with certs and keys from files", cfg: ` receivers: jaeger: @@ -1216,14 +1228,19 @@ remote_write: oauth2: client_id: someclientid client_secret: someclientsecret + endpoint_params: + audience: [someaudience] token_url: https://example.com/oauth2/default/v1/token scopes: ["api.metrics"] timeout: 2s tls: insecure: true + insecure_skip_verify: true ca_file: /var/lib/mycert.pem cert_file: certfile key_file: keyfile + min_version: 1.3 + reload_interval: 1h `, expectedConfig: ` receivers: @@ -1235,14 +1252,87 @@ extensions: oauth2client/otlphttp0: client_id: someclientid client_secret: someclientsecret + endpoint_params: + audience: someaudience token_url: https://example.com/oauth2/default/v1/token scopes: ["api.metrics"] timeout: 2s tls: insecure: true + insecure_skip_verify: true ca_file: /var/lib/mycert.pem cert_file: certfile key_file: keyfile + min_version: 1.3 + reload_interval: 1h +exporters: + otlphttp/0: + endpoint: example.com:12345 + compression: gzip + retry_on_failure: + max_elapsed_time: 60s + auth: + authenticator: oauth2client/otlphttp0 +processors: {} +service: + extensions: ["oauth2client/otlphttp0"] + pipelines: + traces: + exporters: ["otlphttp/0"] + processors: [] + receivers: ["push_receiver", "jaeger"] +`, + }, + { + name: "oauth2 TLS with certs and keys from strings", + cfg: ` +receivers: + jaeger: + protocols: + grpc: +remote_write: + - endpoint: example.com:12345 + protocol: http + oauth2: + client_id: someclientid + client_secret: someclientsecret + endpoint_params: + audience: [someaudience] + token_url: https://example.com/oauth2/default/v1/token + scopes: ["api.metrics"] + timeout: 2s + tls: + insecure: true + insecure_skip_verify: true + ca_pem: test_secret_ca_pem_string + cert_pem: test_secret_cert_pem_string + key_pem: test_secret_key_pem_string + max_version: 1.2 + reload_interval: 1h +`, + expectedConfig: ` +receivers: + push_receiver: {} + jaeger: + protocols: + grpc: +extensions: + oauth2client/otlphttp0: + client_id: someclientid + client_secret: someclientsecret + endpoint_params: + audience: someaudience + token_url: https://example.com/oauth2/default/v1/token + scopes: ["api.metrics"] + timeout: 2s + tls: + insecure: true + insecure_skip_verify: true + ca_pem: test_secret_ca_pem_string + cert_pem: test_secret_cert_pem_string + key_pem: test_secret_key_pem_string + max_version: 1.2 + reload_interval: 1h exporters: otlphttp/0: endpoint: example.com:12345 From f6a1194c3d7b7a01e48806f436125748e72c8e33 Mon Sep 17 00:00:00 2001 From: Paulin Todev Date: Fri, 4 Aug 2023 23:40:40 +0100 Subject: [PATCH 3/4] Fix version and date --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb5eea5df1a8..9bbaf4239205 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ This document contains a historical list of changes between releases. Only changes that impact end-user behavior are listed; changes to documentation or internal API changes are not present. -v0.35.2 (2023-07-27) +v0.35.3 (2023-08-07) -------------------- ### Bugfixes From 8b64b7b49152e6999dfb32da956011a999aa6e62 Mon Sep 17 00:00:00 2001 From: Paulin Todev Date: Wed, 9 Aug 2023 10:27:40 +0100 Subject: [PATCH 4/4] go mod tidy --- go.mod | 2 +- go.sum | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 6cdda31ed827..f40fb2e7445d 100644 --- a/go.mod +++ b/go.mod @@ -506,7 +506,7 @@ require ( github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.80.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.80.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.80.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.80.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.80.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.80.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.80.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.80.0 // indirect diff --git a/go.sum b/go.sum index c0bb63756c9b..f798a8c18722 100644 --- a/go.sum +++ b/go.sum @@ -855,8 +855,6 @@ github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= -github.com/cilium/ebpf v0.10.0 h1:nk5HPMeoBXtOzbkZBWym+ZWq1GIiHUsBFXxwewXAHLQ= -github.com/cilium/ebpf v0.10.0/go.mod h1:DPiVdY/kT534dgc9ERmvP8mWA+9gvwgKfRvk4nNWnoE= github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y= github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs= github.com/circonus-labs/circonus-gometrics v0.0.0-20161109192337-d17a8420c36e/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= @@ -1238,7 +1236,7 @@ github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= @@ -1752,8 +1750,6 @@ github.com/grafana/perflib_exporter v0.1.1-0.20230511173423-6166026bd090 h1:Ko80 github.com/grafana/perflib_exporter v0.1.1-0.20230511173423-6166026bd090/go.mod h1:MinSWm88jguXFFrGsP56PtleUb4Qtm4tNRH/wXNXRTI= github.com/grafana/phlare/api v0.1.2 h1:1jrwd3KnsXMzj/tJih9likx5EvbY3pbvLbDqAAYem30= github.com/grafana/phlare/api v0.1.2/go.mod h1:29vcLwFDmZBDce2jwFIMtzvof7fzPadT8VMKw9ks7FU= -github.com/grafana/phlare/ebpf v0.1.0 h1:u4E9BpXoqjvw1WCyM0TeZHbHWochwwJ/rPFzot/QZmU= -github.com/grafana/phlare/ebpf v0.1.0/go.mod h1:5RGW1YCur7bhRlhATPc25drRYbzpekhh+f2HCmmfE3g= github.com/grafana/phlare/ebpf v0.1.1 h1:BnT06KcNDNr46yz2BY3YiaC7ECIU2qUwvi2sbsi8E3A= github.com/grafana/phlare/ebpf v0.1.1/go.mod h1:rh3+TSpue02kR7DW26O1qnlCLoVbiS0leHia1y/0QFM= github.com/grafana/postgres_exporter v0.8.1-0.20210722175051-db35d7c2f520 h1:HnFWqxhoSF3WC7sKAdMZ+SRXvHLVZlZ3sbQjuUlTqkw= @@ -2986,8 +2982,8 @@ github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=