Skip to content

Commit c72dd55

Browse files
Tigran Najaryantigrannajaryan
authored andcommitted
Change default OTLP port number
This implements specification change open-telemetry/opentelemetry-specification#1221 To make transition to new port numbers less painful OTLP receiver will also accept data on the legacy port numbers when it is configured to use the default endpoint. Users who use the default Collector config can continue sending data to the legacy ports and have a graceful period to update their senders to start sending to the new ports. Note that OTLP/HTTP continues using a separate port number from OTLP/gRPC. There is separate work in progress to use one port for both.
1 parent bf818a2 commit c72dd55

File tree

7 files changed

+6779
-56
lines changed

7 files changed

+6779
-56
lines changed

build.log

Lines changed: 6686 additions & 0 deletions
Large diffs are not rendered by default.

receiver/otlpreceiver/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ receivers:
2525
2626
The following settings are configurable:
2727
28-
- `endpoint` (default = 0.0.0.0:55680): host:port to which the receiver is
29-
going to receive data. The valid syntax is described at
30-
https://github.com/grpc/grpc/blob/master/doc/naming.md.
28+
- `endpoint` (default = 0.0.0.0:4317 for grpc protocol, 0.0.0.0:4318 http protocol):
29+
host:port to which the receiver is going to receive data. The valid syntax is
30+
described at https://github.com/grpc/grpc/blob/master/doc/naming.md.
3131

3232
## Advanced Configuration
3333

@@ -48,7 +48,7 @@ IMPORTANT: bytes fields are encoded as base64 strings.
4848

4949
To write traces with HTTP/JSON, `POST` to `[address]/v1/traces` for traces,
5050
to `[address]/v1/metrics` for metrics, to `[address]/v1/logs` for logs. The default
51-
port is `55681`.
51+
port is `4318`.
5252

