Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/boulder-wfe2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,7 @@ func main() {
}

logger.Infof("Server running, listening on %s....", c.WFE.ListenAddress)
handler := wfe.Handler(stats, c.OpenTelemetryHTTPConfig.Options()...)
handler := wfe.Handler(stats)

srv := web.NewServer(c.WFE.ListenAddress, handler, logger)
go func() {
Expand Down
16 changes: 2 additions & 14 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"strings"

"github.com/prometheus/client_golang/prometheus"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"google.golang.org/grpc/resolver"

"github.com/letsencrypt/boulder/config"
Expand Down Expand Up @@ -463,8 +462,7 @@ type GRPCServiceConfig struct {
ClientNames []string `json:"clientNames" validate:"min=1,dive,hostname,required"`
}

// OpenTelemetryConfig configures tracing via OpenTelemetry.
// To enable tracing, set a nonzero SampleRatio and configure an Endpoint
// OpenTelemetryConfig is temporarily a no-op until we re-implement OpenTelemetry traces.
type OpenTelemetryConfig struct {
// Endpoint to connect to with the OTLP protocol over gRPC.
// It should be of the form "localhost:4317"
Expand All @@ -485,7 +483,7 @@ type OpenTelemetryConfig struct {
SampleRatio float64
}

// OpenTelemetryHTTPConfig configures the otelhttp server tracing.
// OpenTelemetryHTTPConfig is temporarily a no-op until we re-enable OpenTelemetry tracing.
type OpenTelemetryHTTPConfig struct {
// TrustIncomingSpans should only be set true if there's a trusted service
// connecting to Boulder, such as a load balancer that's tracing-aware.
Expand All @@ -494,16 +492,6 @@ type OpenTelemetryHTTPConfig struct {
TrustIncomingSpans bool
}

// Options returns the otelhttp options for this configuration. They can be
// passed to otelhttp.NewHandler or Boulder's wrapper, measured_http.New.
func (c *OpenTelemetryHTTPConfig) Options() []otelhttp.Option {
var options []otelhttp.Option
if !c.TrustIncomingSpans {
options = append(options, otelhttp.WithPublicEndpoint())
}
return options
}

// DNSProvider contains the configuration for a DNS provider in the bdns package
// which supports dynamic reloading of its backends.
type DNSProvider struct {
Expand Down
2 changes: 1 addition & 1 deletion cmd/sfe/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ func main() {
cmd.FailOnError(err, "Unable to create SFE")

logger.Infof("Server running, listening on %s....", c.SFE.ListenAddress)
handler := sfei.Handler(stats, c.OpenTelemetryHTTPConfig.Options()...)
handler := sfei.Handler(stats)

srv := web.NewServer(c.SFE.ListenAddress, handler, logger)
go func() {
Expand Down
79 changes: 9 additions & 70 deletions cmd/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,21 @@ import (
"syscall"
"time"

"github.com/go-logr/stdr"
"github.com/go-sql-driver/mysql"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors"
"github.com/prometheus/client_golang/prometheus/collectors/version"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/prometheus/client_golang/prometheus/push"
"github.com/redis/go-redis/v9"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.30.0"
"google.golang.org/grpc/grpclog"

"github.com/letsencrypt/validator/v10"

"github.com/letsencrypt/boulder/config"
"github.com/letsencrypt/boulder/core"
blog "github.com/letsencrypt/boulder/log"
"github.com/letsencrypt/boulder/strictyaml"
"github.com/letsencrypt/validator/v10"
)

// Because we don't know when this init will be called with respect to
Expand Down Expand Up @@ -160,19 +154,11 @@ func (lw logWriter) Write(p []byte) (n int, err error) {
return
}

// logOutput implements the log.Logger interface's Output method for use with logr
type logOutput struct {
blog.Logger
}

func (l logOutput) Output(calldepth int, logline string) error {
l.Logger.Info(logline)
return nil
}

// StatsAndLogging sets up an AuditLogger, Prometheus Registerer, and
// OpenTelemetry tracing. It returns the Registerer and AuditLogger, along
// with a graceful shutdown function to be deferred.
// StatsAndLogging sets up an AuditLogger and Prometheus Registerer. It takes
// an unused OpenTelemetryConfig for future implementation.
//
// Returns the Registerer and AuditLogger, along with a graceful shutdown
// function to be deferred.
//
// It spawns off an HTTP server on the provided port to report the stats and
// provide pprof profiling handlers.
Expand All @@ -182,12 +168,10 @@ func (l logOutput) Output(calldepth int, logline string) error {
// is called, because gRPC's SetLogger doesn't use any locking.
//
// This function does not return an error, and will panic on problems.
func StatsAndLogging(logConf SyslogConfig, otConf OpenTelemetryConfig, addr string) (*prometheus.Registry, blog.Logger, func(context.Context)) {
func StatsAndLogging(logConf SyslogConfig, _ OpenTelemetryConfig, addr string) (*prometheus.Registry, blog.Logger, func(context.Context)) {
logger := NewLogger(logConf)

shutdown := NewOpenTelemetry(otConf, logger)

return newStatsRegistry(addr, logger), logger, shutdown
return newStatsRegistry(addr, logger), logger, func(context.Context) {}
}

// NewLogger creates a logger object with the provided settings, sets it as
Expand Down Expand Up @@ -282,7 +266,6 @@ func newStatsRegistry(addr string, logger blog.Logger) *prometheus.Registry {
mux.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index))
mux.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile))
mux.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol))
mux.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace))
// These handlers are defined in runtime/pprof instead of net/http/pprof, and
// have to be accessed through net/http/pprof's Handler func.
mux.Handle("/debug/pprof/goroutine", pprof.Handler("goroutine"))
Expand Down Expand Up @@ -310,50 +293,6 @@ func newStatsRegistry(addr string, logger blog.Logger) *prometheus.Registry {
return registry
}

// NewOpenTelemetry sets up our OpenTelemetry tracing
// It returns a graceful shutdown function to be deferred.
func NewOpenTelemetry(config OpenTelemetryConfig, logger blog.Logger) func(ctx context.Context) {
otel.SetLogger(stdr.New(logOutput{logger}))
otel.SetErrorHandler(otel.ErrorHandlerFunc(func(err error) { logger.Errf("OpenTelemetry error: %v", err) }))

resources := resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceName(core.Command()),
semconv.ServiceVersion(core.GetBuildID()),
semconv.ProcessPID(os.Getpid()),
)

opts := []trace.TracerProviderOption{
trace.WithResource(resources),
// Use a ParentBased sampler to respect the sample decisions on incoming
// traces, and TraceIDRatioBased to randomly sample new traces.
trace.WithSampler(trace.ParentBased(trace.TraceIDRatioBased(config.SampleRatio))),
}

if config.Endpoint != "" {
exporter, err := otlptracegrpc.New(
context.Background(),
otlptracegrpc.WithInsecure(),
otlptracegrpc.WithEndpoint(config.Endpoint))
if err != nil {
FailOnError(err, "Could not create OpenTelemetry OTLP exporter")
}

opts = append(opts, trace.WithBatcher(exporter))
}

tracerProvider := trace.NewTracerProvider(opts...)
otel.SetTracerProvider(tracerProvider)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))

