-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add otlploghttp exporter skeleton (#5138)
- Loading branch information
Showing
12 changed files
with
370 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# OTLP Log Exporters | ||
|
||
[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/exporters/otlp/otlplog)](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlplog) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# OTLP Log HTTP Exporter | ||
|
||
[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp)](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package otlploghttp // import "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp" | ||
|
||
type client struct { | ||
// TODO: implement. | ||
} | ||
|
||
// newClient creates a new HTTP log client. | ||
func newClient(cfg config) (*client, error) { | ||
// TODO: implement. | ||
return &client{}, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,198 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package otlploghttp // import "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp" | ||
|
||
import ( | ||
"crypto/tls" | ||
"net/http" | ||
"net/url" | ||
"time" | ||
) | ||
|
||
// Option applies an option to the Exporter. | ||
type Option interface { | ||
applyHTTPOption(config) config | ||
} | ||
|
||
type config struct { | ||
// TODO: implement. | ||
} | ||
|
||
func newConfig(options []Option) config { | ||
var c config | ||
for _, opt := range options { | ||
c = opt.applyHTTPOption(c) | ||
} | ||
return c | ||
} | ||
|
||
// 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_LOGS_ENDPOINT | ||
// environment variable is set, and this option is not passed, that variable | ||
// value will be used. If both are set, OTEL_EXPORTER_OTLP_LOGS_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 { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// WithEndpointURL sets the target endpoint URL the Exporter will connect to. | ||
// | ||
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | ||
// environment variable is set, and this option is not passed, that variable | ||
// value will be used. If both are set, OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | ||
// will take precedence. | ||
// | ||
// If both this option and WithEndpoint are used, the last used option will | ||
// take precedence. | ||
// | ||
// If an invalid URL is provided, the default value will be kept. | ||
// | ||
// By default, if an environment variable is not set, and this option is not | ||
// passed, "localhost:4318" will be used. | ||
func WithEndpointURL(u string) Option { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// Compression describes the compression used for payloads sent to the | ||
// collector. | ||
type Compression int | ||
|
||
// WithCompression sets the compression strategy the Exporter will use to | ||
// compress the HTTP body. | ||
// | ||
// If the OTEL_EXPORTER_OTLP_COMPRESSION or | ||
// OTEL_EXPORTER_OTLP_LOGS_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_LOGS_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 { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// WithURLPath sets the URL path the Exporter will send requests to. | ||
// | ||
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_LOGS_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_LOGS_ENDPOINT will take precedence. | ||
// | ||
// By default, if an environment variable is not set, and this option is not | ||
// passed, "/v1/logs" will be used. | ||
func WithURLPath(urlPath string) Option { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// WithTLSClientConfig sets the TLS configuration the Exporter will use for | ||
// HTTP requests. | ||
// | ||
// If the OTEL_EXPORTER_OTLP_CERTIFICATE or | ||
// OTEL_EXPORTER_OTLP_LOGS_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_LOGS_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 { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// WithInsecure disables client transport security for the Exporter's HTTP | ||
// connection. | ||
// | ||
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_LOGS_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_LOGS_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 { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// WithHeaders will send the provided headers with each HTTP requests. | ||
// | ||
// If the OTEL_EXPORTER_OTLP_HEADERS or OTEL_EXPORTER_OTLP_LOGS_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_LOGS_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 { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// 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 log data is | ||
// dropped. | ||
// | ||
// If the OTEL_EXPORTER_OTLP_TIMEOUT or OTEL_EXPORTER_OTLP_LOGS_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_LOGS_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 { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// RetryConfig defines configuration for retrying the export of log data that | ||
// failed. | ||
type RetryConfig struct { | ||
// TODO: implement. | ||
} | ||
|
||
// 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 { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// HTTPTransportProxyFunc is a function that resolves which URL to use as proxy | ||
// for a given request. This type is compatible with http.Transport.Proxy and | ||
// can be used to set a custom proxy function to the OTLP HTTP client. | ||
type HTTPTransportProxyFunc func(*http.Request) (*url.URL, error) | ||
|
||
// WithProxy sets the Proxy function the client will use to determine the | ||
// proxy to use for an HTTP request. If this option is not used, the client | ||
// will use [http.ProxyFromEnvironment]. | ||
func WithProxy(pf HTTPTransportProxyFunc) Option { | ||
// TODO: implement. | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
// Package otlploghttp provides an OTLP log exporter. The exporter uses HTTP to | ||
// transport OTLP protobuf payloads. | ||
package otlploghttp // import "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package otlploghttp // import "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp" | ||
|
||
import ( | ||
"context" | ||
|
||
"go.opentelemetry.io/otel/sdk/log" | ||
) | ||
|
||
// Exporter is a OpenTelemetry log Exporter. It transports log data encoded as | ||
// OTLP protobufs using HTTP. | ||
type Exporter struct { | ||
// TODO: implement. | ||
} | ||
|
||
// Compile-time check Exporter implements [log.Exporter]. | ||
var _ log.Exporter = (*Exporter)(nil) | ||
|
||
// New returns a new [Exporter]. | ||
func New(_ context.Context, options ...Option) (*Exporter, error) { | ||
cfg := newConfig(options) | ||
c, err := newClient(cfg) | ||
if err != nil { | ||
return nil, err | ||
} | ||
return newExporter(c, cfg) | ||
} | ||
|
||
func newExporter(*client, config) (*Exporter, error) { | ||
// TODO: implement | ||
return &Exporter{}, nil | ||
} | ||
|
||
// Export transforms and transmits log records to an OTLP receiver. | ||
func (e *Exporter) Export(ctx context.Context, records []log.Record) error { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// Shutdown shuts down the Exporter. Calls to Export or ForceFlush will perform | ||
// no operation after this is called. | ||
func (e *Exporter) Shutdown(ctx context.Context) error { | ||
// TODO: implement. | ||
return nil | ||
} | ||
|
||
// ForceFlush does nothing. The Exporter holds no state. | ||
func (e *Exporter) ForceFlush(ctx context.Context) error { | ||
// TODO: implement. | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
module go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp | ||
|
||
go 1.21 | ||
|
||
require ( | ||
github.com/stretchr/testify v1.9.0 | ||
go.opentelemetry.io/otel/sdk/log v0.0.0-20240403115316-6c6e1e7416e9 | ||
) | ||
|
||
require ( | ||
github.com/davecgh/go-spew v1.1.1 // indirect | ||
github.com/go-logr/logr v1.4.1 // indirect | ||
github.com/go-logr/stdr v1.2.2 // indirect | ||
github.com/pmezard/go-difflib v1.0.0 // indirect | ||
go.opentelemetry.io/otel v1.24.0 // indirect | ||
go.opentelemetry.io/otel/log v0.0.1-alpha // indirect | ||
go.opentelemetry.io/otel/metric v1.24.0 // indirect | ||
go.opentelemetry.io/otel/sdk v1.24.0 // indirect | ||
go.opentelemetry.io/otel/trace v1.24.0 // indirect | ||
golang.org/x/sys v0.18.0 // indirect | ||
gopkg.in/yaml.v3 v3.0.1 // indirect | ||
) | ||
|
||
replace go.opentelemetry.io/otel => ../../../.. | ||
|
||
replace go.opentelemetry.io/otel/sdk/log => ../../../../sdk/log | ||
|
||
replace go.opentelemetry.io/otel/trace => ../../../../trace | ||
|
||
replace go.opentelemetry.io/otel/sdk => ../../../../sdk | ||
|
||
replace go.opentelemetry.io/otel/metric => ../../../../metric | ||
|
||
replace go.opentelemetry.io/otel/log => ../../../../log |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= | ||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= | ||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= | ||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= | ||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= | ||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | ||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package otlploghttp // import "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp" | ||
|
||
// Version is the current release version of the OpenTelemetry OTLP over HTTP/protobuf logs exporter in use. | ||
func Version() string { | ||
return "0.0.0" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package otlploghttp | ||
|
||
import ( | ||
"regexp" | ||
"testing" | ||
|
||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
// regex taken from https://github.com/Masterminds/semver/tree/v3.1.1 | ||
var versionRegex = regexp.MustCompile(`^v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` + | ||
`(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + | ||
`(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?$`) | ||
|
||
func TestVersionSemver(t *testing.T) { | ||
v := Version() | ||
assert.NotNil(t, versionRegex.FindStringSubmatch(v), "version is not semver: %s", v) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters