mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2024-12-14 10:13:10 +02:00
f535b1e65f
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com> Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
182 lines
7.2 KiB
Go
182 lines
7.2 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package otlpmetrichttp // import "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"time"
|
|
|
|
"go.opentelemetry.io/otel/exporters/otlp/internal/retry"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/oconf"
|
|
)
|
|
|
|
// Compression describes the compression used for payloads sent to the
|
|
// collector.
|
|
type Compression oconf.Compression
|
|
|
|
const (
|
|
// NoCompression tells the driver to send payloads without
|
|
// compression.
|
|
NoCompression = Compression(oconf.NoCompression)
|
|
// GzipCompression tells the driver to send payloads after
|
|
// compressing them with gzip.
|
|
GzipCompression = Compression(oconf.GzipCompression)
|
|
)
|
|
|
|
// Option applies an option to the Exporter.
|
|
type Option interface {
|
|
applyHTTPOption(oconf.Config) oconf.Config
|
|
}
|
|
|
|
func asHTTPOptions(opts []Option) []oconf.HTTPOption {
|
|
converted := make([]oconf.HTTPOption, len(opts))
|
|
for i, o := range opts {
|
|
converted[i] = oconf.NewHTTPOption(o.applyHTTPOption)
|
|
}
|
|
return converted
|
|
}
|
|
|
|
// RetryConfig defines configuration for retrying the export of metric data
|
|
// that failed.
|
|
type RetryConfig retry.Config
|
|
|
|
type wrappedOption struct {
|
|
oconf.HTTPOption
|
|
}
|
|
|
|
func (w wrappedOption) applyHTTPOption(cfg oconf.Config) oconf.Config {
|
|
return w.ApplyHTTPOption(cfg)
|
|
}
|
|
|
|
// WithEndpoint sets the target endpoint the Exporter will connect to. This
|
|
// endpoint is specified as a host and optional port, no path or scheme should
|
|
// be included (see WithInsecure and WithURLPath).
|
|
//
|
|
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
|
|
// environment variable is set, and this option is not passed, that variable
|
|
// value will be used. If both are set, OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
|
|
// will take precedence.
|
|
//
|
|
// By default, if an environment variable is not set, and this option is not
|
|
// passed, "localhost:4318" will be used.
|
|
func WithEndpoint(endpoint string) Option {
|
|
return wrappedOption{oconf.WithEndpoint(endpoint)}
|
|
}
|
|
|
|
// WithCompression sets the compression strategy the Exporter will use to
|
|
// compress the HTTP body.
|
|
//
|
|
// If the OTEL_EXPORTER_OTLP_COMPRESSION or
|
|
// OTEL_EXPORTER_OTLP_METRICS_COMPRESSION environment variable is set, and
|
|
// this option is not passed, that variable value will be used. That value can
|
|
// be either "none" or "gzip". If both are set,
|
|
// OTEL_EXPORTER_OTLP_METRICS_COMPRESSION will take precedence.
|
|
//
|
|
// By default, if an environment variable is not set, and this option is not
|
|
// passed, no compression strategy will be used.
|
|
func WithCompression(compression Compression) Option {
|
|
return wrappedOption{oconf.WithCompression(oconf.Compression(compression))}
|
|
}
|
|
|
|
// WithURLPath sets the URL path the Exporter will send requests to.
|
|
//
|
|
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
|
|
// environment variable is set, and this option is not passed, the path
|
|
// contained in that variable value will be used. If both are set,
|
|
// OTEL_EXPORTER_OTLP_METRICS_ENDPOINT will take precedence.
|
|
//
|
|
// By default, if an environment variable is not set, and this option is not
|
|
// passed, "/v1/metrics" will be used.
|
|
func WithURLPath(urlPath string) Option {
|
|
return wrappedOption{oconf.WithURLPath(urlPath)}
|
|
}
|
|
|
|
// WithTLSClientConfig sets the TLS configuration the Exporter will use for
|
|
// HTTP requests.
|
|
//
|
|
// If the OTEL_EXPORTER_OTLP_CERTIFICATE or
|
|
// OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE environment variable is set, and
|
|
// this option is not passed, that variable value will be used. The value will
|
|
// be parsed the filepath of the TLS certificate chain to use. If both are
|
|
// set, OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE will take precedence.
|
|
//
|
|
// By default, if an environment variable is not set, and this option is not
|
|
// passed, the system default configuration is used.
|
|
func WithTLSClientConfig(tlsCfg *tls.Config) Option {
|
|
return wrappedOption{oconf.WithTLSClientConfig(tlsCfg)}
|
|
}
|
|
|
|
// WithInsecure disables client transport security for the Exporter's HTTP
|
|
// connection.
|
|
//
|
|
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
|
|
// environment variable is set, and this option is not passed, that variable
|
|
// value will be used to determine client security. If the endpoint has a
|
|
// scheme of "http" or "unix" client security will be disabled. If both are
|
|
// set, OTEL_EXPORTER_OTLP_METRICS_ENDPOINT will take precedence.
|
|
//
|
|
// By default, if an environment variable is not set, and this option is not
|
|
// passed, client security will be used.
|
|
func WithInsecure() Option {
|
|
return wrappedOption{oconf.WithInsecure()}
|
|
}
|
|
|
|
// WithHeaders will send the provided headers with each HTTP requests.
|
|
//
|
|
// If the OTEL_EXPORTER_OTLP_HEADERS or OTEL_EXPORTER_OTLP_METRICS_HEADERS
|
|
// environment variable is set, and this option is not passed, that variable
|
|
// value will be used. The value will be parsed as a list of key value pairs.
|
|
// These pairs are expected to be in the W3C Correlation-Context format
|
|
// without additional semi-colon delimited metadata (i.e. "k1=v1,k2=v2"). If
|
|
// both are set, OTEL_EXPORTER_OTLP_METRICS_HEADERS will take precedence.
|
|
//
|
|
// By default, if an environment variable is not set, and this option is not
|
|
// passed, no user headers will be set.
|
|
func WithHeaders(headers map[string]string) Option {
|
|
return wrappedOption{oconf.WithHeaders(headers)}
|
|
}
|
|
|
|
// WithTimeout sets the max amount of time an Exporter will attempt an export.
|
|
//
|
|
// This takes precedence over any retry settings defined by WithRetry. Once
|
|
// this time limit has been reached the export is abandoned and the metric
|
|
// data is dropped.
|
|
//
|
|
// If the OTEL_EXPORTER_OTLP_TIMEOUT or OTEL_EXPORTER_OTLP_METRICS_TIMEOUT
|
|
// environment variable is set, and this option is not passed, that variable
|
|
// value will be used. The value will be parsed as an integer representing the
|
|
// timeout in milliseconds. If both are set,
|
|
// OTEL_EXPORTER_OTLP_METRICS_TIMEOUT will take precedence.
|
|
//
|
|
// By default, if an environment variable is not set, and this option is not
|
|
// passed, a timeout of 10 seconds will be used.
|
|
func WithTimeout(duration time.Duration) Option {
|
|
return wrappedOption{oconf.WithTimeout(duration)}
|
|
}
|
|
|
|
// WithRetry sets the retry policy for transient retryable errors that are
|
|
// returned by the target endpoint.
|
|
//
|
|
// If the target endpoint responds with not only a retryable error, but
|
|
// explicitly returns a backoff time in the response, that time will take
|
|
// precedence over these settings.
|
|
//
|
|
// If unset, the default retry policy will be used. It will retry the export
|
|
// 5 seconds after receiving a retryable error and increase exponentially
|
|
// after each error for no more than a total time of 1 minute.
|
|
func WithRetry(rc RetryConfig) Option {
|
|
return wrappedOption{oconf.WithRetry(retry.Config(rc))}
|
|
}
|