return func(ctx context.Context) {
err := tracerProvider.Shutdown(ctx)
if err != nil {
logger.Errf("Error while shutting down OpenTelemetry: %v", err)
}
}
}

// AuditPanic catches and logs panics, then exits with exit code 1.
// This method should be called in a defer statement as early as possible.
func AuditPanic() {
Expand Down
12 changes: 3 additions & 9 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ require (
github.com/aws/smithy-go v1.27.9
github.com/eggsampler/acme/v3 v3.8.1
github.com/go-jose/go-jose/v4 v4.1.6
github.com/go-logr/stdr v1.2.2
github.com/go-sql-driver/mysql v1.9.1
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
github.com/google/certificate-transparency-go v1.3.2-0.20250507091337-0eddb39e94f8
Expand All @@ -34,8 +33,6 @@ require (
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0
go.opentelemetry.io/otel v1.45.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.45.0
go.opentelemetry.io/otel/sdk v1.45.0
go.opentelemetry.io/otel/trace v1.45.0
go.yaml.in/yaml/v3 v3.0.4
golang.org/x/crypto v0.57.0
Expand Down Expand Up @@ -66,29 +63,26 @@ require (
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.38.7 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.45.7 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-logr/logr v1.4.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/poy/onpar v1.1.2 // indirect
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/redis/go-redis/extra/rediscmd/v9 v9.5.3 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.45.0 // indirect
go.opentelemetry.io/otel/metric v1.45.0 // indirect
go.opentelemetry.io/proto/otlp v1.11.0 // indirect
go.opentelemetry.io/otel/sdk v1.45.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.45.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
golang.org/x/sys v0.48.0 // indirect
golang.org/x/tools v0.49.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
)
14 changes: 0 additions & 14 deletions go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading