From 0898847fdb306118bbe0bef48193be0cb84234a3 Mon Sep 17 00:00:00 2001 From: Christian Richter Date: Tue, 25 Apr 2023 14:48:23 +0200 Subject: [PATCH 1/3] open debug endpoint for nats Signed-off-by: Christian Richter --- services/nats/pkg/command/server.go | 22 +++++++++++++++++++ services/nats/pkg/config/config.go | 16 +++++++++----- .../nats/pkg/config/defaults/defaultconfig.go | 17 +++++++++++++- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/services/nats/pkg/command/server.go b/services/nats/pkg/command/server.go index c8de4e2eee..09dc6cb54c 100644 --- a/services/nats/pkg/command/server.go +++ b/services/nats/pkg/command/server.go @@ -9,6 +9,9 @@ import ( "github.com/owncloud/ocis/v2/ocis-pkg/config/configlog" pkgcrypto "github.com/owncloud/ocis/v2/ocis-pkg/crypto" + "github.com/owncloud/ocis/v2/ocis-pkg/handlers" + "github.com/owncloud/ocis/v2/ocis-pkg/service/debug" + "github.com/owncloud/ocis/v2/ocis-pkg/version" "github.com/owncloud/ocis/v2/services/nats/pkg/config" "github.com/owncloud/ocis/v2/services/nats/pkg/config/parser" "github.com/owncloud/ocis/v2/services/nats/pkg/logging" @@ -38,6 +41,25 @@ func Server(cfg *config.Config) *cli.Command { defer cancel() + { + server := debug.NewService( + debug.Logger(logger), + debug.Name(cfg.Service.Name), + debug.Version(version.GetString()), + debug.Address(cfg.Debug.Addr), + debug.Token(cfg.Debug.Token), + debug.Pprof(cfg.Debug.Pprof), + debug.Zpages(cfg.Debug.Zpages), + debug.Health(handlers.Health), + debug.Ready(handlers.Ready), + ) + + gr.Add(server.ListenAndServe, func(_ error) { + _ = server.Shutdown(ctx) + cancel() + }) + } + var tlsConf *tls.Config if cfg.Nats.EnableTLS { // Generate a self-signing cert if no certificate is present diff --git a/services/nats/pkg/config/config.go b/services/nats/pkg/config/config.go index 020c8d473c..1d6186596d 100644 --- a/services/nats/pkg/config/config.go +++ b/services/nats/pkg/config/config.go @@ -9,11 +9,10 @@ import ( // Config combines all available configuration parts. type Config struct { Commons *shared.Commons `yaml:"-"` // don't use this directly as configuration for a service - - Service Service `yaml:"-"` - - Log *Log `yaml:"log"` - Debug Debug `yaml:"debug"` + Service Service `yaml:"-"` + Tracing *Tracing `yaml:"tracing"` + Log *Log `yaml:"log"` + Debug Debug `yaml:"debug"` Nats Nats `ociConfig:"nats"` @@ -31,3 +30,10 @@ type Nats struct { TLSSkipVerifyClientCert bool `yaml:"tls_skip_verify_client_cert" env:"OCIS_INSECURE;NATS_TLS_SKIP_VERIFY_CLIENT_CERT" desc:"Whether the NATS server should skip the client certificate verification during the TLS handshake."` EnableTLS bool `yaml:"enable_tls" env:"OCIS_EVENTS_ENABLE_TLS;NATS_EVENTS_ENABLE_TLS" desc:"Enable TLS for the connection to the events broker. The events broker is the ocis service which receives and delivers events between the services.."` } + +type Tracing struct { + Enabled bool `yaml:"enabled" env:"OCIS_TRACING_ENABLED;NATS_TRACING_ENABLED" desc:"Activates tracing."` + Type string `yaml:"type" env:"OCIS_TRACING_TYPE;NATS_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;NATS_TRACING_ENDPOINT" desc:"The endpoint of the tracing agent."` + Collector string `yaml:"collector" env:"OCIS_TRACING_COLLECTOR;NATS_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."` +} diff --git a/services/nats/pkg/config/defaults/defaultconfig.go b/services/nats/pkg/config/defaults/defaultconfig.go index f4bf4f64e2..9f2add0314 100644 --- a/services/nats/pkg/config/defaults/defaultconfig.go +++ b/services/nats/pkg/config/defaults/defaultconfig.go @@ -22,7 +22,10 @@ func FullDefaultConfig() *config.Config { func DefaultConfig() *config.Config { return &config.Config{ Debug: config.Debug{ - Addr: "127.0.0.1:9234", + Addr: "127.0.0.1:9234", + Token: "", + Pprof: false, + Zpages: false, }, Service: config.Service{ Name: "nats", @@ -52,6 +55,18 @@ func EnsureDefaults(cfg *config.Config) { } else if cfg.Log == nil { cfg.Log = &config.Log{} } + + // provide with defaults for shared tracing, since we need a valid destination address for "envdecode". + if cfg.Tracing == nil && cfg.Commons != nil && cfg.Commons.Tracing != nil { + cfg.Tracing = &config.Tracing{ + Enabled: cfg.Commons.Tracing.Enabled, + Type: cfg.Commons.Tracing.Type, + Endpoint: cfg.Commons.Tracing.Endpoint, + Collector: cfg.Commons.Tracing.Collector, + } + } else if cfg.Tracing == nil { + cfg.Tracing = &config.Tracing{} + } } // Sanitize sanitizes the configuration From 1090113bc1c925c53204a432229698d986ff5282 Mon Sep 17 00:00:00 2001 From: Christian Richter Date: Tue, 25 Apr 2023 14:52:35 +0200 Subject: [PATCH 2/3] add changelog Signed-off-by: Christian Richter --- changelog/unreleased/nats-debug.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 changelog/unreleased/nats-debug.md diff --git a/changelog/unreleased/nats-debug.md b/changelog/unreleased/nats-debug.md new file mode 100644 index 0000000000..6b0a7606c0 --- /dev/null +++ b/changelog/unreleased/nats-debug.md @@ -0,0 +1,6 @@ +Enhancement: Open Debug endpoint for Nats + +We added a debug server to nats + +https://github.com/owncloud/ocis/issues/5002 +https://github.com/owncloud/ocis/pull/6139 \ No newline at end of file From 334e84a7437fd38f34892af8de7cb38c092ff55c Mon Sep 17 00:00:00 2001 From: Christian Richter Date: Wed, 26 Apr 2023 08:54:41 +0200 Subject: [PATCH 3/3] add missing struct description Signed-off-by: Christian Richter --- services/nats/pkg/config/config.go | 1 + 1 file changed, 1 insertion(+) diff --git a/services/nats/pkg/config/config.go b/services/nats/pkg/config/config.go index 1d6186596d..b54b1daa8b 100644 --- a/services/nats/pkg/config/config.go +++ b/services/nats/pkg/config/config.go @@ -31,6 +31,7 @@ type Nats struct { EnableTLS bool `yaml:"enable_tls" env:"OCIS_EVENTS_ENABLE_TLS;NATS_EVENTS_ENABLE_TLS" desc:"Enable TLS for the connection to the events broker. The events broker is the ocis service which receives and delivers events between the services.."` } +// Tracing is the tracing config type Tracing struct { Enabled bool `yaml:"enabled" env:"OCIS_TRACING_ENABLED;NATS_TRACING_ENABLED" desc:"Activates tracing."` Type string `yaml:"type" env:"OCIS_TRACING_TYPE;NATS_TRACING_TYPE" desc:"The type of tracing. Defaults to \"\", which is the same as \"jaeger\". Allowed tracing types are \"jaeger\" and \"\" as of now."`