confighttp

package module
v0.115.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2024 License: Apache-2.0 Imports: 33 Imported by: 207

README

HTTP Configuration Settings

HTTP exposes a variety of settings. Several of these settings are available for configuration within individual receivers or exporters.

Client Configuration

Exporters leverage client configuration.

Note that client configuration supports TLS configuration, the configuration parameters are also defined under tls like server configuration. For more information, see configtls README.

  • endpoint: address:port
  • tls
  • headers: name/value pairs added to the HTTP request headers
    • certain headers such as Content-Length and Connection are automatically written when needed and values in Header may be ignored.
    • Host header is automatically derived from endpoint value. However, this automatic assignment can be overridden by explicitly setting the Host field in the headers field.
    • if Host header is provided then it overrides Host field in Request which results as an override of Host header value.
  • read_buffer_size
  • timeout
  • write_buffer_size
  • compression: Compression type to use among gzip, zstd, snappy, zlib, deflate, and lz4.
    • look at the documentation for the server-side of the communication.
    • none will be treated as uncompressed, and any other inputs will cause an error.
  • max_idle_conns
  • max_idle_conns_per_host
  • max_conns_per_host
  • idle_conn_timeout
  • auth
  • disable_keep_alives
  • http2_read_idle_timeout
  • http2_ping_timeout
  • cookies
    • [enabled] if enabled, the client will store cookies from server responses and reuse them in subsequent requests.

Example:

exporter:
  otlphttp:
    endpoint: otelcol2:55690
    auth:
      authenticator: some-authenticator-extension
    tls:
      ca_file: ca.pem
      cert_file: cert.pem
      key_file: key.pem
    headers:
      test1: "value1"
      "test 2": "value 2"
    compression: zstd
    cookies:
      enabled: true

Server Configuration