5353
The HTTP/JSON endpoint can also optionally configure
5454
[CORS](https://fetch.spec.whatwg.org/#cors-protocol), which is enabled by
@@ -59,7 +59,7 @@ receivers:
5959
otlp:
6060
protocols:
6161
http:
62-
endpoint: "localhost:55681"
62+
endpoint: "localhost:4318"
6363
cors_allowed_origins:
6464
- http://test.com
6565
# Origins can have wildcards with *, use * by itself to match any origin.

receiver/otlpreceiver/config_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func TestLoadConfig(t *testing.T) {
8282
Protocols: Protocols{
8383
GRPC: &configgrpc.GRPCServerSettings{
8484
NetAddr: confignet.NetAddr{
85-
Endpoint: "0.0.0.0:55680",
85+
Endpoint: "0.0.0.0:4317",
8686
Transport: "tcp",
8787
},
8888
ReadBufferSize: 512 * 1024,
@@ -112,7 +112,7 @@ func TestLoadConfig(t *testing.T) {
112112
Protocols: Protocols{
113113
GRPC: &configgrpc.GRPCServerSettings{
114114
NetAddr: confignet.NetAddr{
115-
Endpoint: "0.0.0.0:55680",
115+
Endpoint: "0.0.0.0:4317",
116116
Transport: "tcp",
117117
},
118118
MaxRecvMsgSizeMiB: 32,
@@ -139,7 +139,7 @@ func TestLoadConfig(t *testing.T) {
139139
Protocols: Protocols{
140140
GRPC: &configgrpc.GRPCServerSettings{
141141
NetAddr: confignet.NetAddr{
142-
Endpoint: "0.0.0.0:55680",
142+
Endpoint: "0.0.0.0:4317",
143143
Transport: "tcp",
144144
},
145145
TLSSetting: &configtls.TLSServerSetting{
@@ -151,7 +151,7 @@ func TestLoadConfig(t *testing.T) {
151151
ReadBufferSize: 512 * 1024,
152152
},
153153
HTTP: &confighttp.HTTPServerSettings{
154-
Endpoint: "0.0.0.0:55681",
154+
Endpoint: "0.0.0.0:4318",
155155
TLSSetting: &configtls.TLSServerSetting{
156156
TLSSetting: configtls.TLSSetting{
157157
CertFile: "test.crt",
@@ -170,7 +170,7 @@ func TestLoadConfig(t *testing.T) {
170170
},
171171
Protocols: Protocols{
172172
HTTP: &confighttp.HTTPServerSettings{
173-
Endpoint: "0.0.0.0:55681",
173+
Endpoint: "0.0.0.0:4318",
174174
CorsOrigins: []string{"https://*.test.com", "https://test.com"},
175175
},
176176
},

receiver/otlpreceiver/factory.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"fmt"
2020

2121
"github.com/spf13/viper"
22+
"go.uber.org/zap"
2223

2324
"go.opentelemetry.io/collector/component"
2425
"go.opentelemetry.io/collector/config/configgrpc"
@@ -37,6 +38,11 @@ const (
3738
protoGRPC = "grpc"
3839
protoHTTP = "http"
3940
protocolsFieldName = "protocols"
41+
42+
defaultGRPCEndpoint = "0.0.0.0:4317"
43+
defaultHTTPEndpoint = "0.0.0.0:4318"
44+
legacyGRPCEndpoint = "0.0.0.0:55680"
45+
legacyHTTPEndpoint = "0.0.0.0:55681"
4046
)
4147

4248
func NewFactory() component.ReceiverFactory {
@@ -59,14 +65,14 @@ func createDefaultConfig() configmodels.Receiver {
5965
Protocols: Protocols{
6066
GRPC: &configgrpc.GRPCServerSettings{
6167
NetAddr: confignet.NetAddr{
62-
Endpoint: "0.0.0.0:55680",
68+
Endpoint: defaultGRPCEndpoint,
6369
Transport: "tcp",
6470
},
6571
// We almost write 0 bytes, so no need to tune WriteBufferSize.
6672
ReadBufferSize: 512 * 1024,
6773
},
6874
HTTP: &confighttp.HTTPServerSettings{
69-
Endpoint: "0.0.0.0:55681",
75+
Endpoint: defaultHTTPEndpoint,
7076
},
7177
},
7278
}
@@ -117,11 +123,11 @@ func customUnmarshaler(componentViperSection *viper.Viper, intoCfg interface{})
117123
// CreateTracesReceiver creates a trace receiver based on provided config.
118124
func createTraceReceiver(
119125
ctx context.Context,
120-
_ component.ReceiverCreateParams,
126+
params component.ReceiverCreateParams,
121127
cfg configmodels.Receiver,
122128
nextConsumer consumer.TracesConsumer,
123129
) (component.TracesReceiver, error) {
124-
r, err := createReceiver(cfg)
130+
r, err := createReceiver(cfg, params.Logger)
125131
if err != nil {
126132
return nil, err
127133
}
@@ -134,11 +140,11 @@ func createTraceReceiver(
134140
// CreateMetricsReceiver creates a metrics receiver based on provided config.
135141
func createMetricsReceiver(
136142
ctx context.Context,
137-
_ component.ReceiverCreateParams,
143+
params component.ReceiverCreateParams,
138144
cfg configmodels.Receiver,
139145
consumer consumer.MetricsConsumer,
140146
) (component.MetricsReceiver, error) {
141-
r, err := createReceiver(cfg)
147+
r, err := createReceiver(cfg, params.Logger)
142148
if err != nil {
143149
return nil, err
144150
}
@@ -151,11 +157,11 @@ func createMetricsReceiver(
151157
// CreateLogReceiver creates a log receiver based on provided config.
152158
func createLogReceiver(
153159
ctx context.Context,
154-
_ component.ReceiverCreateParams,
160+
params component.ReceiverCreateParams,
155161
cfg configmodels.Receiver,
156162
consumer consumer.LogsConsumer,
157163
) (component.LogsReceiver, error) {
158-
r, err := createReceiver(cfg)
164+
r, err := createReceiver(cfg, params.Logger)
159165
if err != nil {
160166
return nil, err
161167
}
@@ -165,7 +171,7 @@ func createLogReceiver(
165171
return r, nil
166172
}
167173

168-
func createReceiver(cfg configmodels.Receiver) (*otlpReceiver, error) {
174+
func createReceiver(cfg configmodels.Receiver, logger *zap.Logger) (*otlpReceiver, error) {
169175
rCfg := cfg.(*Config)
170176

171177
// There must be one receiver for both metrics and traces. We maintain a map of
@@ -176,7 +182,7 @@ func createReceiver(cfg configmodels.Receiver) (*otlpReceiver, error) {
176182
if !ok {
177183
var err error
178184
// We don't have a receiver, so create one.
179-
receiver, err = newOtlpReceiver(rCfg)
185+
receiver, err = newOtlpReceiver(rCfg, logger)
180186
if err != nil {
181187
return nil, err
182188
}

receiver/otlpreceiver/otlp.go

Lines changed: 58 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ import (
2222
"sync"
2323

2424
gatewayruntime "github.com/grpc-ecosystem/grpc-gateway/runtime"
25+
"go.uber.org/zap"
2526
"google.golang.org/grpc"
2627

2728
"go.opentelemetry.io/collector/component"
2829
"go.opentelemetry.io/collector/component/componenterror"
30+
"go.opentelemetry.io/collector/config/configgrpc"
2931
"go.opentelemetry.io/collector/config/confighttp"
3032
"go.opentelemetry.io/collector/consumer"
3133
collectorlog "go.opentelemetry.io/collector/internal/data/opentelemetry-proto-gen/collector/logs/v1"
@@ -49,14 +51,17 @@ type otlpReceiver struct {
4951

5052
stopOnce sync.Once
5153
startServerOnce sync.Once
54+
55+
logger *zap.Logger
5256
}
5357

5458
// newOtlpReceiver just creates the OpenTelemetry receiver services. It is the caller's
5559
// responsibility to invoke the respective Start*Reception methods as well
5660
// as the various Stop*Reception methods to end it.
57-
func newOtlpReceiver(cfg *Config) (*otlpReceiver, error) {
61+
func newOtlpReceiver(cfg *Config, logger *zap.Logger) (*otlpReceiver, error) {
5862
r := &otlpReceiver{
59-
cfg: cfg,
63+
cfg: cfg,
64+
logger: logger,
6065
}
6166
if cfg.GRPC != nil {
6267
opts, err := cfg.GRPC.ToServerOption()
@@ -84,6 +89,36 @@ func newOtlpReceiver(cfg *Config) (*otlpReceiver, error) {
8489
return r, nil
8590
}
8691

92+
func (r *otlpReceiver) startGRPCServer(cfg *configgrpc.GRPCServerSettings, host component.Host) error {
93+
r.logger.Info("Starting GRPC server on endpoint " + cfg.NetAddr.Endpoint)
94+
var gln net.Listener
95+
gln, err := cfg.ToListener()
96+
if err != nil {
97+
return err
98+
}
99+
go func() {
100+
if errGrpc := r.serverGRPC.Serve(gln); errGrpc != nil {
101+
host.ReportFatalError(errGrpc)
102+
}
103+
}()
104+
return nil
105+
}
106+
107+
func (r *otlpReceiver) startHTTPServer(cfg *confighttp.HTTPServerSettings, host component.Host) error {
108+
r.logger.Info("Starting HTTP server on endpoint " + cfg.Endpoint)
109+
var hln net.Listener
110+
hln, err := r.cfg.HTTP.ToListener()
111+
if err != nil {
112+
return err
113+
}
114+
go func() {
115+
if errHTTP := r.serverHTTP.Serve(hln); errHTTP != nil {
116+
host.ReportFatalError(errHTTP)
117+
}
118+
}()
119+
return nil
120+
}
121+
87122
// Start runs the trace receiver on the gRPC server. Currently
88123
// it also enables the metrics receiver too.
89124
func (r *otlpReceiver) Start(_ context.Context, host component.Host) error {
@@ -94,32 +129,41 @@ func (r *otlpReceiver) Start(_ context.Context, host component.Host) error {
94129
var err error
95130
r.startServerOnce.Do(func() {
96131
if r.cfg.GRPC != nil {
97-
var gln net.Listener
98-
gln, err = r.cfg.GRPC.ToListener()
132+
err = r.startGRPCServer(r.cfg.GRPC, host)
99133
if err != nil {
100134
return
101135
}
102-
go func() {
103-
if errGrpc := r.serverGRPC.Serve(gln); errGrpc != nil {
104-
host.ReportFatalError(errGrpc)
136+
if r.cfg.GRPC.NetAddr.Endpoint == defaultGRPCEndpoint {
137+
r.logger.Info("Setting up a second GRPC listener on legacy endpoint " + legacyGRPCEndpoint)
138+
139+
// Copy the config.
140+
cfgLegacyGRPC := r.cfg.GRPC
141+
// And use the legacy endpoint.
142+
cfgLegacyGRPC.NetAddr.Endpoint = legacyGRPCEndpoint
143+
err = r.startGRPCServer(cfgLegacyGRPC, host)
144+
if err != nil {
145+
return
105146
}
106-
}()
147+
}
107148
}
108149
if r.cfg.HTTP != nil {
109150
r.serverHTTP = r.cfg.HTTP.ToServer(
110151
r.gatewayMux,
111152
confighttp.WithErrorHandler(errorHandler),
112153
)
113-
var hln net.Listener
114-
hln, err = r.cfg.HTTP.ToListener()
154+
err = r.startHTTPServer(r.cfg.HTTP, host)
115155
if err != nil {
116156
return
117157
}
118-
go func() {
119-
if errHTTP := r.serverHTTP.Serve(hln); errHTTP != nil {
120-
host.ReportFatalError(errHTTP)
158+
if r.cfg.HTTP.Endpoint == defaultHTTPEndpoint {
159+
r.logger.Info("Setting up a second HTTP listener on legacy endpoint " + legacyHTTPEndpoint)
160+
cfgLegacyHTTP := r.cfg.HTTP
161+
cfgLegacyHTTP.Endpoint = legacyHTTPEndpoint
162+
err = r.startHTTPServer(cfgLegacyHTTP, host)
163+
if err != nil {
164+
return
121165
}
122-
}()
166+
}
123167
}
124168
})
125169
return err

receiver/otlpreceiver/otlp_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/gogo/protobuf/jsonpb"
3131
"github.com/stretchr/testify/assert"
3232
"github.com/stretchr/testify/require"
33+
"go.uber.org/zap"
3334
spb "google.golang.org/genproto/googleapis/rpc/status"
3435
"google.golang.org/grpc"
3536
"google.golang.org/grpc/codes"
@@ -698,7 +699,7 @@ func TestGRPCInvalidTLSCredentials(t *testing.T) {
698699
}
699700

700701
// TLS is resolved during Creation of the receiver for GRPC.
701-
_, err := createReceiver(cfg)
702+
_, err := createReceiver(cfg, zap.NewNop())
702703
assert.EqualError(t, err,
703704
`failed to load TLS config: for auth via TLS, either both certificate and key must be supplied, or neither`)
704705
}
@@ -745,7 +746,7 @@ func newHTTPReceiver(t *testing.T, endpoint string, tc consumer.TracesConsumer,
745746
}
746747

747748
func newReceiver(t *testing.T, factory component.ReceiverFactory, cfg *Config, tc consumer.TracesConsumer, mc consumer.MetricsConsumer) *otlpReceiver {
748-
r, err := createReceiver(cfg)
749+
r, err := createReceiver(cfg, zap.NewNop())
749750
require.NoError(t, err)
750751
if tc != nil {
751752
params := component.ReceiverCreateParams{}

service/internal/resources.go

Lines changed: 6 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)