From f805589e9d5199df61bac40290b4ad5220e5ea1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sw=C3=A4rd?= Date: Mon, 21 Aug 2023 12:27:37 +0200 Subject: [PATCH] Update sharing and ocdav tracing. (#7014) --- ocis-pkg/tracing/tracing.go | 37 ----------------------- services/ocdav/pkg/command/server.go | 12 ++------ services/ocdav/pkg/config/config.go | 7 ----- services/ocdav/pkg/config/tracing.go | 21 +++++++++++++ services/ocdav/pkg/tracing/tracing.go | 18 ----------- services/sharing/pkg/command/server.go | 5 +-- services/sharing/pkg/config/config.go | 6 ---- services/sharing/pkg/config/tracing.go | 21 +++++++++++++ services/sharing/pkg/revaconfig/config.go | 7 ----- services/sharing/pkg/tracing/tracing.go | 18 ----------- 10 files changed, 48 insertions(+), 104 deletions(-) create mode 100644 services/ocdav/pkg/config/tracing.go delete mode 100644 services/ocdav/pkg/tracing/tracing.go create mode 100644 services/sharing/pkg/config/tracing.go delete mode 100644 services/sharing/pkg/tracing/tracing.go diff --git a/ocis-pkg/tracing/tracing.go b/ocis-pkg/tracing/tracing.go index f94c0a93f5..a949b234c1 100644 --- a/ocis-pkg/tracing/tracing.go +++ b/ocis-pkg/tracing/tracing.go @@ -9,7 +9,6 @@ import ( "time" rtrace "github.com/cs3org/reva/v2/pkg/trace" - "github.com/owncloud/ocis/v2/ocis-pkg/log" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/exporters/jaeger" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" @@ -163,39 +162,3 @@ func parseAgentConfig(ae string) (string, string, error) { } return p[0], p[1], nil } - -// Configure for Reva serves only as informational / instructive log messages. Tracing config will be delegated directly -// to Reva services. -func Configure(enabled bool, tracingType string, logger log.Logger) { - if enabled { - switch tracingType { - case "agent": - logger.Error(). - Str("type", tracingType). - Msg("Reva only supports the jaeger or otel tracing exporter") - - case "jaeger": - logger.Info(). - Str("type", tracingType). - Msg("configuring storage to use the jaeger tracing exporter") - - case "otlp": - logger.Info(). - Str("type", tracingType). - Msg("configuring storage to use the otlp tracing exporter") - - case "zipkin": - logger.Error(). - Str("type", tracingType). - Msg("Reva only supports the jaeger or otel tracing exporter") - - default: - logger.Warn(). - Str("type", tracingType). - Msg("Unknown tracing exporter") - } - } else { - logger.Debug(). - Msg("Tracing is not enabled") - } -} diff --git a/services/ocdav/pkg/command/server.go b/services/ocdav/pkg/command/server.go index cc907562b8..edd27c1d40 100644 --- a/services/ocdav/pkg/command/server.go +++ b/services/ocdav/pkg/command/server.go @@ -9,12 +9,12 @@ import ( "github.com/oklog/run" "github.com/owncloud/ocis/v2/ocis-pkg/broker" "github.com/owncloud/ocis/v2/ocis-pkg/config/configlog" + "github.com/owncloud/ocis/v2/ocis-pkg/tracing" "github.com/owncloud/ocis/v2/ocis-pkg/version" "github.com/owncloud/ocis/v2/services/ocdav/pkg/config" "github.com/owncloud/ocis/v2/services/ocdav/pkg/config/parser" "github.com/owncloud/ocis/v2/services/ocdav/pkg/logging" "github.com/owncloud/ocis/v2/services/ocdav/pkg/server/debug" - "github.com/owncloud/ocis/v2/services/ocdav/pkg/tracing" "github.com/urfave/cli/v2" ) @@ -29,7 +29,7 @@ func Server(cfg *config.Config) *cli.Command { }, Action: func(c *cli.Context) error { logger := logging.Configure(cfg.Service.Name, cfg.Log) - err := tracing.Configure(cfg, logger) + tracingProvider, err := tracing.GetServiceTraceProvider(cfg.Tracing, cfg.Service.Name) if err != nil { return err } @@ -83,13 +83,7 @@ func Server(cfg *config.Config) *cli.Command { // ocdav.TLSConfig() // tls config for the http server ocdav.MetricsEnabled(true), ocdav.MetricsNamespace("ocis"), - } - - if cfg.Tracing.Enabled { - opts = append(opts, - ocdav.Tracing(cfg.Tracing.Endpoint, cfg.Tracing.Collector), - ocdav.WithTracingExporter(cfg.Tracing.Type), - ) + ocdav.WithTraceProvider(tracingProvider), } s, err := ocdav.Service(opts...) diff --git a/services/ocdav/pkg/config/config.go b/services/ocdav/pkg/config/config.go index 0198006cec..a89acd3880 100644 --- a/services/ocdav/pkg/config/config.go +++ b/services/ocdav/pkg/config/config.go @@ -39,13 +39,6 @@ type Config struct { AllowPropfindDepthInfinity bool `yaml:"allow_propfind_depth_infinity" env:"OCDAV_ALLOW_PROPFIND_DEPTH_INFINITY" desc:"Allow the use of depth infinity in PROPFINDS. When enabled, a propfind will traverse through all subfolders. If many subfolders are expected, depth infinity can cause heavy server load and/or delayed response times."` } -type Tracing struct { - Enabled bool `yaml:"enabled" env:"OCIS_TRACING_ENABLED;OCDAV_TRACING_ENABLED" desc:"Activates tracing."` - Type string `yaml:"type" env:"OCIS_TRACING_TYPE;OCDAV_TRACING_TYPE" desc:"The type of tracing. Defaults to '', which is the same as 'jaeger'. Allowed tracing types are 'jaeger' and '' as of now."` - Endpoint string `yaml:"endpoint" env:"OCIS_TRACING_ENDPOINT;OCDAV_TRACING_ENDPOINT" desc:"The endpoint of the tracing agent."` - Collector string `yaml:"collector" env:"OCIS_TRACING_COLLECTOR;OCDAV_TRACING_COLLECTOR" desc:"The HTTP endpoint for sending spans directly to a collector, i.e. http://jaeger-collector:14268/api/traces. Only used if the tracing endpoint is unset."` -} - type Log struct { Level string `yaml:"level" env:"OCIS_LOG_LEVEL;OCDAV_LOG_LEVEL" desc:"The log level. Valid values are: 'panic', 'fatal', 'error', 'warn', 'info', 'debug', 'trace'."` Pretty bool `yaml:"pretty" env:"OCIS_LOG_PRETTY;OCDAV_LOG_PRETTY" desc:"Activates pretty log output."` diff --git a/services/ocdav/pkg/config/tracing.go b/services/ocdav/pkg/config/tracing.go new file mode 100644 index 0000000000..34ec9d793f --- /dev/null +++ b/services/ocdav/pkg/config/tracing.go @@ -0,0 +1,21 @@ +package config + +import "github.com/owncloud/ocis/v2/ocis-pkg/tracing" + +// Tracing defines the available tracing configuration. +type Tracing struct { + Enabled bool `yaml:"enabled" env:"OCIS_TRACING_ENABLED;OCDAV_TRACING_ENABLED" desc:"Activates tracing."` + Type string `yaml:"type" env:"OCIS_TRACING_TYPE;OCDAV_TRACING_TYPE" desc:"The type of tracing. Defaults to '', which is the same as 'jaeger'. Allowed tracing types are 'jaeger' and '' as of now."` + Endpoint string `yaml:"endpoint" env:"OCIS_TRACING_ENDPOINT;OCDAV_TRACING_ENDPOINT" desc:"The endpoint of the tracing agent."` + Collector string `yaml:"collector" env:"OCIS_TRACING_COLLECTOR;OCDAV_TRACING_COLLECTOR" desc:"The HTTP endpoint for sending spans directly to a collector, i.e. http://jaeger-collector:14268/api/traces. Only used if the tracing endpoint is unset."` +} + +// Convert Tracing to the tracing package's Config struct. +func (t Tracing) Convert() tracing.Config { + return tracing.Config{ + Enabled: t.Enabled, + Type: t.Type, + Endpoint: t.Endpoint, + Collector: t.Collector, + } +} diff --git a/services/ocdav/pkg/tracing/tracing.go b/services/ocdav/pkg/tracing/tracing.go deleted file mode 100644 index b9f661c861..0000000000 --- a/services/ocdav/pkg/tracing/tracing.go +++ /dev/null @@ -1,18 +0,0 @@ -package tracing - -import ( - "github.com/owncloud/ocis/v2/ocis-pkg/log" - "github.com/owncloud/ocis/v2/ocis-pkg/tracing" - "github.com/owncloud/ocis/v2/services/ocdav/pkg/config" - "go.opentelemetry.io/otel/trace" -) - -var ( - // TraceProvider is the global trace provider for the service. - TraceProvider = trace.NewNoopTracerProvider() -) - -func Configure(cfg *config.Config, logger log.Logger) error { - tracing.Configure(cfg.Tracing.Enabled, cfg.Tracing.Type, logger) - return nil -} diff --git a/services/sharing/pkg/command/server.go b/services/sharing/pkg/command/server.go index 11a521b0cc..37c01972f4 100644 --- a/services/sharing/pkg/command/server.go +++ b/services/sharing/pkg/command/server.go @@ -13,13 +13,13 @@ import ( "github.com/owncloud/ocis/v2/ocis-pkg/config/configlog" "github.com/owncloud/ocis/v2/ocis-pkg/registry" "github.com/owncloud/ocis/v2/ocis-pkg/sync" + "github.com/owncloud/ocis/v2/ocis-pkg/tracing" "github.com/owncloud/ocis/v2/ocis-pkg/version" "github.com/owncloud/ocis/v2/services/sharing/pkg/config" "github.com/owncloud/ocis/v2/services/sharing/pkg/config/parser" "github.com/owncloud/ocis/v2/services/sharing/pkg/logging" "github.com/owncloud/ocis/v2/services/sharing/pkg/revaconfig" "github.com/owncloud/ocis/v2/services/sharing/pkg/server/debug" - "github.com/owncloud/ocis/v2/services/sharing/pkg/tracing" "github.com/urfave/cli/v2" ) @@ -34,7 +34,7 @@ func Server(cfg *config.Config) *cli.Command { }, Action: func(c *cli.Context) error { logger := logging.Configure(cfg.Service.Name, cfg.Log) - err := tracing.Configure(cfg, logger) + tracingProvider, err := tracing.GetServiceTraceProvider(cfg.Tracing, cfg.Service.Name) if err != nil { return err } @@ -63,6 +63,7 @@ func Server(cfg *config.Config) *cli.Command { runtime.RunWithOptions(rCfg, pidFile, runtime.WithLogger(&logger.Logger), runtime.WithRegistry(reg), + runtime.WithTraceProvider(tracingProvider), ) return nil diff --git a/services/sharing/pkg/config/config.go b/services/sharing/pkg/config/config.go index 357d004566..5921643f23 100644 --- a/services/sharing/pkg/config/config.go +++ b/services/sharing/pkg/config/config.go @@ -30,12 +30,6 @@ type Config struct { Supervised bool `yaml:"-"` Context context.Context `yaml:"-"` } -type Tracing struct { - Enabled bool `yaml:"enabled" env:"OCIS_TRACING_ENABLED;SHARING_TRACING_ENABLED" desc:"Activates tracing."` - Type string `yaml:"type" env:"OCIS_TRACING_TYPE;SHARING_TRACING_TYPE" desc:"The type of tracing. Defaults to '', which is the same as 'jaeger'. Allowed tracing types are 'jaeger' and '' as of now."` - Endpoint string `yaml:"endpoint" env:"OCIS_TRACING_ENDPOINT;SHARING_TRACING_ENDPOINT" desc:"The endpoint of the tracing agent."` - Collector string `yaml:"collector" env:"OCIS_TRACING_COLLECTOR;SHARING_TRACING_COLLECTOR" desc:"The HTTP endpoint for sending spans directly to a collector, i.e. http://jaeger-collector:14268/api/traces. Only used if the tracing endpoint is unset."` -} type Log struct { Level string `yaml:"level" env:"OCIS_LOG_LEVEL;SHARING_LOG_LEVEL" desc:"The log level. Valid values are: 'panic', 'fatal', 'error', 'warn', 'info', 'debug', 'trace'."` diff --git a/services/sharing/pkg/config/tracing.go b/services/sharing/pkg/config/tracing.go new file mode 100644 index 0000000000..5a451d9a11 --- /dev/null +++ b/services/sharing/pkg/config/tracing.go @@ -0,0 +1,21 @@ +package config + +import "github.com/owncloud/ocis/v2/ocis-pkg/tracing" + +// Tracing defines the available tracing configuration. +type Tracing struct { + Enabled bool `yaml:"enabled" env:"OCIS_TRACING_ENABLED;SHARING_TRACING_ENABLED" desc:"Activates tracing."` + Type string `yaml:"type" env:"OCIS_TRACING_TYPE;SHARING_TRACING_TYPE" desc:"The type of tracing. Defaults to '', which is the same as 'jaeger'. Allowed tracing types are 'jaeger' and '' as of now."` + Endpoint string `yaml:"endpoint" env:"OCIS_TRACING_ENDPOINT;SHARING_TRACING_ENDPOINT" desc:"The endpoint of the tracing agent."` + Collector string `yaml:"collector" env:"OCIS_TRACING_COLLECTOR;SHARING_TRACING_COLLECTOR" desc:"The HTTP endpoint for sending spans directly to a collector, i.e. http://jaeger-collector:14268/api/traces. Only used if the tracing endpoint is unset."` +} + +// Convert Tracing to the tracing package's Config struct. +func (t Tracing) Convert() tracing.Config { + return tracing.Config{ + Enabled: t.Enabled, + Type: t.Type, + Endpoint: t.Endpoint, + Collector: t.Collector, + } +} diff --git a/services/sharing/pkg/revaconfig/config.go b/services/sharing/pkg/revaconfig/config.go index c01e6b4997..50ed925a5d 100644 --- a/services/sharing/pkg/revaconfig/config.go +++ b/services/sharing/pkg/revaconfig/config.go @@ -7,13 +7,6 @@ import ( // SharingConfigFromStruct will adapt an oCIS config struct into a reva mapstructure to start a reva service. func SharingConfigFromStruct(cfg *config.Config) map[string]interface{} { rcfg := map[string]interface{}{ - "core": map[string]interface{}{ - "tracing_enabled": cfg.Tracing.Enabled, - "tracing_exporter": cfg.Tracing.Type, - "tracing_endpoint": cfg.Tracing.Endpoint, - "tracing_collector": cfg.Tracing.Collector, - "tracing_service_name": cfg.Service.Name, - }, "shared": map[string]interface{}{ "jwt_secret": cfg.TokenManager.JWTSecret, "gatewaysvc": cfg.Reva.Address, diff --git a/services/sharing/pkg/tracing/tracing.go b/services/sharing/pkg/tracing/tracing.go deleted file mode 100644 index b9eb3cfd0f..0000000000 --- a/services/sharing/pkg/tracing/tracing.go +++ /dev/null @@ -1,18 +0,0 @@ -package tracing - -import ( - "github.com/owncloud/ocis/v2/ocis-pkg/log" - "github.com/owncloud/ocis/v2/ocis-pkg/tracing" - "github.com/owncloud/ocis/v2/services/sharing/pkg/config" - "go.opentelemetry.io/otel/trace" -) - -var ( - // TraceProvider is the global trace provider for the service. - TraceProvider = trace.NewNoopTracerProvider() -) - -func Configure(cfg *config.Config, logger log.Logger) error { - tracing.Configure(cfg.Tracing.Enabled, cfg.Tracing.Type, logger) - return nil -}