Receivers leverage server configuration.

  • cors: Configure CORS, allowing the receiver to accept traces from web browsers, even if the receiver is hosted at a different origin. If left blank or set to null, CORS will not be enabled.
    • allowed_origins: A list of origins allowed to send requests to the receiver. An origin may contain a wildcard (*) to replace 0 or more characters (e.g., https://*.example.com). Do not use a plain wildcard ["*"], as our CORS response includes Access-Control-Allow-Credentials: true, which makes browsers to disallow a plain wildcard (this is a security standard). To allow any origin, you can specify at least the protocol, for example ["https://*", "http://*"]. If no origins are listed, CORS will not be enabled.
    • allowed_headers: Allow CORS requests to include headers outside the default safelist. By default, safelist headers and X-Requested-With will be allowed. To allow any request header, set to ["*"].
    • max_age: Sets the value of the Access-Control-Max-Age header, allowing clients to cache the response to CORS preflight requests. If not set, browsers use a default of 5 seconds.
  • endpoint: Valid value syntax available here
  • max_request_body_size: configures the maximum allowed body size in bytes for a single request. Default: 20971520 (20MiB)
  • compression_algorithms: configures the list of compression algorithms the server can accept. Default: ["", "gzip", "zstd", "zlib", "snappy", "deflate", "lz4"]
  • tls
  • auth
    • request_params: a list of query parameter names to add to the auth context, along with the HTTP headers

You can enable attribute processor to append any http header to span's attribute using custom key. You also need to enable the "include_metadata"

Example:

receivers:
  otlp:
    protocols:
      http:
        include_metadata: true
        auth:
          request_params:
          - token
          authenticator: some-authenticator-extension
        cors:
          allowed_origins:
            - https://foo.bar.com
            - https://*.test.com
          allowed_headers:
            - Example-Header
          max_age: 7200
        endpoint: 0.0.0.0:55690
        compression_algorithms: ["", "gzip"]
processors:
  attributes:
    actions:
      - key: http.client_ip
        from_context: metadata.x-forwarded-for
        action: upsert

Documentation

Overview

Package confighttp defines the configuration settings for creating an HTTP client and server.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AuthConfig added in v0.106.0

type AuthConfig struct {
	// Auth for this receiver.
	configauth.Authentication `mapstructure:",squash"`

	// RequestParameters is a list of parameters that should be extracted from the request and added to the context.
	// When a parameter is found in both the query string and the header, the value from the query string will be used.
	RequestParameters []string `mapstructure:"request_params"`
}

type CORSConfig added in v0.94.0

type CORSConfig struct {
	// AllowedOrigins sets the allowed values of the Origin header for
	// HTTP/JSON requests to an OTLP receiver. An origin may contain a
	// wildcard (*) to replace 0 or more characters (e.g.,
	// "http://*.domain.com", or "*" to allow any origin).
	AllowedOrigins []string `mapstructure:"allowed_origins"`

	// AllowedHeaders sets what headers will be allowed in CORS requests.
	// The Accept, Accept-Language, Content-Type, and Content-Language
	// headers are implicitly allowed. If no headers are listed,
	// X-Requested-With will also be accepted by default. Include "*" to
	// allow any request header.
	AllowedHeaders []string `mapstructure:"allowed_headers"`

	// MaxAge sets the value of the Access-Control-Max-Age response header.
	// Set it to the number of seconds that browsers should cache a CORS
	// preflight response for.
	MaxAge int `mapstructure:"max_age"`
}

CORSConfig configures a receiver for HTTP cross-origin resource sharing (CORS). See the underlying https://github.com/rs/cors package for details.

func NewDefaultCORSConfig added in v0.107.0

func NewDefaultCORSConfig() *CORSConfig

NewDefaultCORSConfig creates a default cross-origin resource sharing (CORS) configuration.

type ClientConfig added in v0.94.0

type ClientConfig struct {
	// The target URL to send data to (e.g.: http://some.url:9411/v1/traces).
	Endpoint string `mapstructure:"endpoint"`

	// ProxyURL setting for the collector
	ProxyURL string `mapstructure:"proxy_url"`

	// TLSSetting struct exposes TLS client configuration.
	TLSSetting configtls.ClientConfig `mapstructure:"tls"`

	// ReadBufferSize for HTTP client. See http.Transport.ReadBufferSize.
	// Default is 0.
	ReadBufferSize int `mapstructure:"read_buffer_size"`

	// WriteBufferSize for HTTP client. See http.Transport.WriteBufferSize.
	// Default is 0.
	WriteBufferSize int `mapstructure:"write_buffer_size"`

	// Timeout parameter configures `http.Client.Timeout`.
	// Default is 0 (unlimited).
	Timeout time.Duration `mapstructure:"timeout"`

	// Additional headers attached to each HTTP request sent by the client.
	// Existing header values are overwritten if collision happens.
	// Header values are opaque since they may be sensitive.
	Headers map[string]configopaque.String `mapstructure:"headers"`

	// Auth configuration for outgoing HTTP calls.
	Auth *configauth.Authentication `mapstructure:"auth"`

	// The compression key for supported compression types within collector.
	Compression configcompression.Type `mapstructure:"compression"`

	// MaxIdleConns is used to set a limit to the maximum idle HTTP connections the client can keep open.
	// By default, it is set to 100.
	MaxIdleConns *int `mapstructure:"max_idle_conns"`

	// MaxIdleConnsPerHost is used to set a limit to the maximum idle HTTP connections the host can keep open.
	// By default, it is set to [http.DefaultTransport.MaxIdleConnsPerHost].
	MaxIdleConnsPerHost *int `mapstructure:"max_idle_conns_per_host"`

	// MaxConnsPerHost limits the total number of connections per host, including connections in the dialing,
	// active, and idle states.
	// By default, it is set to [http.DefaultTransport.MaxConnsPerHost].
	MaxConnsPerHost *int `mapstructure:"max_conns_per_host"`

	// IdleConnTimeout is the maximum amount of time a connection will remain open before closing itself.
	// By default, it is set to [http.DefaultTransport.IdleConnTimeout]
	IdleConnTimeout *time.Duration `mapstructure:"idle_conn_timeout"`

	// DisableKeepAlives, if true, disables HTTP keep-alives and will only use the connection to the server
	// for a single HTTP request.
	//
	// WARNING: enabling this option can result in significant overhead establishing a new HTTP(S)
	// connection for every request. Before enabling this option please consider whether changes
	// to idle connection settings can achieve your goal.
	DisableKeepAlives bool `mapstructure:"disable_keep_alives"`

	// This is needed in case you run into
	// https://github.com/golang/go/issues/59690
	// https://github.com/golang/go/issues/36026
	// HTTP2ReadIdleTimeout if the connection has been idle for the configured value send a ping frame for health check
	// 0s means no health check will be performed.
	HTTP2ReadIdleTimeout time.Duration `mapstructure:"http2_read_idle_timeout"`
	// HTTP2PingTimeout if there's no response to the ping within the configured value, the connection will be closed.
	// If not set or set to 0, it defaults to 15s.
	HTTP2PingTimeout time.Duration `mapstructure:"http2_ping_timeout"`
	// Cookies configures the cookie management of the HTTP client.
	Cookies *CookiesConfig `mapstructure:"cookies"`
}

ClientConfig defines settings for creating an HTTP client.

func NewDefaultClientConfig added in v0.94.0

func NewDefaultClientConfig() ClientConfig

NewDefaultClientConfig returns ClientConfig type object with the default values of 'MaxIdleConns' and 'IdleConnTimeout', as well as http.DefaultTransport values. Other config options are not added as they are initialized with 'zero value' by GoLang as default. We encourage to use this function to create an object of ClientConfig.

func (*ClientConfig) ToClient added in v0.94.0

func (hcs *ClientConfig) ToClient(ctx context.Context, host component.Host, settings component.TelemetrySettings) (*http.Client, error)

ToClient creates an HTTP client.

type CookiesConfig added in v0.104.0

type CookiesConfig struct {
	// Enabled if true, cookies from HTTP responses will be reused in further HTTP requests with the same server.
	Enabled bool `mapstructure:"enabled"`
}

CookiesConfig defines the configuration of the HTTP client regarding cookies served by the server.

type ServerConfig added in v0.94.0

type ServerConfig struct {
	// Endpoint configures the listening address for the server.
	Endpoint string `mapstructure:"endpoint"`

	// TLSSetting struct exposes TLS client configuration.
	TLSSetting *configtls.ServerConfig `mapstructure:"tls"`

	// CORS configures the server for HTTP cross-origin resource sharing (CORS).
	CORS *CORSConfig `mapstructure:"cors"`

	// Auth for this receiver
	Auth *AuthConfig `mapstructure:"auth"`

	// MaxRequestBodySize sets the maximum request body size in bytes. Default: 20MiB.
	MaxRequestBodySize int64 `mapstructure:"max_request_body_size"`

	// IncludeMetadata propagates the client metadata from the incoming requests to the downstream consumers
	IncludeMetadata bool `mapstructure:"include_metadata"`

	// Additional headers attached to each HTTP response sent to the client.
	// Header values are opaque since they may be sensitive.
	ResponseHeaders map[string]configopaque.String `mapstructure:"response_headers"`

	// CompressionAlgorithms configures the list of compression algorithms the server can accept. Default: ["", "gzip", "zstd", "zlib", "snappy", "deflate"]
	CompressionAlgorithms []string `mapstructure:"compression_algorithms"`

	// ReadTimeout is the maximum duration for reading the entire
	// request, including the body. A zero or negative value means
	// there will be no timeout.
	//
	// Because ReadTimeout does not let Handlers make per-request
	// decisions on each request body's acceptable deadline or
	// upload rate, most users will prefer to use
	// ReadHeaderTimeout. It is valid to use them both.
	ReadTimeout time.Duration `mapstructure:"read_timeout"`

	// ReadHeaderTimeout is the amount of time allowed to read
	// request headers. The connection's read deadline is reset
	// after reading the headers and the Handler can decide what
	// is considered too slow for the body. If ReadHeaderTimeout
	// is zero, the value of ReadTimeout is used. If both are
	// zero, there is no timeout.
	ReadHeaderTimeout time.Duration `mapstructure:"read_header_timeout"`

	// WriteTimeout is the maximum duration before timing out
	// writes of the response. It is reset whenever a new
	// request's header is read. Like ReadTimeout, it does not
	// let Handlers make decisions on a per-request basis.
	// A zero or negative value means there will be no timeout.
	WriteTimeout time.Duration `mapstructure:"write_timeout"`

	// IdleTimeout is the maximum amount of time to wait for the
	// next request when keep-alives are enabled. If IdleTimeout
	// is zero, the value of ReadTimeout is used. If both are
	// zero, there is no timeout.
	IdleTimeout time.Duration `mapstructure:"idle_timeout"`
}

ServerConfig defines settings for creating an HTTP server.

Example
settings := NewDefaultServerConfig()
settings.Endpoint = "localhost:443"

s, err := settings.ToServer(
	context.Background(),
	componenttest.NewNopHost(),
	componenttest.NewNopTelemetrySettings(),
	http.HandlerFunc(func(http.ResponseWriter, *http.Request) {}))
if err != nil {
	panic(err)
}

l, err := settings.ToListener(context.Background())
if err != nil {
	panic(err)
}
if err = s.Serve(l); err != nil {
	panic(err)
}
Output:

func NewDefaultServerConfig added in v0.106.0

func NewDefaultServerConfig() ServerConfig

NewDefaultServerConfig returns ServerConfig type object with default values. We encourage to use this function to create an object of ServerConfig.

func (*ServerConfig) ToListener added in v0.94.0

func (hss *ServerConfig) ToListener(ctx context.Context) (net.Listener, error)

ToListener creates a net.Listener.

func (*ServerConfig) ToServer added in v0.94.0

func (hss *ServerConfig) ToServer(_ context.Context, host component.Host, settings component.TelemetrySettings, handler http.Handler, opts ...ToServerOption) (*http.Server, error)

ToServer creates an http.Server from settings object.

type ToServerOption

type ToServerOption interface {
	// contains filtered or unexported methods
}

ToServerOption is an option to change the behavior of the HTTP server returned by ServerConfig.ToServer().

func WithDecoder added in v0.81.0

func WithDecoder(key string, dec func(body io.ReadCloser) (io.ReadCloser, error)) ToServerOption

WithDecoder provides support for additional decoders to be configured by the caller.

func WithErrorHandler

func WithErrorHandler(e func(w http.ResponseWriter, r *http.Request, errorMsg string, statusCode int)) ToServerOption

WithErrorHandler overrides the HTTP error handler that gets invoked when there is a failure inside httpContentDecompressor.

Directories

Path Synopsis
xconfighttp module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL