Skip to content

Commit 33ec88e

Browse files
authored
add support for otel in env variable
2 parents 6459382 + ed9b495 commit 33ec88e

2 files changed

Lines changed: 35 additions & 8 deletions

File tree

http_proxy.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,19 @@ import (
7878
const (
7979
timeoutToDialOriginSite = 10 * time.Second
8080

81-
teleportHost = "telemetry.iantem.io:443"
81+
defaultTeleportHost = "telemetry.iantem.io:443"
8282
)
8383

84+
// getTelemetryEndpoint returns the OTEL endpoint to use for telemetry.
85+
// It checks the OTEL_EXPORTER_OTLP_ENDPOINT environment variable first,
86+
// falling back to the default if not set.
87+
func getTelemetryEndpoint() string {
88+
if endpoint := os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT"); endpoint != "" {
89+
return endpoint
90+
}
91+
return defaultTeleportHost
92+
}
93+
8494
var (
8595
log = golog.LoggerFor("lantern-proxy")
8696

@@ -594,7 +604,7 @@ func (p *Proxy) createFilterChain(bl *blacklist.Blacklist) (filters.Chain, proxy
594604

595605
func (p *Proxy) configureTeleportProxiedBytes() func() {
596606
log.Debug("Configuring Teleport proxied bytes")
597-
tp, stop := otel.BuildTracerProvider(p.buildOTELOpts(teleportHost, true))
607+
tp, stop := otel.BuildTracerProvider(p.buildOTELOpts(getTelemetryEndpoint(), true))
598608
if tp != nil {
599609
go p.instrument.ReportProxiedBytesPeriodically(1*time.Hour, tp)
600610
ogStop := stop
@@ -609,7 +619,7 @@ func (p *Proxy) configureTeleportProxiedBytes() func() {
609619
func (p *Proxy) configureTeleportOriginBytes() func() {
610620
log.Debug("Configuring Teleport origin bytes")
611621
// Note - we do not include the proxy name here to avoid associating origin site usage with devices on that proxy name
612-
tp, stop := otel.BuildTracerProvider(p.buildOTELOpts(teleportHost, false))
622+
tp, stop := otel.BuildTracerProvider(p.buildOTELOpts(getTelemetryEndpoint(), false))
613623
if tp != nil {
614624
go p.instrument.ReportOriginBytesPeriodically(1*time.Hour, tp)
615625
ogStop := stop
@@ -624,7 +634,7 @@ func (p *Proxy) configureTeleportOriginBytes() func() {
624634
func (p *Proxy) configureOTELMetrics() (func(), error) {
625635
return otel.InitGlobalMeterProvider(
626636
p.buildOTELOpts(
627-
teleportHost,
637+
getTelemetryEndpoint(),
628638
false, // don't include proxy name in order to reduce DataDog costs
629639
))
630640
}

otel/otel.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package otel
22

33
import (
44
"context"
5+
"strings"
56
"time"
67

78
sdkotel "go.opentelemetry.io/otel"
@@ -88,10 +89,18 @@ func (opts *Opts) buildResource() *resource.Resource {
8889

8990
func BuildTracerProvider(opts *Opts) (*sdktrace.TracerProvider, func()) {
9091
// Create HTTP client to talk to OTEL collector
91-
client := otlptracehttp.NewClient(
92+
clientOpts := []otlptracehttp.Option{
9293
otlptracehttp.WithEndpoint(opts.Endpoint),
9394
otlptracehttp.WithHeaders(opts.Headers),
94-
)
95+
}
96+
97+
// If endpoint doesn't use port 443, assume insecure (HTTP not HTTPS)
98+
if !strings.Contains(opts.Endpoint, ":443") {
99+
log.Debugf("Using insecure connection for OTEL endpoint %v", opts.Endpoint)
100+
clientOpts = append(clientOpts, otlptracehttp.WithInsecure())
101+
}
102+
103+
client := otlptracehttp.NewClient(clientOpts...)
95104

96105
// Create an exporter that exports to the OTEL collector
97106
exporter, err := otlptrace.New(context.Background(), client)
@@ -127,7 +136,7 @@ func BuildTracerProvider(opts *Opts) (*sdktrace.TracerProvider, func()) {
127136
}
128137

129138
func InitGlobalMeterProvider(opts *Opts) (func(), error) {
130-
exp, err := otlpmetrichttp.New(context.Background(),
139+
metricOpts := []otlpmetrichttp.Option{
131140
otlpmetrichttp.WithEndpoint(opts.Endpoint),
132141
otlpmetrichttp.WithHeaders(opts.Headers),
133142
otlpmetrichttp.WithTemporalitySelector(func(kind sdkmetric.InstrumentKind) metricdata.Temporality {
@@ -142,7 +151,15 @@ func InitGlobalMeterProvider(opts *Opts) (func(), error) {
142151
return metricdata.CumulativeTemporality
143152
}
144153
}),
145-
)
154+
}
155+
156+
// If endpoint doesn't use port 443, assume insecure (HTTP not HTTPS)
157+
if !strings.Contains(opts.Endpoint, ":443") {
158+
log.Debugf("Using insecure connection for OTEL metrics endpoint %v", opts.Endpoint)
159+
metricOpts = append(metricOpts, otlpmetrichttp.WithInsecure())
160+
}
161+
162+
exp, err := otlpmetrichttp.New(context.Background(), metricOpts...)
146163
if err != nil {
147164
return nil, err
148165
}

0 commit comments

Comments
 (0)