Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/otelcol/exporter/otlphttp/otlphttp.go
4096 views
1
// Package otlphttp provides an otelcol.exporter.otlphttp component.
2
package otlphttp
3
4
import (
5
"errors"
6
"time"
7
8
"github.com/grafana/agent/component"
9
"github.com/grafana/agent/component/otelcol"
10
"github.com/grafana/agent/component/otelcol/exporter"
11
"github.com/grafana/agent/pkg/river"
12
otelcomponent "go.opentelemetry.io/collector/component"
13
otelconfig "go.opentelemetry.io/collector/config"
14
"go.opentelemetry.io/collector/exporter/otlphttpexporter"
15
)
16
17
func init() {
18
component.Register(component.Registration{
19
Name: "otelcol.exporter.otlphttp",
20
Args: Arguments{},
21
Exports: otelcol.ConsumerExports{},
22
23
Build: func(opts component.Options, args component.Arguments) (component.Component, error) {
24
fact := otlphttpexporter.NewFactory()
25
return exporter.New(opts, fact, args.(Arguments))
26
},
27
})
28
}
29
30
// Arguments configures the otelcol.exporter.otlphttp component.
31
type Arguments struct {
32
Client HTTPClientArguments `river:"client,block"`
33
Queue otelcol.QueueArguments `river:"sending_queue,block,optional"`
34
Retry otelcol.RetryArguments `river:"retry_on_failure,block,optional"`
35
36
// The URLs to send metrics/logs/traces to. If omitted the exporter will
37
// use Client.Endpoint by appending "/v1/metrics", "/v1/logs" or
38
// "/v1/traces", respectively. If set, these settings override
39
// Client.Endpoint for the corresponding signal.
40
TracesEndpoint string `river:"traces_endpoint,attr,optional"`
41
MetricsEndpoint string `river:"metrics_endpoint,attr,optional"`
42
LogsEndpoint string `river:"logs_endpoint,attr,optional"`
43
}
44
45
var (
46
_ river.Unmarshaler = (*Arguments)(nil)
47
_ river.Unmarshaler = (*HTTPClientArguments)(nil)
48
_ exporter.Arguments = Arguments{}
49
)
50
51
// DefaultArguments holds default values for Arguments.
52
var DefaultArguments = Arguments{
53
Queue: otelcol.DefaultQueueArguments,
54
Retry: otelcol.DefaultRetryArguments,
55
Client: DefaultHTTPClientArguments,
56
}
57
58
// UnmarshalRiver implements river.Unmarshaler.
59
func (args *Arguments) UnmarshalRiver(f func(interface{}) error) error {
60
*args = DefaultArguments
61
type arguments Arguments
62
err := f((*arguments)(args))
63
if err != nil {
64
return err
65
}
66
return args.Validate()
67
}
68
69
// Convert implements exporter.Arguments.
70
func (args Arguments) Convert() (otelconfig.Exporter, error) {
71
return &otlphttpexporter.Config{
72
ExporterSettings: otelconfig.NewExporterSettings(otelconfig.NewComponentID("otlp")),
73
HTTPClientSettings: *(*otelcol.HTTPClientArguments)(&args.Client).Convert(),
74
QueueSettings: *args.Queue.Convert(),
75
RetrySettings: *args.Retry.Convert(),
76
}, nil
77
}
78
79
// Extensions implements exporter.Arguments.
80
func (args Arguments) Extensions() map[otelconfig.ComponentID]otelcomponent.Extension {
81
return (*otelcol.HTTPClientArguments)(&args.Client).Extensions()
82
}
83
84
// Exporters implements exporter.Arguments.
85
func (args Arguments) Exporters() map[otelconfig.DataType]map[otelconfig.ComponentID]otelcomponent.Exporter {
86
return nil
87
}
88
89
// Validate returns an error if the configuration is invalid.
90
func (args *Arguments) Validate() error {
91
if args.Client.Endpoint == "" && args.TracesEndpoint == "" && args.MetricsEndpoint == "" && args.LogsEndpoint == "" {
92
return errors.New("at least one endpoint must be specified")
93
}
94
return nil
95
}
96
97
// HTTPClientArguments is used to configure otelcol.exporter.otlphttp with
98
// component-specific defaults.
99
type HTTPClientArguments otelcol.HTTPClientArguments
100
101
// Default server settings.
102
var (
103
DefaultMaxIddleConns = 100
104
DefaultIdleConnTimeout = 90 * time.Second
105
DefaultHTTPClientArguments = HTTPClientArguments{
106
MaxIdleConns: &DefaultMaxIddleConns,
107
IdleConnTimeout: &DefaultIdleConnTimeout,
108
109
Timeout: 30 * time.Second,
110
Headers: map[string]string{},
111
Compression: otelcol.CompressionTypeGzip,
112
ReadBufferSize: 0,
113
WriteBufferSize: 512 * 1024,
114
}
115
)
116
117
// UnmarshalRiver implements river.Unmarshaler and supplies defaults.
118
func (args *HTTPClientArguments) UnmarshalRiver(f func(interface{}) error) error {
119
*args = DefaultHTTPClientArguments
120
type arguments HTTPClientArguments
121
return f((*arguments)(args))
122
}
123
124